Сбор твитов с использованием max_id не работает должным образом - PullRequest
0 голосов
/ 13 июля 2020

В настоящее время я ищу по твиту, используя Twitter Api. Однако получение идентификатора твита у меня не работает.

Вот мой код:

searchQuery = '#BLM'  # this is what we're searching for
searchQuery = searchQuery + "-filter:retweets"
Geocode="39.8, -95.583068847656, 2500km"    

maxTweets = 1000000 # Some arbitrary large number
tweetsPerQry = 100  # this is the max the API permits
fName = 'tweetsBLM.json' # We'll store the tweets in a json file.

sinceId = None
#max_id = -1 # initial search
max_id=1278836959926980609  # the last id of previous search    
tweetCount = 0
print("Downloading max {0} tweets".format(maxTweets))
with open(fName, 'w') as f:
    while tweetCount < maxTweets:
        try:
            if (max_id <= 0):
                if (not sinceId):
                    new_tweets = api.search(q=searchQuery,lang="en", geocode=Geocode, 
                                            count=tweetsPerQry)
                else:
                    new_tweets = api.search(q=searchQuery,lang="en",geocode=Geocode,
                                            count=tweetsPerQry,
                                            since_id=sinceId )
            else:
                if (not sinceId):
                    new_tweets = api.search(q=searchQuery, lang="en", geocode=Geocode,
                                            count=tweetsPerQry,
                                            max_id=str(max_id - 1) )
                else:
                    new_tweets = api.search(q=searchQuery, lang="en", geocode=Geocode,
                                            count=tweetsPerQry,
                                            max_id=str(max_id - 1),
                                            since_id=sinceId)
            if not new_tweets:
                print("No more tweets found")
                break
            for tweet in new_tweets:
                f.write(jsonpickle.encode(tweet._json, unpicklable=False) +
                        '\n')
            tweetCount += len(new_tweets)
            print("Downloaded {0} tweets".format(tweetCount))
            max_id = new_tweets[-1].id
        except tweepy.TweepError as e:
            # Just exit if any error
            print("some error : " + str(e))
            print('exception raised, waiting 15 minutes')
            print('(until:', dt.datetime.now() + dt.timedelta(minutes=15), ')')
            time.sleep(15*60)                
            break

print ("Downloaded {0} tweets, Saved to {1}".format(tweetCount, fName))

Этот код работает отлично. Я изначально запустил его и получил около 40 000 твитов. Затем я взял id из last tweet предыдущего / начального поиска в go назад во времени. Однако я был разочарован тем, что больше не было твитов. Я не могу поверить в это ни на секунду. Я, должно быть, ошибаюсь где-то, потому что #BLM был очень активен в последние 2/3 месяца.

Любая помощь приветствуется. Спасибо

1 Ответ

0 голосов
/ 13 июля 2020

Возможно, я нашел ответ. Используя Twitter API, невозможно получить старые твиты (возраст которых составляет 7 дней и более). Использование max_id, чтобы обойти это, тоже невозможно.

Единственный способ - транслировать и ждать более 7 дней.

Наконец, есть также эта ссылка, которая ищет старые tweets

https://pypi.org/project/GetOldTweets3/ это продолжение оригинальной работы Джефферсона Энрике

...