我想在一个较小的(少于10,000个问题)stackexchange站点中列出所有问题的当前标题。我在这里尝试了交互式实用程序:https://api.stackexchange.com/docs/questions并且它都将结果报告为底部的json,并在顶部生成请求URL。例如:
https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&tagged=apples&site=cooking
在我的浏览器中返回此JSON:
{"items":[{"tags":["apples","crumble"],"owner":{ ...
...
...],"has_more":true,"quota_max":300,"quota_remaining":252}
什么是配额?在一个网站上进行一次搜索是10,000,但突然之间只有300个。
我不会经常这样做,我想要的是编辑那个(或类似的)网址的最快方式,这样我就可以在一个小网站上获得所有标题的列表。我不明白如何使用分页,我不需要任何其他字段。我不在乎我是否得到它们,但我想如果我将它们排除在外我可以立刻拥有更多。
如果我需要编写脚本,python(2.7)是我首选的(唯一)语言。
答案 0 :(得分:1)
quota_max
是您每天允许申请的次数。 300是未注册的应用程序的默认值。这曾经在描述throttles的页面上直接提到,但似乎已被删除。描述默认值的Here is历史信息。
要将此增加到10,000,您需要在脚本中传递访问令牌register an application,然后authenticate。
要获取网站上的所有标题,您可以使用Python库来提供帮助:
假设您已注册申请并经过身份验证,我们可以继续。
首先,安装StackAPI(documentation):
pip install stackapi
此代码将抓取网站max_pages
的10,000个最新问题(page_size
* hardwarerecs
)。每个页面都会花费您一次API命中,因此每页的项目数越多,API调用越少。
from stackapi import StackAPI
SITE = StackAPI('hardwarerecs')
SITE.page_size = 100
SITE.max_pages = 100
# Filter to only get question title and link
filter = '!BHMIbze0EQ*ved8LyoO6rNjkuLgHPR'
questions = SITE.fetch('questions', filter=filter)
questions
变量是一个字典,它看起来像非常类似于API输出,除了库为你做了所有的分页。您的数据位于questions['data']
,在这种情况下,包含一个字典列表,如下所示:
[
...
{u'link': u'http://hardwarerecs.stackexchange.com/questions/29/sound-board-to-replace-a-gl2200-in-a-house-of-worship-foh-setting',
u'title': u'Sound board to replace a GL2200 in a house-of-worship FOH setting?'},
{ u'link': u'http://hardwarerecs.stackexchange.com/questions/31/passive-gps-tracker-logger',
u'title': u'Passive GPS tracker/logger'}
...
]
由于我们应用的filter
,此结果集仅限于标题和链接。您可以通过在Web UI中调整所需的字段并复制过滤器字段来找到适当的过滤器。
创建hardwarerecs
参数时传递的SITE
参数是网站域名网址的第一部分。或者,您可以在查看/sites
结束点时查看您网站的api_site_parameter
来找到它。