TwythonStreamer accents encoding?- 无法解码响应,无效 JSON,代码为 200



我最近开始使用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 Ok"(的原因。

Twython 将数据作为 unicode 对象返回,因此您可以执行以下操作:

print(u"[%s](%s) - %s" % (data['created_at'], data['coordinates']['coordinates'], data['text']))

您可能应该添加自己的尝试...除了阻止on_success()进一步调试。

另外,我不确定您的tweetlog()函数的作用,但请注意,如果您使用的是Windows,print()编写某些代码点时可能会遇到问题,因为它将尝试转换为终端的代码页。

没有一个完美的答案,但您可以尝试使用 unicodedata 打印文本的规范化版本:

import unicodedata

tweetlog("[%s](%s) - %s" % (data['created_at'], data['coordinates']['coordinates'], unicodedata.normalize('NFD',data['text']).encode('ascii', 'ignore')))

相关内容

  • 没有找到相关文章

最新更新