2013-06-26 2 views
0

Я пытаюсь сделать multiquery, используя graph.fql, но я не могу заставить его работать, и я не вижу никаких примеров в документации. Я пытаюсь запуститьPython facebook-sdk multiquery

'user_sex': 'SELECT sex FROM user WHERE uid=me()' 

первый, а затем

'friends': 'SELECT uid, name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND NOT (sex IN #user_sex) ORDER BY name') 

второй, но я не имею никакого понятия о том, как сделать это.

Должен ли я сделать два отдельных запроса?

ответ

0

Я немного изменил ваши запросы. Вы можете попробовать here. Нажмите «Получить токен доступа», если его нет.

{ 
"user_sex": "SELECT sex FROM user WHERE uid=me()", 
"friends": "SELECT uid, name, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND not (sex in (select sex from #user_sex)) ORDER BY name" 
} 

Также вам не нужно делать несколько запросов. Вы можете использовать это (test it):

SELECT uid,name, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) AND not (sex in (SELECT sex FROM user WHERE uid=me())) order by name 

Чтобы сделать запрос из вашего приложения, вы должны кодировать данные правильно. Например для обоих это запросов URLs будет:

https://graph.facebook.com/fql?q=%7B%22user_sex%22:%22SELECT%20sex%20FROM%20user%20WHERE%20uid=me()%22,%22friends%22:%22SELECT%20uid,%20name,%20sex%20FROM%20user%20WHERE%20uid%20IN%20(SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%20=%20me())%20AND%20not%20(sex%20in%20(select%20sex%20from%20%23user_sex))%20%20ORDER%20BY%20name%22%7D&access_token=token 
https://graph.facebook.com/fql?q=SELECT+uid,+name,+sex+FROM+user+WHERE+uid+IN+(SELECT+uid2+FROM+friend+WHERE+uid1+=+me())+AND+not+(sex+in+(SELECT+sex+FROM+user+WHERE+uid=me()))+order+by+name&access_token=token 
+0

Первый из них работает отлично, но вы знаете, как я могу сделать это FQL запрос с питона Facebook-https://github.com/pythonforfacebook/facebook-sdk SDK – bab

1

Библиотека питона facebook-sdk может выполнять несколько запросов FQL. Сначала вам нужно указать словарь запросов в строку.

import facebook 

query = { 
    "user_sex": "SELECT sex FROM user WHERE uid=me()", 
    "friends": "SELECT uid, name, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND not (sex in (select sex from #user_sex)) ORDER BY name" 
} 

graph = facebook.GraphAPI(access_token) 
return graph.fql(str(query))