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 上询问有什么问题。他们的解释是,由于没有其他人报告过这个错误,这可能是我做错了。所以他们关闭了这个bug

关于如何处理这个问题的想法?

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

u请注意,在发送到 facebook.py 库中的 urlencode 之前,未对 unicode 部分进行任何处理。

https://api.facebook.com,对此没有响应,但如果您在 graph.facebook.com 端点上执行相同操作,您会注意到

(#601) 解析器错误:位置 0 处出现意外的“{”。”

基本上,它会阻塞您的查询。

在发送 URL 编码之前尝试处理您的 Unicode

于 2012-09-17T19:32:43.773 回答
0

也许问题是您将左侧参数上的 ASCII 字符串与“示例”混合并匹配,并在右侧使用 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 字符串。

如果摆弄这些并不能解决问题,那么结论是 fql 函数在传递 unicode 时会呕吐。解决方法是始终使用 ASCII 字符串。

来源: http ://docs.python.org/howto/unicode.html

于 2012-09-17T18:34:00.023 回答