我最近开始玩 Twython 和 Twitter API。身份验证处理起来有点麻烦,但现在可以与我的脚本中包含的小型 Bottle 网络服务器完美配合。
我正在尝试做一些非常简单的事情:使用流过滤器 API 跟踪主题标签。 起初似乎运行良好,但现在我可以在日志中看到许多错误:
Error!
200 Unable to decode response, not valid JSON
这只发生在部分推文上。我以为它可以链接到坐标,但事实并非如此。我刚刚测试了一下,似乎是由重音符号(éèêàâ...)编码问题引起的。
我该如何解决这个问题?
我的流媒体代码非常基本:
class QMLStreamer(TwythonStreamer):
def on_success(self, data):
if 'text' in data:
if 'coordinates' in data and data['coordinates'] and 'coordinates' in data['coordinates']:
tweetlog("[%s](%s) - %s" % (data['created_at'], data['coordinates']['coordinates'], data['text'].encode('utf-8')))
else:
tweetlog("[%s] - %s" % (data['created_at'], data['text'].encode('utf-8')))
def on_error(self, status_code, data):
print colored('Error !', 'red', attrs=['bold'])
print status_code, data
最佳答案
错误发生在您的代码中。您不应该在此处使用 .encode()
。
这有点违反直觉,但是如果 on_success()
引发异常,on_error()
将被调用,这可能就是这里发生的情况( >UnicodeDecodeError
)。这就是您看到错误代码 200(“HTTP 正常”)的原因。
Twython 将数据作为 unicode 对象返回,因此您可以执行以下操作:
print(u"[%s](%s) - %s"% (数据['created_at'], 数据['坐标']['坐标'], 数据['文本']))
您可能应该在 on_success()
中添加自己的 try... except block 以进行进一步调试。
此外,我不确定您的 tweetlog()
函数的作用,但请注意,如果您使用的是 Windows,print()
在编写某些代码点时可能会出现问题因为它将尝试转换为终端的代码页。
关于python - TwythonStreamer 重音编码? - 无法解码响应,无效 JSON,代码为 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19247907/