2012-01-13 16 views
5

Estoy tratando de obtener la latitud/longitud de todos los amigos de un usuario con una sola llamada a la API. Creo que necesito escribir una declaración FQL multi-query, pero no puedo obtener la sintaxis correcta.Obtener la latitud/longitud de la ubicación actual de un amigo usando Graph FQL

Creo que las dos consultas deben ser algo como lo siguiente:

'"friends":"SELECT uid,current_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"' 

'"location":"SELECT location FROM page WHERE id IN (SELECT current_location_id FROM #friends)"'; 

Mi problema es que de alguna manera lo que necesito para obtener el ID de la CURRENT_LOCATION en la primera consulta para que pueda hacer referencia a ella en el segunda consulta, pero solo sé cómo obtener una matriz que contiene la identificación.

¡Gracias por cualquier ayuda!

Aclaración:

No estoy tratando de conseguir check-ins de amigos. En su lugar, quiero graficar la "ubicación_actual" (es decir, donde viven) de todos los amigos de un usuario en un mapa geográfico. Puedo conseguir "CURRENT_LOCATION" de un usuario con la siguiente consulta FQL:

"SELECT uid,sex,current_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())" 

Esta consulta devuelve la siguiente matriz:

[current_location] => Array 
      (
       [city] => New York 
       [state] => New York 
       [country] => United States 
       [zip] => 
       [id] => 108424279189115 
       [name] => New York, New York 
      ) 

que no contiene la longitud y latitud de la de la CURRENT_LOCATION (Nueva York en el ejemplo anterior)

por lo tanto ahora necesita tomar el ID de la CURRENT_LOCATION (por ejemplo, 108,424,279,189,115) y ejecutar una segunda consulta FQL tales como:

"SELECT location,name FROM page WHERE page_id = 108424279189115)" 

Para obtener la latitud y longitud de la ubicación_actual. Actualmente, tengo un código de trabajo que ejecuta la primera consulta FQL, luego extrae page_id en php y luego ejecuta una segunda consulta FQL para obtener la ubicación actual de latitud/longitud. Sin embargo, por razones de rendimiento, me gustaría ejecutar solo una consulta múltiple si esto es posible.

+0

¿Qué finalmente hiciste? – TarunG

+0

En realidad, nunca obtuve la sintaxis array.value para que funcione para mí y acabo de tomar el golpe de rendimiento de ejecución para separar las consultas FQL. – pyro70

Respuesta

2

Editar:

La consulta debería funcionar mediante el ajuste de la segunda consulta a:

'"location":"SELECT location FROM page WHERE id IN (SELECT current_location.id FROM #friends)"'; 

Cuando se trabaja con un tipo de matriz en la API de FB se puede acceder al valor en cualquier consulta haciendo matriz. valor

Además, si todo lo que necesita es el ID de la página, probablemente obtendrá un mejor rendimiento Haciendo current_location.id en su primera consulta


Vas a querer utilizar un fql.multiquery, hay una respuesta similair aquí que se puede adaptar a sus necesidades: Facebook Graph API get all users and their status

La documentación FQL en multiquery se encuentra aquí: http://developers.facebook.com/docs/reference/fql/

también ¿Estás tratando de obtener el lat/long de un objeto checkin? Si lo que necesita para echar un vistazo a este recurso: http://developers.facebook.com/docs/reference/fql/checkin/

Editar:

No estoy seguro de que lo que está tratando de hacer es posible.Solo busqué en la API y probé algunas consultas, la única forma en que puede obtener el latitud/longitud de un amigo parece estar basado en un registro, a partir de ahí puede obtener detalles en la página si es necesario ... Incluso mirando su segunda consulta, current_location_id no se referencia en ninguna parte de la tabla de páginas, y la selección de la ubicación desde la tabla de páginas le proporcionará información de ubicación en el lugar al que pertenece. Tal vez podrías elaborar más sobre lo que estás tratando de lograr.

Aquí es una declaración multiquery he escrito en PHP usando FQL (Seleccionará las coordenadas de todos sus amigos de check in, a continuación, a partir de ahí obtener detalles sobre el lugar del registro perteneciente a ese amigo):

try{ 
    $multiQuery = "{ 
     'query1':'SELECT coords, tagged_uids, page_id FROM checkin WHERE author_uid IN (SELECT uid2 FROM friend WHERE uid1 = me())', 
     'query2':'SELECT name, description FROM page WHERE page_id IN (SELECT page_id FROM #query1)' 
    }"; 

    $param = array(  
     'method' => 'fql.multiquery',  
     'queries' => $multiQuery,  
     'callback' => '' 
    );  
    $queryresults = $facebook->api($param); 
     print_r($queryresults); 
    } 
catch(Exception $o){ 
    print_r($o); 
} 
+0

gracias por la respuesta, pero a menos que me falta algo no responde mi pregunta. Entiendo el ejemplo que publicó (obteniendo estados de usuario), pero en este caso simplemente obtienen el UID de todos sus amigos y luego usan el UID para consultar su estado. Sin embargo, mi problema es que no sé cómo consultar el ID de current_location. Puedo obtener la ubicación_actual de mi amigo como en la consulta #amigos que escribí anteriormente, pero esto devuelve un objeto. Y no puedo usar un objeto para hacer otra consulta. ¿Cómo obtengo la identificación en lugar del objeto? Debería ser simple, pero no puedo encontrar ningún ejemplo. – pyro70

+0

Para aclarar, cuando digo que la consulta arroja un "objeto" para la ubicación_ actual, me refiero a que la consulta retorna a "matriz". – pyro70

+0

¿Ha verificado para ver qué está contenido en el objeto de matriz? Puede ejecutar print_r ($ object); y pegue los resultados, si hay alguno? Voy a probar el código más tarde hoy o mañana por la mañana si todavía no puede resolverlo –

2
fql?q=SELECT location,name FROM page WHERE page_id in (SELECT current_location.id from user where uid in(select uid2 from friend where uid1=me())) 

esto va a hacer la magia para usted

1
facebook.batch_fql({ 
    'query1': "SELECT uid, name, current_location.id FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me())", 
    'query2': "SELECT page_id, name, description, location FROM page WHERE page_id IN (SELECT current_location.id FROM #query1)" 
}) 

volverá dos respuestas

uno será una lista de amigos UID, nombres y sus ubicaciones actuales identificadores

la otra será una lista de ID de ubicación únicos con su nombre, la descripción y la información de geolocalización

EDITAR: si consulta ubicación_actual usando FQL, obtendrás el latón completo en la primera respuesta y ni siquiera necesitarás el segundo

Cuestiones relacionadas