如何使用 Tweepy 多次调用 Twitter API 以获得每个用户超过 200 条推文?



我这里有一些Python代码,可以从每个美国民主党政治候选人的Twitter帐户中检索最多200条推文。虽然,我将其设置为没有回复和没有转发,所以它实际上返回的要少得多。我知道你每次通话最多可以返回 200 条推文,尽管你可以在 15 分钟内进行多次调用,特别是 180 条,这将返回更多的推文。我的问题是如何进行多次调用,同时仍然以我当前设置的熊猫df格式返回数据。谢谢!

import datetime as dt
import os
import pandas as pd
import tweepy as tw
#define developer's permissions
consumer_key = 'xxxxxxxx'
consumer_secret = 'xxxxxxxx'
access_token = 'xxxxxx'
access_token_secret = 'xxxxxxx'
#access twitter's API
auth = tw.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tw.API(auth, wait_on_rate_limit=True)
#function collects tweets from 
def get_tweets(handle):
try:
tweets = api.user_timeline(screen_name=handle, 
count=200,
exclude_replies=True, 
include_rts=False,
tweet_mode="extended")
print(handle, "Number of tweets extracted: {}n".format(len(tweets)))
df = pd.DataFrame(data=[tweet.user.screen_name for tweet in tweets], columns=['handle'])
df['tweets'] = np.array([tweet.full_text for tweet in tweets])
df['date'] = np.array([tweet.created_at for tweet in tweets])
df['len'] = np.array([len(tweet.full_text) for tweet in tweets])
df['like_count'] = np.array([tweet.favorite_count for tweet in tweets])
df['rt_count'] = np.array([tweet.retweet_count for tweet in tweets])
except:
pass
return df
#list of all the candidate twitter handles
handles = ['@JoeBiden', '@ewarren', '@BernieSanders', '@MikeBloomberg', '@PeteButtigieg', '@AndrewYang', '@AmyKlobuchar']
df = pd.DataFrame()
​
#loop through the diffent candidate twitter handles and collect each candidates tweets
for handle in handles:
df_new = get_tweets(handle)
df = pd.concat((df, df_new))
@JoeBiden Number of tweets extracted: 200.
@ewarren Number of tweets extracted: 200.
@BernieSanders Number of tweets extracted: 200.
@MikeBloomberg Number of tweets extracted: 200.
@PeteButtigieg Number of tweets extracted: 200.
@AndrewYang Number of tweets extracted: 200.
@AmyKlobuchar Number of tweets extracted: 200.

首先,您现在需要重新生成凭据。

您可以使用Cursor循环访问分页结果,也可以传递API.user_timelinesince_id和/或max_id参数。

另请参阅 GET 状态/user_timeline 终结点的文档。

Twitter API 文档解释了为什么你会得到较低的结果:

exclude_replies -"此参数将阻止回复出现在返回的时间线中。将exclude_replies与 count 参数一起使用意味着你将收到最新计数的推文——这是因为 count 参数在过滤掉转推和回复之前会检索到那么多推文

最新更新