tools tool developers facebook facebook-graph-api facebook-fql

tool - ¿Cómo manejar el gran int facebook uid devuelto por FQL?



facebook developers tools (3)

Hay dos cosas muy consistentes sobre Facebook. Ellos son: 1) cambiar sus API a su antojo sin ningún aviso previo. 2) Inconsistencia entre el gráfico y los objetos fql.

Como ha indicado, los valores sin respuesta devueltos desde Facebook siempre son largos (también conocido como int grande, también conocido como Int64). Y los valores cotizados son representaciones de cadena del valor largo.

Lo que me parece es que la llamada $ facebook-> api está reduciendo los largos a carrozas. Sugeriría iniciar sesión como un error con el equipo $ facebook-> api.

Mientras tanto, mientras corrigen ese error, puede codificar su propio código para hacer la publicación HTTP en el gráfico y analizar los resultados devueltos. No encuentro este problema con la API de C # ni con la API de Javascript.

Tengo un problema al manejar los grandes ID de usuario de Facebook y almacenarlos correctamente en mi base de datos.

Como la aplicación apk REST fql.query va a estar en desuso, estoy usando la API GRAPH para obtener los resultados de la FQL.

Quiero obtener la lista de mis amigos con sexo, relationship_status.

La consulta que ejecuté es

$allFriends = $facebook->api("/fql ?q=SELECT+uid,+name,+sex,+relationship_status+FROM+user+where+uid+in+ (SELECT+uid2+FROM+friend+WHERE+uid1+=$fbuid)" );

Intenté lo anterior en Graph API explorer y el resultado es algo como esto,

{ "data": [ { "uid": 100003082853071, "name": "Sam jones", "sex": "male", "relationship_status": null } ] }

Tenga en cuenta que el uid se devuelve como int , por lo que cada vez que imprimo la matriz en sí tiene valores como (1.34234422 + E03). Así que incluso json_encode para esa matriz no ayuda.

Pero cuando llamo a la API de GRAPH directamente algo así como '' graph.facebook.com/1585213/friends '' que devuelve los datos como

{ "data": [ { "name": "Vijay Kannan", "id": "102937142343" } ] }

Tenga en cuenta que la identificación se devuelve como una cadena .

Cada vez que uso la API gráfica de búsqueda FQL, devuelve toda la información como una '' Matriz '', de modo que los íconos largos de Facebook se transforman en una flotación como (1.34234422 + E03).

¿Cómo puedo convertirlos en uid''s adecuados y almacenarlos / procesarlos nuevamente?

Creo que la incoherencia de la API de FQL y GRAPH también debería ser atendida por Facebook ... ¡Pero no podía esperar para eso!

Alguna idea sobre esto?


Si estás usando php (http://php.net/manual/en/function.sprintf.php):

printf("%14.0f", 1.00000145202E+14);

productos:

100000145202000

Javascript:

parseFloat(''1.00000145202E+14'')


Intenté con la mayoría de los métodos y, después de Google, encontré más foros y una lista de códigos de Facebook si los encontré. Funcionó como un encanto para mí.

Después de obtener los resultados de una consulta FQL usé la siguiente línea de código,

$friends = json_decode(preg_replace(''/"uid":(/d+)/'', ''"uid":"$1"'', $result),true); // consider $result as the result rendered by the FQL query.

Cuando uso file_get_contents para una llamada FB, podría haber visto el error con códigos de error, así que la mejor manera de hacerlo es usando CURL para todas las llamadas a la API FB cuando sea necesario.

Encuentre el código completo que he usado para obtener los resultados adecuados.

$access_token = $facebook->getAccessToken(); $request_url ="https://graph.facebook.com/fql ?q=SELECT+uid,+name,+sex+FROM+user+where+uid+in+ (SELECT+uid2+FROM+friend+WHERE+uid1+=$fbuid)". "&access_token=".$access_token; $opts = array( CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 60, CURLOPT_USERAGENT => ''facebook-php-3.1'', CURLOPT_CAINFO => /lib/fb_ca_chain_bundle.crt'', //replace the above path with proper path of the crt file //in order to avoid the exceptions rendered by FB //when we try to use CURL without proper certification file. ); $opts[CURLOPT_URL] = $request_url; if (isset($opts[CURLOPT_HTTPHEADER])) { $existing_headers = $opts[CURLOPT_HTTPHEADER]; $existing_headers[] = ''Expect:''; $opts[CURLOPT_HTTPHEADER] = $existing_headers; } else { $opts[CURLOPT_HTTPHEADER] = array(''Expect:''); } $ch = curl_init(); curl_setopt_array($ch, $opts); $result = curl_exec($ch); if ($result === false) { $e = new FacebookApiException(array( ''error_code'' => curl_errno($ch), ''error'' => array( ''message'' => curl_error($ch), ''type'' => ''CurlException'', ), )); curl_close($ch); throw $e; } curl_close($ch); $friends = json_decode(preg_replace(''/"uid":(/d+)/'',''"uid":"$1"'',$result));

Solo publico estas respuestas para que pueda ayudar a otros hasta que Facebook resuelva esta incoherencia.