web-dev-qa-db-fra.com

Filtrer les flux Twitter uniquement par langue

J'utilise l'API Tweepy pour extraire les flux Twitter. Je souhaite extraire tous les flux Twitter d'une langue spécifique uniquement. Le filtre de langue ne fonctionne que si le filtre track est fourni. Le code suivant renvoie une erreur 406:

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
stream.filter(languages=["en"])

Comment puis-je extraire tous les tweets de certaines langues en utilisant Tweepy? 

19
Sudo

Vous ne pouvez pas (sans accès spécial). Le streaming tous les tweets (non filtrés) nécessite une connexion à the firehose , qui n'est accordée que dans des cas d'utilisation spécifiques par Twitter. Honnêtement, le firehose n'est pas vraiment nécessaire - une utilisation appropriée de track peut vous permettre d'obtenir plus de tweets que vous ne savez quoi faire avec.

Essayez d'utiliser quelque chose comme ça:

stream.filter(languages=["en"], track=["a", "the", "i", "you", "u"]) # etc

Filtrer par des mots comme ceux-là vous donnera beaucoup, beaucoup de tweets. Si vous voulez des données réelles pour les mots les plus utilisés, consultez cet article de Time: Les 500 mots les plus fréquemment utilisés sur Twitter . Vous pouvez utiliser jusqu'à 400 keywords, mais cela approchera probablement de la limite de 1% de tweets à un intervalle de temps donné. Si votre paramètre track correspond à 60% de tous les tweets à un moment donné, vous n'obtiendrez toujours que 1% (ce qui représente BEAUCOUP de tweets).

21
Luigi

Outre les tweets filtrés directement, vous pouvez les filtrer après avoir obtenu tous les tweets de langues différentes en:

tweets = api.search("python")
for Tweet in tweets:
   if Tweet.lang == "en":
      print(Tweet.text)
      #Do the stuff here

J'espère que ça aide.

4
Jay Mehta

Cela a fonctionné pour moi.

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
a=input("Enter Tag: ")
tweets = api.search(a, count=200)
a=[]
for Tweet in tweets:
    if Tweet.lang == "en":
        a.append(Tweet.text)
0
Smit Jethwa

Vous pouvez voir les arguments de la méthode track dans le code github https://github.com/tweepy/tweepy/blob/master/tweepy/streaming.py

Placez les langues dans un tableau de codes ISO_639-1.

Elles sont:

filter(self, follow=None, track=None, is_async=False, locations=None,
               stall_warnings=False, languages=None, encoding='utf8', filter_level=None):

Donc, pour suivre les langues, il suffit de mettre:

class Listener(StreamListener):

    def on_data(self, data):
        j = json.loads(data)
        t = {
          'screenName' : j['user']['screen_name'],
          'text:': j['text']
          }
        print(t)
        return(True)

    def on_status(self, status):
        print(status.text)


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

stream = Stream(auth=auth, listener=Listener(),wait_on_rate_limit=True,wait_on_rate_limit_notify=True)

stream.filter(track=['Trump'],languages=["en","fr","es"])
0
Walker Rowe