python的FQL多重查询使用unicode查询失败

python的FQL多重查询使用unicode查询失败,python,facebook-graph-api,facebook-fql,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字符串,则结果

使用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,所以可能是我做错了什么。所以他们关闭了这家公司


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

可能问题在于,您将左侧参数上的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字符串。。。指挥部

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


来源:

这取决于facebook.py库处理查询的方式。对Facebook的查询最终都需要URL编码

所以,通过facebook.py来源挖掘

api.fql({'example':"SELECT uid2 FROM friend WHERE uid1 = me()"})
最终成为

查询%3D%7B%27示例%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%27示例%27%3A+u%27选择+uid2+FROM+friend+WHERE+uid1+%3D+me%28%29%27%7D

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

,对此不返回任何响应,但如果您在graph.facebook.com端点上执行了相同的操作,您会注意到

601分析器错误:位置0处出现意外的“{”

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


在发送Url编码之前,请尝试处理Unicode

导致失败的是等号还是字符?如果运行以下命令会发生什么:api.fql{'example':uSELECT uid2 FROM friend}这也会返回空列表吗?是的,这也会返回空列表。任何unicode查询都会返回没有错误消息的空列表。如果在查询中输入语法错误,是否会出现错误?这是做什么的?api.fql{'example':uSELECT uid2 FROM foobar}?空列表。与api.fql相同{'example':uSELECT aftermal hour from facebook developer support!}unicode字符串无法进行fql验证,因此在解释unicode字符本身时存在问题。如果将常规字符串与结尾处的单个unicode空格连接起来,我不确定如何在python中连接,例如:api.fql{'example':从友人中选择uid2,其中uid1=me+u}?您会得到正确的结果还是清空字符串?