解释StackExchange API批处理请求

时间:2014-08-10 15:54:44

标签: json stackexchange-api

我的目的是检索输入问题的链接问题ID列表。为此,StackExchange API提供了linked API,它将分号分隔的问题ID列表作为参数。

我需要计算链接的问题总数约为100万。但是,StackExchange API允许的最大配额仅为10,000个请求。因此,对于我来说,一次发送100个批量请求(以分号分隔)是理想的。因此,在一天之内,我就可以访问100 * 10,000 = 100万个链接。

不幸的是,对于这样的批处理请求,StackExchange API返回一个扁平的JSON响应数组,并且无法确定哪些链接对应于哪些输入问题。例如,id为14266328的问题链接到两个问题,其中包含id 5598291和1917935.而问题14266325链接到3270680。

现在,当我将以下请求发送到StackExchange服务器时,

http://api.stackexchange.com/2.2/questions/14266328%3B14266325/linked?order=desc&sort=activity&site=stackoverflow&filter=!--KJA8bUDfrh   

我收到了以下回复。

{
  "items": [
    {
      "question_id": 3270680
    },
    {
      "question_id": 5598291
    },
    {
      "question_id": 1917935
    }
  ],
  "has_more": false,
  "quota_max": 10000,
  "quota_remaining": 9988
} 

问题是:从这个回复中,没有办法告诉与14266328相关的问题是什么,以及与另一个相关的问题是什么。

我尝试了一次只发送一个question_id参数的简单方法,但我的请求在预期的10,000个请求后被阻止。

1 个答案:

答案 0 :(得分:1)

您的目标是创建堆栈溢出的网络图,其中节点作为问题和边缘作为问题之间的超链接。 API是一种更简单的方法,但具有速率限制和批量请求,遗憾的是,您需要使用已经稀缺的速率限制来进行更多经过身份验证的请求。有创意方法来规避此限制,但您可能会冒着违反Stack overflow T& C的风险。

那就是说,我会用Stack Exchange Data Dump自己生成这个网络图。您可以查看问题的文本内容并提取超链接。然后,您可以查看Stack Overflow中的超链接(因为/questions/linked端点仅为您提供网站内的超链接)并生成图形。所有这些都可以使用re(提取超链接),networkx/igraph(生成图形并以GraphML格式导出以供将来使用)和lxml(迭代)在Python等编程语言中轻松完成。解析数据转储XML文件)。

修改

事实证明,数据转储通过postlinks XML文件提供了这样的链接结构。这实际上意味着您不再需要抓取帖子的文本内容来查找超链接。