python - 来自 python 的 FQL 多重查询因 unicode 查询而失败

标签 python facebook-graph-api facebook-fql

使用 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/

相关文章:

python - 为什么 RestrictedPython 在与 Python 3.6 一起使用时表现不同?

python - Imap 搜索条件 - imaplib (python)

python - 如何安全地参数化动态 python mysql 查询?

python - 从 pandas Timestamp 获取 MM-DD-YYYY

ruby-on-rails - 无法使用 xmpp4r_facebook 发送 Facebook 消息

facebook - 通过 facebook graph api 创建事件

android - 获取当前用户喜欢帖子的状态

java - 当限制设置为 20 时,Facebook Graph API 会响应任何数据

c# - Facebook C# 使用多查询的结果

Javascript - 如何等待 facebook