Tweepy возвращает противоречивые и не полные результаты для realDonaldTrump - PullRequest
0 голосов
/ 19 февраля 2020
import tweepy
import csv
import json
import nltk
import re



def scrub_text(string):
    nltk.download('words')
    words = set(nltk.corpus.words.words())

    string=re.sub(r'[^a-zA-Z]+', ' ', string).lower()
    string=" ".join(w for w in nltk.wordpunct_tokenize(string)
                if w.lower() in words or not w.isalpha())
    return string


def get_all_tweets():
    with open('twitter_credentials.json') as cred_data:
        info=json.load(cred_data)
        consumer_key=info['API_KEY']
        consumer_secret=info['API_SECRET']
        access_key=info['ACCESS_TOKEN']
        access_secret=info['ACCESS_SECRET']

    screen_name = input("Enter twitter Handle: ")

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    api=tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True,
                   timeout=500000, retry_count=10, retry_delay=100)

    all_the_tweets=[]

    new_tweets=api.user_timeline(screen_name=screen_name, count=200)

    all_the_tweets.extend(new_tweets)

    oldest_tweet=all_the_tweets[-1].id - 1

    while len(new_tweets) > 0:
        new_tweets=api.user_timeline(screen_name=screen_name, count=200,
                                     max_id=oldest_tweet)
        all_the_tweets.extend(new_tweets)
        oldest_tweet=all_the_tweets[-1].id -1

        print('...%s tweets downloaded' %len(all_the_tweets))

    outtweets=[[tweet.text.encode('utf-8')] for tweet in all_the_tweets]
    outtweets=scrub_text(str(outtweets))

    with open('tweets.txt', 'w') as f:
        f.write(outtweets)
        f.close()

Приведенный выше код python должен загружать все твиты от конкретного пользователя. Кажется, это работает для большинства дескрипторов, но когда я использую его для @realDonaldTrump, я иногда получаю 800, иногда я получаю 1. Я никогда не подхожу даже близко ко всем твитам. Я предполагаю, что есть проблема из-за того, насколько активна учетная запись, но я думаю, что должен быть способ обойти это.

1 Ответ

0 голосов
/ 20 февраля 2020

API таймлайнов Twitter поддерживает максимум 3200 твитов ( источник ), и это также может зависеть от возраста твита / от того, сколько времени назад вы осуществляете пейджинг. К сожалению, вы не сможете использовать API для получения всех этих твитов. Вам нужно будет использовать коммерческий API для поиска в полном архиве, чтобы получить все твиты из учетной записи.

Что касается непоследовательного количества результатов, это звучит как сбой, поскольку не должно сильно меняться.

...