1

最近、Twython と twitter API を使い始めました。認証は処理が少し面倒でしたが、スクリプトに含まれる小さなボトル Web サーバーで完全に機能するようになりました。

私は非常に単純なことをしようとしています: ストリーミング フィルター 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()場合に呼び出されon_success()ます。これはおそらくここで起こることです (a UnicodeDecodeError)。そのため、エラー コード 200 ("HTTP Ok") が表示されます。

Twython はデータを Unicode オブジェクトとして返すため、次のようにするだけです。

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

on_success()さらにデバッグするために、独自の try...except ブロックを追加する必要があります。

また、あなたのtweetlog()関数が何をしているのかわかりませんが、Windows を使用している場合はprint()、端末のコードページに変換しようとするため、いくつかのコードポイントの書き込みに問題がある可能性があることに注意してください。

于 2013-10-09T17:56:47.633 に答える