Заключение в кавычки / экранирование элементов jsonpath для в предложении зависимых запросов fql - PullRequest
0 голосов
/ 17 ноября 2011

Используя facebook php sdk, я пытаюсь получить список комментариев для каждого сообщения, сделанного кем-то на стене человека. Я использую FQL в запросе Batch API следующим образом:

$getStream   = urlencode("method/fql.query?query=SELECT post_id, actor_id, target_id, source_id,viewer_id, message FROM stream WHERE app_id= '' and message != '' and source_id=$fbprofileId and target_id=$fbprofileId and is_hidden=0 limit 100");
$getComments = urlencode("method/fql.query?query=select object_id, post_id, fromid, time, text, id, likes, comments, user_likes, is_private from comment where post_id in({result=get-stream:$.*.post_id})");
$queries = array(
                     array('method'                   => 'POST',
                           'omit_response_on_success' => false,
                           'name'                     => 'get-stream',
                           'relative_url'             => $getStream),
                     array('method'                   => 'POST',
                           'omit_response_on_success' => false,
                           'name'                     => 'get-comments',
                           'relative_url'             => $getComments)
                );
return $this->fbApi->api('?batch='.json_encode($queries), 'POST');

Я получаю следующий ответ от fb:

 {"error_code":601,"error_msg":"Parser error: unexpected '_1831955838114' at position 63.","request_args":[{"key":"method","value":"fql_query"},{"key":"format","value":"json"},{"key":"_fb_batch_child_request","value":"1"},{"key":"query","value":"select user_id, object_id from like where post_id in(1216940586_1831955838114,1216940586_1831891396503,1216940586_1831423824814,1216940586_1828915522108,1216940586_1822006149378,1216940586_1820687356409,1216940586_1813971228510,1216940586_1809392594047,1216940586_1795412004541,1216940586_1795177518679)"},{"key":"_fb_url","value":"method\/fql.query"},{"key":"access_token","value":"AAAC02IZB..."}]}

Кажется очевидным, что post_ids нужно заключать в кавычки, и на самом деле, используя тот же запрос fb graph api explorer с кавычками post_ids в предложении IN, я получаю результаты просто отлично.

** Поскольку post_ids являются строками (не целыми числами), как я могу заключить их в кавычки, чтобы сделать их правильными аргументами для предложения FQL IN в контексте зависимых запросов FQL API Batch API? **

Ответы [ 2 ]

0 голосов
/ 26 апреля 2013

Похоже, это решение: '{result = get-stream: $. *. Post_id}'

Так и должно быть $getComments = urlencode("method/fql.query?query=select object_id, post_id, fromid, time, text, id, likes, comments, user_likes, is_private from comment where post_id in( '{result=get-stream:$.*.post_id}' )");

0 голосов
/ 07 декабря 2011

Скорее всего, немного поздно, но в качестве альтернативы API-интерфейс FQL поддерживает пакетные запросы, которые правильно обрабатывают типы: http://developers.facebook.com/docs/reference/fql/

Вы создаете карту запросов JSON и отправляете их вместе:

https://graph.facebook.com/fql?q={
  "friends":"SELECT uid2 FROM friend WHERE uid1=me()",
  "with_birthdays":"SELECT uid, name FROM user WHERE uid IN (select uid2 from #friends) and birthday_date"
}&access_token=yourToken29873

Очевидно, что эти запросы кодируются (оставлены незашифрованными для удобства чтения).Я собираюсь посмотреть, смогу ли я найти решение для этого в пакетном API, хотя, я отредактирую, если найду что-нибудь.но я либо не получаю ошибок и результатов, либо ошибок синтаксического анализатора)

...