2016-07-09 7 views
0

Ich bin ein Neuling auf Python und ich versuche, eine App zu entwickeln, die Daten von Twitter mit Tweepy und den Streaming-APIs abruft und die Daten in eine CSV-Datei konvertiert. Das Problem ist, dass dieser Code keine Ausgabe CSV-Datei erstellt, vielleicht weil ich den Code einstellen sollte, um zu stoppen, wenn es für zB erreicht. 1000 Tweets, aber ich bin mit diesen Haltepunkt nicht in der LageTweepy StreamListener zu CSV

einstellen

hier ist der Code

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]) 

Jeder Vorschlag?

+0

Ihre zweite 'on_status' Funktion nicht in der' CustomStreamListener' Klasse. – Selcuk

Antwort

4

Die Funktion, die Sie versuchen, die csv mit zu schreiben, wird nie aufgerufen. Ich nehme an, dass Sie diesen Code in CustomStreamListener.on_status schreiben wollten. Außerdem müssen Sie die Titel einmal in die Datei schreiben (außerhalb des Stream-Listeners). Werfen Sie einen Blick auf diesen Code:

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

Sie haben Recht Ich lag falsch, aber jetzt scheint es ein Problem mit den Charakteren. Wenn ich versuche, den Code zu drucken, nur einige Tweets Daten und dann diesen Code zurück 'UnicodeEncodeError:' Charmap 'Codec kann das Zeichen' \ U0001f44d 'in Position 111 nicht codieren: Zeichenkarten zu ' Dies passiert, wenn einige Tweet wo treffen Es gibt einige Sonderzeichen, wie kann ich dieses Problem beheben. Mehr über Haw kann ich das Serching von Tweets für zB stoppen. 1000 Tweets? –

+0

Es tritt wahrscheinlich auf, da es den Unicode-Teil des Tweet-Texts nicht drucken kann. Probieren Sie 'status.text.encode ('utf-8')' statt nur 'status.text' aus (Sowohl in der Druckzeile als auch in der Zeile mit' writerow'). Öffnen Sie auch die Datei mit UTF-8-Codierung: mit open ('OutputStreaming.txt', 'w' ', encoding = "utf8") als f: '. Für die andere Frage (Limit auf 1000 Tweets), bitte posten Sie eine andere Frage. –

+0

Wenn die Antwort hilfreich war, akzeptieren Sie sie bitte, damit zukünftige Benutzer, die auf Ihr Problem stoßen, diese Lösung problemlos finden können. –