2016-08-26 17 views
0

これは非常に愚かなミスかもしれませんが、何が間違っているのかわかりません。tweepy IndexError:リストインデックスが範囲外にある

class listener(tweepy.streaming.StreamListener): 
    def on_data(self, data): 
     tweet = data.split(',"text":"')[1].split('","source')[0] 
     screen_name = data.split(',"screen_name":"')[1].split('","location":')[0] 
     print tweet 
     print data 
     return True 
    def on_error(self, status): 
     print status 

def main(): 
    twitterStream = tweepy.Stream(auth, listener()) 
    twitterStream.userstream() 

if __name__ == "__main__": 
    main() 

とエラーがある:

Traceback (most recent call last): 
    File "C:\Rex\702_EH\new 1.py", line 35, in <module> 
    main() 
    File "C:\Rex\702_EH\new 1.py", line 32, in main 
    twitterStream.userstream() 
    File "build\bdist.win32\egg\tweepy\streaming.py", line 394, in userstream 
    File "build\bdist.win32\egg\tweepy\streaming.py", line 361, in _start 
    File "build\bdist.win32\egg\tweepy\streaming.py", line 294, in _run 
IndexError: list index out of range 

誰もこれで私を助けてくださいことができますか?

答えて

0

あなたが受け取るつぶやきはJSON形式です。プレーンテキストとして解析するのではなく、それを活用する必要があります。属性の抽出がはるかに簡単になり、コードもより読みやすくなります。追記として

class listener(tweepy.streaming.StreamListener): 
    def on_data(self, data): 

     decoded = json.loads(data) 

     tweet = decoded['text'] 
     screen_name = decoded['user']['screen_name'] 
     print tweet 
     print data 
     return True 
    def on_error(self, status): 
     print status 

def main(): 
    twitterStream = tweepy.Stream(auth, listener()) 
    twitterStream.userstream() 

if __name__ == "__main__": 
    main() 

は、私はあなたが非常に悪夢することができPython2のUnicodeを扱う、のpython3に切り替え示唆しています。

+0

Thxで応答しますが、このコードはKeyError: 'text'を示します。それ以上のヒント? – Rex

+0

あなたの提案にもthxが表示されますが、これは切り替えが遅すぎる可能性があります。 – Rex

+0

「decoded.text」または「data.text」を試してみてください。 – Efferalgan

0

Tweepyレスポンスの出力はJSONです。 JSONはアプリケーション間の内部通信の標準であるため、Pythonでjson libを使用してこの標準に従う必要があります。したがって、次のようにTweepyレスポンスをロードする必要があります。

tweet = json.loads(data) 
username = tweet[user][screeen_name] 
language = tweet[user][lang] 
...... 
..... 
+0

答えはThxですが、別のエラーが表示されます:NameError:グローバル名 'user'が定義されていません – Rex

+0

これはちょうど@Rexの例で、tweet変数を見て、 –

関連する問題