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

How to restrict fields returned by stackexchange api, and turn off paging?

我想列出一个较小(少于 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

returns 这个 JSON 在我的浏览器中:

{"items":[{"tags":["apples","crumble"],"owner":{ ...
...
...],"has_more":true,"quota_max":300,"quota_remaining":252}

什么是配额?某站一搜10000,这里一下子只有300

我不会经常这样做,我想要的是最快的编辑方法(当然也可以是类似的方法)url 这样我就可以得到所有标题的列表一个小网站。我不明白如何使用分页,我不需要任何其他字段。我不在乎我是否得到它们,但我在想如果我排除它们我可以一次拥有更多。

如果我需要编写脚本,python (2.7) 是我的首选(唯一)语言。

quota_max 是您的应用程序每天允许的请求数。 300 是未注册应用程序的默认值。这曾经在描述默认值的 throttles, but seems to have been removed. Here is 历史信息的页面上直接提及。

要将其增加到 10,000,您需要 register an application and then authenticate 通过在脚本中传递访问令牌。


要获取站点上的所有标题,您可以使用 Python 库来帮助:


假设您已经注册了您的应用程序并通过了身份验证,我们就可以继续了。

首先,安装StackAPI (documentation):

pip install stackapi

此代码随后将获取网站 hardwarerecs 的 10,000 个最新问题 (max_pages * page_size)。每页花费您一次 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,此结果集仅限于标题和 link。您可以通过在 Web UI 中调整所需的字段并复制过滤字段来找到合适的过滤器。

创建 SITE 参数时传递的 hardwarerecs 参数是网站域的第一部分 URL。或者,您可以在查看 /sites 端点时查看您网站的 api_site_parameter 来找到它。