2017-08-29 2 views
0

Je travaille actuellement sur un code pour diffuser des messages twitter et les enregistrer dans un fichier json. Simultanément, textblob détermine le sentiment d'un tweet. Tout fonctionne jusqu'à présent mais ne sauvegarde pas toutes les sorties dans un fichier. Il enregistre actuellement les tweets mais il ne sauvegarde pas le score de sentiment calculé par textblob. Ceci est mon premier codage de jour en Python et j'apprécie toute l'aide :)twitter twitter enregistrer dans le fichier

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

Quelle est exactement votre question? –

+0

O je vois je n'étais pas un peu clair, je voudrais combiner les tweets avec le sentiment. 2: J'aimerais savoir comment je peux écrire les tweets et les sentiments dans un fichier json. Jake a fait quelques suppositions et ils étaient corrects :) – Robbert

Répondre

1

D'abord êtes-vous sûr que vous voulez être en utilisant on_data plutôt que on_status, this détails la différence entre les deux. Je ne suis pas trop familier avec tweepy donc peut-être tort sur ce compte. Deuxièmement, vous ne semblez pas mettre à jour correctement les données concernant le sentiment. Vous le calculez avec tweet = TextBlob(all_data['text']), mais ne faites rien ensuite avec la variable tweet ou la variable all_data. Ce que vous voulez, c'est quelque chose comme all_data['sentiment'] = tweet.sentiment.

Enfin, vous n'écrivez pas correctement les données dans votre fichier à la fin. Je part du principe que vous voulez que le fichier soit une collection d'entrées JSON plutôt qu'un seul document JSON. Ce que vous faites est d'écrire la chaîne fournie data à la fin du fichier, sans nouvelle ligne, plutôt que tout dictionnaire mis à jour que vous pourriez avoir. A la place, vous souhaitez écrire le dictionnaire all_data dans un fichier en tant qu'objet JSON.

Un exemple fix de mes points ci-dessus serait:

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

Salut Merci! C'est exactement ce que je cherchais et super explication. En ce qui concerne les données json; je ne savais pas écrire une nouvelle ligne est nécessaire. Mais vos hypothèses étaient justes; Je ne veux pas un seul document json – Robbert

+0

C'est simplement que python n'écrit pas automatiquement une nouvelle ligne quand vous ajoutez. Si la nouvelle ligne était écrite, alors vous auriez simplement une ligne par-dessus comme {} {} ... '. Une autre solution serait de toujours s'assurer que vous écrivez un nouveau caractère de ligne à la fin de vos données, ce qui obtiendrait fondamentalement le même résultat. –