我目前正在做一个项目,目标是确定各种话题在gis.stackchange上的受欢迎程度.我正在使用Python与堆栈交换API进行交互.我的问题是,我在配置API查询以匹配使用搜索栏的基本搜索将返回的内容(显示包含术语(X)的帖子)时遇到了问题.我目前正在使用/搜索/高级...Q="Term"方法,然而,对于可能有大约100-200篇帖子的搜索词,我得到的结果是空的.我已经阅读了很多API文档,但似乎无法配置API查询来匹配站点搜索所产生的结果.
编辑:例如,如果我搜索"Bayesian",我在gis.stackchange上会得到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()