使用 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 .
考虑如何处理这个问题?
最佳答案
它基于 facebook.py 库处理查询的方式。对 Facebook 的查询最终都需要进行 URL 编码。
所以,深入挖掘 facebook.py 源代码
api.fql({'example':"SELECT uid2 FROM friend WHERE uid1 = me()"})
最终结果为
查询%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()"})
最终为
查询%3D%7B%27example%27%3A+u%27SELECT+uid2+FROM+friend+WHERE+uid1+%3D+me%28%29%27%7D
请注意,在发送到 facebook.py 库中的 urlencode 之前,没有对 unicode 部分的 u
进行任何处理。
https://api.facebook.com ,对此不会返回任何响应,但如果您在 graph.facebook.com 端点上执行了相同的操作,您会注意到
(#601) Parser error: unexpected '{' at position 0."
基本上,它会因为你的查询而窒息。
在发送 URL 编码之前尝试处理您的 Unicode
关于python - 来自 python 的 FQL 多重查询因 unicode 查询而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464426/