1

python 2.6.5 と facebook-sdk 0.3.2 を使用すると、次のようになります。

import facebook
api = facebook.GraphAPI(token)
api.fql({'example':u"SELECT uid2 FROM friend WHERE uid1 = me()"})

空のリストを返しますが、これは

api.fql({'example':"SELECT uid2 FROM friend WHERE uid1 = me()"})

動作します。クエリのいずれかが Unicode 文字列である場合、結果は[]エラーなしになります。

Facebook 開発者サポートは、stackoverflow で何が問題なのかを尋ねることを提案しました。彼らの説明は、誰もこのバグを報告していないので、おそらく私が何か間違ったことをしているということでした. それで彼らはバグを閉じました。

これに対処する方法について考えていますか?

4

2 に答える 2

2

これは、facebook.py ライブラリがクエリを処理する方法に基づいています。Facebook へのクエリはすべて、最終的に URL エンコードする必要があります。

それで、facebook.pyソースを掘り下げます

api.fql({'example':"SELECT uid2 FROM friend WHERE uid1 = me()"})

として終わる

queries%3D%7B%27example%27%3A+%27SELECT+uid2+FROM+friend+WHERE+uid1+%3D+me%28%29%27%7D

次のように適切に一致するもの

queries={'example': 'SELECT uid2 FROM friend WHERE uid1 = me()'}

一方

api.fql({'example':u"SELECT uid2 FROM friend WHERE uid1 = me()"})

として終わる

queries%3D%7B%27example%27%3A+u%27SELECT+uid2+FROM+friend+WHERE+uid1+%3D+me%28%29%27%7D

ufacebook.py ライブラリの urlencode に送信する前に、Unicode 部分の処理が行われていないことに注意してください。

https://api.facebook.comは、これに対して応答を返しませんが、graph.facebook.com エンドポイントで同じことを行った場合、気付くでしょう。

(#601) パーサー エラー: 位置 0 に予期しない '{' があります。"

基本的に、クエリでチョークします。

URL エンコーディングを送信する前に、Unicode を処理してみてください

于 2012-09-17T19:32:43.773 に答える
0

おそらく問題は、左側のパラメータのASCII文字列を「example」と混合して照合し、右側のクエリ文字列にUnicodeを使用していることです。これを試して:

api.fql({u'example':u"SELECT uid2 FROM friend WHERE uid1 = me()"})

次のように別の方法で試してください。

api.fql({u'example':"SELECT uid2 FROM friend WHERE uid1 = me()"})

私はUnicodeの野生の羊毛の世界に敬意を表することを知っています、多分あなたはあなたのASCII文字列を正しくエンコードしていませんか?たぶん、unichr(...)コマンドを使用して、Unicode文字列を1文字ずつ組み立ててみてください。

これらをいじっても問題が解決しない場合、結論は、fql関数がユニコードを渡されたときに吐き出すということです。回避策は、常にASCII文字列を使用することです。

ソース: http ://docs.python.org/howto/unicode.html

于 2012-09-17T18:34:00.023 に答える