1

我最近开始使用 Twython 和 twitter API。auth 处理起来有点麻烦,但它现在可以完美地与我脚本中包含的一个小瓶网络服务器一起工作。

我正在尝试做一些非常简单的事情:使用流过滤器 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
4

2 回答 2

2

错误发生在您的代码中。你不应该.encode()在这里使用。

这有点违反直觉,但如果引发异常on_error()就会被调用,这可能就是这里发生的事情 (a )。这就是您看到错误代码 200(“HTTP Ok”)的原因。on_success()UnicodeDecodeError

Twython 将数据作为 unicode 对象返回,因此您可以这样做:

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

您可能应该添加自己的 try...except 块以on_success()进行进一步调试。

另外,我不确定您的tweetlog()功能是做什么的,但请注意,如果您在 Windows 上print()编写一些代码点可能会遇到问题,因为它会尝试转换为终端的代码页。

于 2013-10-09T17:56:47.633 回答
0

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

import unicodedata

...

tweetlog("[%s](%s) - %s" % (data['created_at'], data['coordinates']['coordinates'], unicodedata.normalize('NFD',data['text']).encode('ascii', 'ignore')))
于 2013-10-08T13:27:41.003 回答