FQL multiquery в пакетном запросе - PullRequest
0 голосов
/ 25 февраля 2012

Могу ли я использовать FQL multiquery для пакетного запроса Я не нашел примеров в Google.

Я запускаю этот запрос

[{\"method\":\"GET\",
\"relative_url\":\"fql?q=
   {\"posts\":\"SELECT post_id, actor_id, source_id, target_id, message, created_time FROM stream WHERE source_id = ... LIMIT 0, 10\"}\, 
   {\"users\":\"SELECT uid, name FROM users WHERE uid IN (SELECT actor_id FROM #posts) LIMIT 0, 10\"}
 \"}]

Но в ответ я получаю:

HttpResponse: 400: {"error":{"message":"batch parameter must be a JSON array","type":"GraphBatchException"}}

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Функция Batching возвращает это сообщение, когда вы отправляете партию размером 1. Например,

curl -k -F 'access_token=...' \
  -F 'batch=[{"method":"GET","relative_url":"me"}]' https://graph.facebook.com

выдает ту же ошибку, тогда как

curl -k -F 'access_token=...' \
  -F 'batch=[{"method":"GET","relative_url":"me"}, \
  {"method":"GET","relative_url":"me"}]' https://graph.facebook.com

работает как положено.

У меня работает следующее:

curl -k -F 'access_token=...' \
  -F 'batch=[{"method":"POST","relative_url":"method/fql.multiquery?queries={\"q1\":\"SELECT uid, rsvp_status FROM event_member WHERE eid=199886676776200\",\"q2\":\"SELECT name, url, pic FROM profile WHERE id IN (SELECT uid FROM #q1)\"}"}, \
  {"method":"GET","relative_url":"me"}]' https://graph.facebook.com
0 голосов
/ 14 мая 2014

Я использовал PHP SDK для создания таких запросов. Вот пример, который извлекает сообщения данного пользователя из стены друга определенного пользователя.

$req = array('method' => 'POST', 
         'relative_url'=>"method/fql.multiquery?queries={
         \"q1\":\"SELECT+post_id,actor_id,source_id,message,comment_info.comment_count,created_time,likes+FROM+stream+WHERE+actor_id=me()+AND+source_id=$id+AND+message!=''+limit+100\",
         \"q2\":\"SELECT+id,post_id,fromid,text,time,likes,user_likes+FROM+comment+WHERE+post_id+IN+(SELECT+post_id+FROM+#q1)\",
         \"q3\":\"SELECT+name,uid+FROM+user+WHERE+uid+IN+(SELECT+fromid+FROM+#q2)\"}");


$requests[] = $req;

$batch_result = $facebook->api('/?batch='.urlencode(json_encode($requests)), 'POST');
...