def get_all_tweets(screen_name):
df1=pd.DataFrame()
#initialize a list to hold all the tweepy Tweets
alltweets = []
#make initial request for most recent tweets (200 is the maximum allowed count)
new_tweets = api.user_timeline(screen_name = screen_name,count=200)
#save most recent tweets
alltweets.extend(new_tweets)
#save the id of the oldest tweet less one
oldest = alltweets[-1].id - 1
#keep grabbing tweets until there are no tweets left to grab
while len(new_tweets) > 0:
print(f"getting tweets before {oldest}")
#all subsiquent requests use the max_id param to prevent duplicates
new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest)
#save most recent tweets
alltweets.extend(new_tweets)
#update the id of the oldest tweet less one
oldest = alltweets[-1].id - 1
print(f"...{len(alltweets)} tweets downloaded so far")
#transform the tweepy tweets into a 2D array that will populate the csv
for tweet in alltweets:
i=json.dumps(tweet._json)
x= pd.json_normalize(json.loads(i))
df1= pd.concat([df1,x], axis=0)
print(df1.shape)
if __name__ == '__main__':
#pass in the username of the account you want to download
get_all_tweets("airtelindia")
Thats my code, it only fetches 3200 tweets. How to overcome this limitation, handle it and get all tweets of the user???
It’s an API limit:
This method can only return up to 3,200 of a user’s most recent Tweets.
You have to use something like fullarchive search to get more: Premium Search Tweets: Full-Archive API | Docs | Twitter Developer Platform