使用tweepy的search_tweets接口报错Unexpected parameter: since如何解决
报错原因
你遇到的Unexpected parameter: since报错,本质是当前使用的Tweepy v4.x及以上版本中,api.search_tweets()方法已经移除了since、until这两个独立参数,同时还存在两个需要注意的关联问题:
- Twitter API v1.1的标准搜索接口仅支持查询最近7天内的推文,你要查询2018-2021年的历史数据,该接口本身不支持
- 你的代码末尾存在笔误,
all_tweets = [tweets for tweet in tweets]把循环变量写反了,会返回无效结果
解决方案
方案一:仅需要查询最近7天内的推文
可直接调整查询语法,把时间过滤规则写到搜索关键词q参数中即可,调整后代码如下:
import tweepy from textblob import TextBlob import pandas as pd import numpy as np import re import matplotlib.pyplot as plt import datetime plt.style.use("fivethirtyeight") # 存储登录信息 log = pd.read_csv("tokens.csv") consumerKey = log['key'][0] consumerSecret = log['key'][1] accessToken = log['key'][2] accessTokenSecret = log['key'][3] # 创建认证对象 authenticate = tweepy.OAuthHandler(consumerKey, consumerSecret) # 配置access token和access secret authenticate.set_access_token(accessToken, accessTokenSecret) # 创建API对象 api = tweepy.API(authenticate, wait_on_rate_limit=True) # 搜索规则:7天内的带#Amazonia的非转推葡语推文 seven_days_ago = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime("%Y-%m-%d") search_term = f"#Amazonia -filter:retweets since:{seven_days_ago}" # 移除独立的since、until参数 tweets = tweepy.Cursor(api.search_tweets, q=search_term, lang= "pt", tweet_mode="extended").items(2000) # 存储推文,修正变量笔误 all_tweets = [tweet for tweet in tweets]
方案二:需要查询2018-2021年的历史推文
你需要先申请Twitter学术研究API权限,对接Tweepy的V2接口search_all_tweets实现全历史推文查询,示例代码如下:
import tweepy from textblob import TextBlob import pandas as pd import numpy as np import re import matplotlib.pyplot as plt plt.style.use("fivethirtyeight") # 填入你申请到的V2接口Bearer Token bearer_token = "你的V2接口Bearer Token" client = tweepy.Client(bearer_token=bearer_token, wait_on_rate_limit=True) # 配置搜索规则 search_term = "#Amazonia -is:retweet lang:pt" # 调用全历史搜索接口,时间格式需为带UTC时区的ISO格式 tweets = tweepy.Paginator(client.search_all_tweets, query=search_term, start_time="2018-01-01T00:00:00Z", end_time="2021-12-01T00:00:00Z", max_results=100).flatten(limit=2000) all_tweets = [tweet for tweet in tweets]
注意:普通开发者账号仅可使用V2接口的
search_recent_tweets,仍只能查询最近7天的推文,只有学术/企业权限账号可使用search_all_tweets查询全历史数据。
内容的提问来源于stack exchange,提问作者Matheus Pombo
相关产品推荐
相关产品推荐

