EDIT: Ich habe das Problem herausgefunden. # In #user_sex wird nicht durch Python-Anfragen in% 23 konvertiert. Gibt es eine Möglichkeit, Python-Anfragen zu erzwingen, # zu% 23 zu konvertieren, oder muss ich diesen Teil nur manuell programmieren?Python fordert Urlencode nicht funktioniert?
Ich versuche, eine facebook fql multiquery zu machen. Als ich die fql_url unter
fql_url = (
'https://graph.facebook.com/fql?q='
'{"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 (SELECT sex FROM #user_sex)) '
' ORDER BY name"}'
'&access_token='+access_token
)
verwenden und führen requests.get (fql_url) kehrte die json ist
{u'error': {
u'code': 601,
u'message': u"(#601) Parser error: unexpected '{' at position 0.",
u'type': u'OAuthException'}
}
Jedoch, wenn ich Code von Hand die fql_url als dieser
fql_url = (
'https://graph.facebook.com/fql?q=%7B%22'
'user_sex%22:%22SELECT%20sex%20FROM%20user%20WHERE%20uid=me()%22,%22'
'friends%22:%22SELECT%20uid,%20name%20FROM%20user%20WHERE%20uid%20IN%20'
'(SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%20=%20me())%20'
'AND%20not%20(sex%20in%20(select%20sex%20from%20%23user_sex))%20%20'
'ORDER%20BY%20name%22%7D&'
'access_token='+access_token
)
alles funktioniert (der JSON hat die gewünschten Daten).
Ich habe sowohl die erste fql_url und die Hand codiert fql_url verglichen und beide sollten dazu führen, dass die gleiche URL verwendet wird, um die JSON zu bekommen. Funktioniert der Urlencode nicht oder mache ich hier etwas falsch?
Das macht Sinn. Also sollte ich grundsätzlich die erste fql_url verwenden und # durch% 23 ersetzen oder gibt es eine konventionellere Methode? – bab
Ich habe den pragmatischen Weg zu mir hinzugefügt –