使用Tweepy过滤推文无效,返回无关内容求助
Tweepy流过滤规则不生效的解决方案
问题根源
你的代码核心问题在于Twitter API的流规则是持久化存储的,每次运行代码添加新规则时,旧规则不会自动清除,导致新旧规则叠加,最终返回不符合预期的推文。另外,默认的关键词匹配是包含匹配,可能会引入相关度较低的内容。
修复步骤
启动前清除所有旧规则
在添加新规则前,先获取并删除已存在的所有规则,避免规则冲突:# 获取现有规则 existing_rules = printer.get_rules() if existing_rules.data: rule_ids = [rule.id for rule in existing_rules.data] printer.delete_rules(rule_ids)使用精确匹配规则(可选)
如果需要严格匹配完整关键词而非包含匹配,给关键词加上双引号,避免匹配到衍生词或无关内容:printer.add_rules(tweepy.StreamRule('"python"')) printer.add_rules(tweepy.StreamRule('"programming"')) printer.add_rules(tweepy.StreamRule('"software"'))验证规则添加结果
添加规则后,主动检查是否成功:added_rules = printer.get_rules() print("已添加的规则:", [rule.value for rule in added_rules.data])
修改后的完整代码
import tweepy from tweepy.streaming import StreamingClient from dotenv import load_dotenv import os load_dotenv() api_key = os.getenv('API_KEY') api_secret = os.getenv('API_KEY_SECRET') bearer_token = os.getenv('BEARER_TOKEN') access_token = os.getenv('ACCESS_TOKEN') access_token_secret = os.getenv('ACCESS_TOKEN_SECRET') client = tweepy.Client(bearer_token, api_key, api_secret, access_token, access_token_secret) auth = tweepy.OAuth1UserHandler(api_key, api_secret, access_token, access_token_secret) api = tweepy.API(auth) class IDPrinter(tweepy.StreamingClient): def on_tweet(self, tweet): print(tweet.text) printer = IDPrinter(bearer_token) # 清除旧规则 existing_rules = printer.get_rules() if existing_rules.data: rule_ids = [rule.id for rule in existing_rules.data] printer.delete_rules(rule_ids) # 添加精确匹配规则 printer.add_rules(tweepy.StreamRule('"python"')) printer.add_rules(tweepy.StreamRule('"programming"')) printer.add_rules(tweepy.StreamRule('"software"')) # 验证规则 added_rules = printer.get_rules() print("当前生效规则:", [rule.value for rule in added_rules.data]) printer.filter()
内容的提问来源于stack exchange,提问作者Arife Elif Şen
相关产品推荐
相关产品推荐

