2012-02-25 5 views
0

일괄 요청에서 FQL 다중 쿼리를 사용할 수 있습니까? Google에서 예제를 찾지 못했습니다.배치 요청의 FQL 다중 쿼리

나는이 쿼리를 실행

[{\"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"}} 

답변

3

Batching feature 반환 당신이 예를 들어 크기 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

예를 들어 주셔서 감사합니다. –

+0

@Richard Barnett 한 번의 호출로 그래프 API 결과를 쿼리하는 fql에서 일괄 요청을 사용하는 방법이 있습니까? – user1105951

+0

@ 리차드 PHP SDK를 사용하여 마지막 예제를 어떻게 사용합니까? 고맙습니다. – Ali

0

나는 요청의이 종류를 구축하기 위해 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');