python - TwythonStreamer 重音编码? - 无法解码响应,无效 JSON,代码为 200

标签 python json twitter stream twython

我最近开始玩 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/

相关文章:

python - 多次显示绘图窗口

asp.net - 如何使用 IIS 7.5 压缩来自 ASP.NET MVC 的 Json 结果

javascript - 如何读取 JSON 文件并将键/值对加载到字典中

twitter - Twitter 可以在 iOS 的 iTunes Connect 中用作 "Support URL"

api - ,"error":"Not authorized"尝试从带有标签的用户获取推文时

python - Shopify Python API : How to serialize products list to JSON?

python - Django 加密 key 完整性

python - 如何运行x线程数量并等待线程完成

ios - 如何将字典值放入数组?

javascript - 中心推特嵌入 iframe