2017-08-29 18 views
0

現在、Twitterの投稿をストリーミングしてjsonファイルに保存するコードに取り組んでいます。同時に、textblobはツイートの感情を決定します。 これまでのところすべてが動作していますが、すべての出力をファイルに保存していません。現在、つぶやきは保存されていますが、textblobで計算された感情スコアは保存されません。このPythonで私の最初の日の符号化であると私は助けのすべてのビットに感謝:)Python twitter streamファイルに保存

import textblob as textblob 
from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import json 
from textblob import TextBlob 

# consumer key, consumer secret, access token, access secret. 
consumer_key = x 
consumer_secret = x 
access_token = x 
access_token_secret = x 


class StdOutlistener(StreamListener): 
    def on_data(self, data): 
     all_data = json.loads(data) 
     tweet = TextBlob(all_data["text"]) 
     print(tweet) 
     print(tweet.sentiment) 

     # Open json text file to save the tweets 
     With open('tweets.json', 'a') as tf: 
      tf.write(data) 

     return True 

    def on_error(self, status): 
     print(status) 


auth = OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 

twitterStream = Stream(auth, StdOutlistener()) 
twitterStream.filter(languages=["en"], track=["Test"]) 
+0

まさにあなたの質問は何ですか? –

+0

私はちょっとわかりませんでした。1:つぶやきと感情を組み合わせたいです。 2:jsonファイルにつぶやきや感情を書く方法を知りたい。ジェイクはいくつか前提を作って、彼らは正しかった:) – Robbert

答えて

1

まずあなたがon_dataではなくon_statusを使用してしてもよろしい、thisは両者の違いを詳しく説明します。私はtweepyにあまり馴染んでいないので、このカウントで間違っているかもしれません。

第2に、感情に関するデータを正しく更新していないようです。 tweet = TextBlob(all_data['text'])で計算しますが、tweet変数またはall_data変数ではそれ以上のことはしないでください。あなたが望むのはall_data['sentiment'] = tweet.sentimentのようなものでしょう。

最後に、データを最後に正しくファイルに書き込んでいません。私は、ファイルを1つのJSONドキュメントではなくJSONエントリのコレクションにしたいという前提に努めています。あなたがやっていることは、あなたが持っているかもしれない更新された辞書ではなく、新しい行がなく、ファイルの最後に提供された文字列dataを書くことです。代わりに、all_data辞書をJSONオブジェクトとしてファイルに書きたいと思うでしょう。

私の上記の点の例の修正は、次のようになります。

import textblob as textblob 
from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import json 
from textblob import TextBlob 

# consumer key, consumer secret, access token, access secret. 
consumer_key = x 
consumer_secret = x 
access_token = x 
access_token_secret = x 


class StdOutlistener(StreamListener): 
    def on_data(self, data): 
     all_data = json.loads(data) 
     tweet = TextBlob(all_data["text"]) 

     #Add the 'sentiment data to all_data 
     all_data['sentiment'] = tweet.sentiment 

     print(tweet) 
     print(tweet.sentiment) 

     # Open json text file to save the tweets 
     With open('tweets.json', 'a') as tf: 
      # Write a new line 
      tf.write('\n') 

      # Write the json data directly to the file 
      json.dump(all_data, tf) 
      # Alternatively: tf.write(json.dumps(all_data)) 

     return True 

    def on_error(self, status): 
     print(status) 


auth = OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_token, access_token_secret) 

twitterStream = Stream(auth, StdOutlistener()) 
twitterStream.filter(languages=["en"], track=["Test"]) 
+0

こんにちはありがとう!これはまさに私が探していたものであり、スーパーの説明です。 jsonデータについて私は新しい行を書くことが必要であることを知らなかった。しかし、あなたの前提は正しかった。私は単一のjsonドキュメントを望んでいません – Robbert

+0

追加するときに、単にpythonが自動的に新しい行を書き込むのではありません。新しい行が書かれていれば、 '{} {} ...'のように上書きされます。別の解決策は、データの最後に改行文字を必ず書くことです。これは基本的に同じ結果になります。 –

関連する問題