使用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。
关于如何处理这个的想法?
答案 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字符串。