2016-07-09 14 views
0

私はpythonの初心者です。TweepyとStreaming APIを使ってTwitterからデータを取得し、CSVファイルに変換するアプリケーションを開発しようとしています。 問題は、このコードが出力CSVファイルを作成しないことです。たとえば、コードが停止するように設定する必要があります。 1000件のつぶやきが、私はこの停止点にTweepy StreamListener to CSV

を設定することはできないんだけど、ここでコード

import sys 
import tweepy 
import csv 

#pass security information to variables 
consumer_key="" 
consumer_secret="" 
access_key = "" 
access_secret = "" 


#use variables to access twitter 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_key, access_secret) 
api = tweepy.API(auth) 

#create an object called 'customStreamListener' 

class CustomStreamListener(tweepy.StreamListener): 

    def on_status(self, status): 
     print (status.author.screen_name, status.created_at, status.text) 


    def on_error(self, status_code): 
     print >> sys.stderr, 'Encountered error with status code:', status_code 
     return True # Don't kill the stream 

    def on_timeout(self): 
     print >> sys.stderr, 'Timeout...' 
     return True # Don't kill the stream 


streamingAPI = tweepy.streaming.Stream(auth, CustomStreamListener()) 
streamingAPI.filter(track=['Dallas', 'NewYork']) 

def on_status(self, status): 
    with open('OutputStreaming.txt', 'w') as f: 
     f.write('Author,Date,Text') 
     writer = csv.writer(f) 
     writer.writerow([status.author.screen_name, status.created_at, status.text]) 

は、任意の提案ですか?

+0

あなたの第二 'on_status'関数は' CustomStreamListener'クラス内ではありません。 – Selcuk

答えて

4

csvを書き込もうとしている関数が呼び出されることはありません。 このコードをCustomStreamListener.on_statusに書き込むと仮定します。 また、(ストリームリスナーの外で)一度ファイルにタイトルを書き込む必要があります。 このコードを見てみましょう:

import sys 
import tweepy 
import csv 

#pass security information to variables 
consumer_key="" 
consumer_secret="" 
access_key = "" 
access_secret = "" 


#use variables to access twitter 
auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth.set_access_token(access_key, access_secret) 
api = tweepy.API(auth) 

#create an object called 'customStreamListener' 

class CustomStreamListener(tweepy.StreamListener): 

    def on_status(self, status): 
     print (status.author.screen_name, status.created_at, status.text) 
     # Writing status data 
     with open('OutputStreaming.txt', 'w') as f: 
      writer = csv.writer(f) 
      writer.writerow([status.author.screen_name, status.created_at, status.text]) 


    def on_error(self, status_code): 
     print >> sys.stderr, 'Encountered error with status code:', status_code 
     return True # Don't kill the stream 

    def on_timeout(self): 
     print >> sys.stderr, 'Timeout...' 
     return True # Don't kill the stream 

# Writing csv titles 
with open('OutputStreaming.txt', 'w') as f: 
      writer = csv.writer(f) 
      writer.writerow(['Author', 'Date', 'Text']) 

streamingAPI = tweepy.streaming.Stream(auth, CustomStreamListener()) 
streamingAPI.filter(track=['Dallas', 'NewYork']) 
+0

あなたは間違っていましたが、今は文字に問題があるようです。コードを実行しようとすると、一部のつぶやきデータしか表示されず、このコードが返されます。 'UnicodeEncodeError:' charmap 'コーデックは、文字' \ U0001f44d 'を位置111にエンコードできません:文字マップは'いくつかの特殊文字がありますが、どうすればこの問題を解決できますか? haw以上に、私はつぶやきのserchingを例えば止めることができます。アフター1000のつぶやき? –

+0

ツイートテキストのユニコード部分を印刷できないため、おそらく発生します。 'status.text'の代わりに' status.text.encode( 'utf-8') 'を使ってみてください(印刷行と' writerow'の行の両方)。 また、open( 'OutputStreaming.txt'、 'w' '、encoding = "utf8")をf: 'としてutf-8エンコーディングでファイルを開く: ' 他の質問(1000つのツイートに制限)については、別の質問を投稿してください。 –

+0

また、回答が参考になった場合は、問題を抱える将来のユーザーが簡単に解決策を見つけることができるように、それを受け入れてください。 –