python中的FQL多查询失败,带有unicode查询

时间:2012-09-17 17:36:42

标签: 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

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

2 个答案:

答案 0 :(得分: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

请注意,在发送到facebook.py库中的urlencode之前,没有为unicode部分处理u

https://api.facebook.com,对此没有回复,但如果你在graph.facebook.com端点做同样的事情,你会注意到

  

(#601)解析器错误:意外' {'在位置0。"

基本上,它会对您的查询产生影响。

在发送Url Encoding

之前尝试处理您的Unicode

答案 1 :(得分: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字符串。

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

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