Фильтровать каналы Twitter только по языку

Я использую Tweepy API для извлечения каналов Twitter. Я хочу извлечь все каналы Twitter только определенного языка. Языковой фильтр работает, только если установлен фильтр track. Следующий код возвращает ошибку 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"])

Как я могу извлечь все твиты с определенного языка с помощью Tweepy?

Ответы

Ответ 1

Вы не можете (без специального доступа). Потоковое все твиты (нефильтрованные) требуют подключения к firehose, который предоставляется только в особых случаях использования Twitter, Честно говоря, пожар действительно не нужен - правильное использование track может дать вам больше твитов, чем вы знаете, что делать с.

Попробуйте использовать что-то вроде этого:

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

Фильтрация такими словами даст вам много, много твитов. Если вам нужны реальные данные для наиболее часто используемых слов, ознакомьтесь с этой статьей из Time: 500 наиболее часто используемых слов в Twitter. Вы можете использовать до 400 ключевых слов, но это, вероятно, приблизится к 1% -му пределу твитов в заданный интервал времени. Если ваш параметр track соответствует 60% всех твитов в заданное время, вы все равно получите только 1% (что является большим количеством твитов).

Ответ 2

Кроме получения отфильтрованных твитов напрямую, вы можете отфильтровать их после получения всех твитов разных языков:

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

Надеюсь, поможет.

Ответ 3

Попробуйте параметр lang='en' в Cursor() например

tweepy.Cursor(.. lang='en')

Ответ 4

Вы можете увидеть аргументы для метода track в github-коде https://github.com/tweepy/tweepy/blob/master/tweepy/streaming.py

Поместите языки в массив кодов ISO_639-1_.

Они есть:

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

Поэтому для отслеживания по языкам просто поставьте:

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

Ответ 5

Это сработало для меня.

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)

Ответ 6

Поиск Tweepy позволяет получать твиты для определенного языка. Вы можете использовать код ISO 639-1, чтобы указать значение параметра языка. Следующий код будет получать твиты с полным текстом на указанном языке (пример ниже на английском)

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)
    tweets = api.search(q = keywordtosearch, lang = 'en', count = 100, truncated = False, tweet_mode = 'extended')
    for tweet in tweets:
        print(tweet.full_text)
        #add your code