python - 如何使用 Twitter 的标准 API 每天每次查询获得超过 100 条不同的记录?
问题描述
我正在尝试使用标准 API 下载推文列表,但我得到的总是相同的记录。即,这是我的要求:
ApiSearch = api.search(q="#immigration", lang="en", result_type="mixed", count=100, until=untilDate, include_entities=False)
但是如果我不时地在 1 小时之间运行它,我得到的结果是一样的。
我的设置有问题api.search
还是我误解了 Twitter 标准 API 的限制?
这是我的代码:
conn_str = ("DRIVER={PostgreSQL Unicode};"
"DATABASE=TwitterLCL;"
"UID=postgres;"
"PWD=pswd;"
"SERVER=localhost;"
"PORT=5432;")
consumer_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
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)
col_db_tweetTable01 = ['CREATED_AT', 'TWEET_ID', 'TEXT', 'USER_ID']
i = 0
while i <= 10000:
time.sleep(2)
i += 1
ApiSearch = api.search(q="#immigration", lang="en", result_type="mixed", count=100, until=None, include_entities=False)
time.sleep(2)
for res in range(0, len(ApiSearch)):
db_tweetTable01DB = pd.DataFrame(columns = col_db_tweetTable01) #creates a new dataframe that's empty
TWEET = ApiSearch[res]._json
Created_At = None
Created_At = TWEET.get("created_at")
print("Created_At : "+Created_At)
Tweet_Id = None
Tweet_Id = TWEET.get("id_str")
Text = None
Text = TWEET.get("text")
User_Id = TWEET.get("user").get("id_str")
db_tweetTable01DB = db_tweetTable01DB.append({'CREATED_AT' : Created_At, 'TWEET_ID' : Tweet_Id, 'TEXT' : Text, 'USER_ID' : User_Id}, ignore_index=True)
try:
connStr = pyodbc.connect(conn_str)
cursor = connStr.cursor()
for index, row in db_tweetTable01DB.iterrows():
#print(row)
cursor.execute("INSERT INTO public.db_tweettable01(CREATED_AT, TWEET_ID, TEXT, USER_ID) values (?, ?, ?, ?)", row['CREATED_AT'], row['TWEET_ID'], row['TEXT'], row['USER_ID'])
connStr.commit()
cursor.close()
connStr.close()
except pyodbc.Error as ex:
sqlstate = ex.args[1]
print(sqlstate)
print("Tweet_Id : "+Tweet_Id)
print("User_Id : "+User_Id)
谢谢你的帮助。
解决方案
正如我在 GitHub 上的 Tweepy 问题中回答的那样,“混合”result_type
包括流行的和最近的结果。如果您只想要最近的结果,则需要指定“最近的”。正如我还解释过的,您需要使用该since_id
参数来避免获得重复的推文。
请参阅标准搜索 API的文档API.search
。
如果您要在 2 秒而不是 1 小时的短时间内迭代分页结果,则可以使用Cursor代替。
对于每个查询超过 100 个结果,标准搜索 API 的限制是每页最多 100 个,所以这是不可能的。
推荐阅读
- html - 如何在 ionic 中更改 tabsHighlight 的颜色
- android - 这些 Google Maps v2 StackOverflowError 崩溃是否有解决方法/修复?
- c++ - std::unique_ptr 字符数组
- android - 为什么Android磁场传感器沿重力方向分量很大?
- javascript - 如何导入 JavaScript 库的源文件?
- java - 如何从对象调用覆盖方法
- angular - localhost:4200 和 localhost:4200/projectName 有什么区别?
- highcharts - 使用 highcharts-vue 和 axios 绘制可变数量的系列
- spring - 用于实践的 Spring 和 Hibernate 项目
- tcl - 如何从 -command 选项中的代码获取结果