使用Tweepy和Python如何从最早关注的开始取消未回关账号
实现方案
你原有代码默认拉取的关注列表是按关注时间从新到旧排序,所以会优先处理最新关注的未回关账号,只需要将拉取到的完整关注列表做反转即可实现从最早关注账号开始处理的逻辑,同时顺手优化了部分冗余调用,降低限流触发概率。
修改后主脚本代码
import tweepy from cred import * from config import QUERY, UNFOLLOW, FOLLOW, LIKE, RETWEET auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) api = tweepy.API(auth, wait_on_rate_limit=True) def main(): try: if UNFOLLOW: # 直接获取当前认证账号信息,无需手动填写自身用户名 my_account = api.me() print("正在拉取全量关注列表...") # 拉取全量关注列表,默认顺序为最新关注在前,反转后即为最早关注在前 following_list = list(tweepy.Cursor(api.get_friends, user_id=my_account.id).items()) following_list.reverse() for account in following_list: friendship_status = api.get_friendship( source_id=my_account.id, target_id=account.id ) if friendship_status[0].followed_by: print(f'@{account.screen_name} 已回关,跳过处理') else: print(f'@{account.screen_name} 未回关,执行取关操作') api.destroy_friendship(user_id=account.id) print("本轮未回关账号处理完毕") except tweepy.errors.TweepyException as e: print(f'接口请求错误:{e}') if __name__ == "__main__": # 若不需要持续轮询执行,删除while True,直接调用main()即可 while True: main()
配套config.py无需修改,保持原有配置即可
#config.py UNFOLLOW = True
核心改动说明
- 核心逻辑:拉取完整关注列表后调用
reverse()方法倒序,直接实现按关注时间从早到晚遍历的需求,无需额外编写排序逻辑 - 分页优化:使用
tweepy.Cursor封装分页拉取逻辑,避免单页请求拉取不全关注列表的问题 - 冗余裁剪:去掉了接口请求中不必要的用户名传参,统一用用户ID做请求标识,略微降低接口开销
- 原有配置保留:你之前开启的
wait_on_rate_limit=True逻辑完全保留,触发API限流时SDK会自动等待到限制重置后再继续执行,无需额外编写休眠逻辑
内容的提问来源于stack exchange,提问作者deusopus
相关产品推荐
相关产品推荐

