1

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

我需要计算链接的问题总数约为 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 个请求后按预期被阻止。

4

1 回答 1

1

您的目标是创建一个堆栈溢出网络图,其中节点作为问题,边作为问题之间的超链接。API 是一种更简单的方法,但有速率限制,不幸的是,批处理请求会要求您使用已经稀缺的速率限制发出更多经过身份验证的请求。有一些创造性的方法可以规避此限制,但您可能会冒违反堆栈溢出 T&C 的风险。

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

编辑

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

于 2014-08-11T12:25:26.350 回答