如何限制stackexchange api返回的字段,并关闭分页?

时间:2016-06-13 05:05:27

标签: json python-2.7 stackexchange-api

我想在一个较小的(少于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)是我首选的(唯一)语言。

1 个答案:

答案 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来找到它。