【发布时间】:2023-01-21 12:10:17
【问题描述】:
我目前正在从事一个项目,目标是确定 gis.stackexchange 上各种主题的受欢迎程度。我正在使用 Python 与堆栈交换 API 进行交互。我的问题是我无法配置 API 查询以匹配使用搜索栏的基本搜索将返回的内容(显示包含术语 (x) 的帖子)。我目前正在使用 /search/advanced... q="term" 方法,但是对于可能有大约 100-200 个帖子的搜索词,我得到的结果是空的。我已经阅读了很多 API 文档,但似乎无法配置 API 查询以匹配站点搜索的结果。
编辑:例如,如果我搜索“Bayesian”,我在 gis.stackexchange 上得到 42 个结果,但是当我在 API 请求中设置 q=Bayesian 时,我得到一个空的返回值。
如果有帮助,我已经在下面包含了我的程序。谢谢!
#Interfacing_with_SO_API
import requests as rq
import json
import time
keywordinput = input('Enter your search term. If two words seperate by - : ')
baseurl = ('https://api.stackexchange.com/2.3/search/advanced?page=')
endurl = ('&pagesize=100&order=desc&sort=votes&q=' + keywordinput + '&site=gis.stackexchange&filter=!-nt6H9O0imT9xRAnV1gwrp1ZOq7FBaU7CRaGpVkODaQgDIfSY8tJXb')
urltot = ('https://api.stackexchange.com/2.3/search/advanced?page=1&pagesize=100&order=desc&sort=votes&q=' + keywordinput + '&site=gis.stackexchange&filter=!-nt6H9O0imT9xRAnV1gwrp1ZOq7FBaU7CRaGpVkODaQgDIfSY8tJXb')
response = rq.get(urltot)
page = range(1,400)
if response.status_code == 400:
print('Initial Response Code 400: Stopping')
exit()
elif response.status_code == 200:
print('Initial Response Code 200: Continuing')
datarr = []
for n in page:
response = rq.get(baseurl + str(n) + endurl)
print(baseurl + str(n) + endurl)
time.sleep(2)
if response.status_code == 400 or response.json()['has_more'] == False or n >400:
print('No more pages')
break
elif response.json()['has_more'] == True:
for data in response.json()['items']:
if data['view_count'] >= 0:
datarr.append(data)
print(data['view_count'])
print(data['answer_count'])
print(data['score'])
#convert datarr to csv and save to file
with open(input('Search Term Name (filename): ') + '.csv', 'w') as f:
for data in datarr:
f.write(str(data['view_count']) + ',' + str(data['answer_count']) + ','+ str(data['score']) + '\n')
exit()
【问题讨论】:
-
您能否举一个查询关键字未返回您期望的示例?