使用Python和Tweepy实现特定用户发推自动回复的问题
解决Twitter机器人回复用户所有推文的问题
你的代码只拉取到一条推文,根本原因是user_timeline里的count=1参数——你明确指定了只获取1条,和tweet.id没关系。要回复用户所有推文,得调整参数并处理分页,因为Twitter API单次最多返回200条推文,超过的话要循环拉取更早的内容。
修改方案
- 将
count设置为API允许的最大值200 - 用
max_id参数循环拉取所有历史推文 - 记录已回复的推文ID,避免重复操作(防止触发平台限流)
修改后的完整代码
import tweepy # 你的认证信息 api_key = "###############################################" api_secret = "###############################################" bearer_token = r"###############################################" access_token = "###############################################" access_token_secret = "###############################################" # 初始化API客户端 auth = tweepy.OAuth1UserHandler(api_key, api_secret, access_token, access_token_secret) api = tweepy.API(auth) to_reply = "TwitterUsernameHere" replied_tweet_ids = set() # 存储已回复的推文ID,避免重复操作 # 循环拉取用户所有推文 max_id = None while True: # 单次拉取最多200条推文,max_id指定拉取更早的内容 tweets = api.user_timeline(screen_name=to_reply, count=200, max_id=max_id, tweet_mode="extended") if not tweets: # 没有更多推文时退出循环 break for tweet in tweets: # 跳过已回复过的推文 if tweet.id in replied_tweet_ids: continue # 执行回复操作 try: api.update_status(f"@{to_reply} Why?", in_reply_to_status_id=tweet.id) replied_tweet_ids.add(tweet.id) print(f"已回复推文ID: {tweet.id}") except tweepy.TweepyException as e: print(f"回复失败: {e}") # 更新max_id,确保下一次拉取比当前最后一条更早的推文 max_id = tweets[-1].id - 1
关键细节说明
tweet_mode="extended":确保能获取长推文的完整内容,避免内容截断max_id机制:每次拉取时指定上一批推文的最小ID减1,实现分页拉取所有历史内容replied_tweet_ids集合:防止重复回复同一推文,避免触发Twitter的限流规则
内容的提问来源于stack exchange,提问作者Suzie Schmitt
相关产品推荐
相关产品推荐

