Tweepy StreamingClient遇track参数报错,求关键词过滤规则编写帮助
解决Tweepy StreamingClient不支持track参数的关键词过滤问题
你遇到的Unexpected parameter: track报错,核心原因是Tweepy的StreamingClient是为Twitter API v2设计的,而track是旧版API v1.1的参数。API v2改用规则系统实现推文过滤,必须通过add_rules()方法定义过滤条件,不能直接在filter()里传track参数。
修改后的完整代码
import boto3 import json import os import tweepy import uuid bearer_token = os.environ['BEARER_TOKEN'] kinesis_stream_name = 'kds-twitter' twitter_filter_tag = 'Amazon' class StreamingTweets(tweepy.StreamingClient): def on_status(self, status): data = { 'tweet_text': status.text, 'created_at': str(status.created_at), 'user_id': status.user.id, 'user_name': status.user.name, 'user_screen_name': status.user.screen_name, 'user_description': status.user.description, 'user_location': status.user.location, 'user_followers_count': status.user.followers_count, 'tweet_body': json.dumps(status._json) } response = kinesis_client.put_record( StreamName=kinesis_stream_name, Data=json.dumps(data), PartitionKey=partition_key) print('Status: ' + json.dumps(response['ResponseMetadata']['HTTPStatusCode'])) def on_error(self, status): print(status) session = boto3.Session() kinesis_client = session.client('kinesis') partition_key = str(uuid.uuid4()) stream = StreamingTweets(bearer_token) # 可选:清除已存在的规则,避免重复过滤 existing_rules = stream.get_rules() if existing_rules.data: rule_ids = [rule.id for rule in existing_rules.data] stream.delete_rules(rule_ids) # 添加关键词过滤规则 stream.add_rules(tweepy.StreamRule(twitter_filter_tag)) # 启动流(无需传track参数) stream.filter()
关键修改说明
- 规则创建:用
tweepy.StreamRule定义过滤规则,这是API v2的标准方式 - 规则语法:
twitter_filter_tag作为规则值,默认匹配包含该关键词的推文(大小写不敏感)。如果需要复杂规则:- 精确匹配短语:用双引号包裹,比如
'"Amazon Web Services"' - 排除特定内容:用
-前缀,比如"Amazon -AWS" - 匹配话题:用
#前缀,比如"#Amazon"
- 精确匹配短语:用双引号包裹,比如
- 清理旧规则:启动流前删除已有规则,避免重复接收相同条件的推文(可选但推荐)
- 启动流:直接调用
stream.filter()即可,无需额外参数
内容的提问来源于stack exchange,提问作者Niithiyn Vijeaswaran
相关产品推荐
相关产品推荐

