使用 Stack Exchange API 在用户级别获取 link 问答

Get the link of question and answer at user level using Stack Exchange API

根据我之前的 ,我能够使用 Stack Exchange API 和以下 curl 命令获取用户级别日期范围内所有未接受答案的列表:

curl "https://api.stackexchange.com/2.2/users/10348758/answers?page=1&pagesize=100&fromdate=1588291200&todate=1592179200&order=desc&sort=activity&site=Whosebug&access_token=my-access-token&key=my-key" | gunzip | jq '.items[] | select(.is_accepted == false)'

上述命令的 JSON 响应是这样的:

 {
  "owner": {
    "reputation": 1595,
    "user_id": 10348758,
    "user_type": "registered",
    "profile_image": "https://www.gravatar.com/avatar/01ccf806a00d7deb1bf15323bc3edbe8?s=128&d=identicon&r=PG&f=1",
    "display_name": "Bhavya",
    "link": "https://whosebug.com/users/10348758/bhavya"
  },
  "is_accepted": false,
  "score": 0,
  "last_activity_date": 1592102481,
  "creation_date": 1592102481,
  "answer_id": 62367766,
  "question_id": 62367395,
  "content_license": "CC BY-SA 4.0"
}

在上面的回复中,我得到了 answer_idquestion_id,这些答案和问题的链接没有包含在回复中。

通过在 curl 命令中包含 &filter=withbody,我能够得到 answer.The 修改后的 curl 命令的主体是:

curl "https://api.stackexchange.com/2.2/users/10348758/answers?page=1&pagesize=100&fromdate=1588291200&todate=1592179200&order=desc&sort=activity&site=Whosebug&filter=withbody&access_token=my-access-token&key=my-key" | gunzip | jq '.items[] | select(.is_accepted == false)'

请问有什么办法可以得到回复中包含的答案和问题的链接吗?我提到了这些自定义过滤器 documentation,但我无法理解如何应用它们。

谁能帮我解决这个问题?

这个答案怎么样?

您目前的情况如下

  1. 从您的 URL 中检索到的值包括 answer_idquestion_id。在这种情况下,答案和问题的 URL 可以分别创建为 https://whosebug.com/a/{answer_id}https://whosebug.com/q/{question_id}。我在 here.
  2. 提到过
  3. 在您的 curl 命令中,jq 的用法类似于 jq '.items[] | select(.is_accepted == false)'

从上述情况来看,在这个答案中,我想建议通过向 jq.

添加参数来将 URL 的答案和问题添加到检索到的值中

修改后的jq命令:

本例修改后的jq命令如下

jq '[.items[] | select(.is_accepted == false) |= . + {"answerUrl": ("https://whosebug.com/a/" + (.answer_id|tostring)), "questionUrl": ("https://whosebug.com/q/" + (.question_id|tostring))}]'

修改后的 curl 命令:

当你的curl命令修改后,变成如下。

curl "https://api.stackexchange.com/2.2/users/10348758/answers?page=1&pagesize=100&fromdate=1588291200&todate=1592179200&order=desc&sort=activity&site=Whosebug&filter=withbody&access_token=my-access-token&key=my-key" | gunzip | jq '[.items[] | select(.is_accepted == false) |= . + {"answerUrl": ("https://whosebug.com/a/" + (.answer_id|tostring)), "questionUrl": ("https://whosebug.com/q/" + (.question_id|tostring))}]'

结果:

当上面修改的curl命令为运行时,检索到以下结果。您可以在结果中看到 answerUrlquestionUrl 的值。

[
  {
    "owner": {###},
    "is_accepted": false,
    "score": ###,
    "last_activity_date": ###,
    "creation_date": ###,
    "answer_id": ###,
    "question_id": ###,
    "content_license": "###",
    "answerUrl": "https://whosebug.com/a/###",  <--- Added
    "questionUrl": "https://whosebug.com/q/###"  <--- Added
  },
  ,
  ,
  ,
]

参考文献:

已添加:

如果您想将标题包含在检索到的值中,请使用如下自定义过滤器。

修改后的jq命令:

curl "https://api.stackexchange.com/2.2/users/10348758/answers?page=1&pagesize=100&fromdate=1588291200&todate=1592179200&order=desc&sort=activity&site=Whosebug&access_token=my-access-token&key=my-key&filter=%21T%2AhPUiv_%28m%28rgrhfg_" | gunzip | jq '[.items[] | select(.is_accepted == false)]'
  • 本例中添加了filter=%21T%2AhPUiv_%28m%28rgrhfg_的过滤器作为查询参数。至此,标题被添加。在此自定义过滤器中,包含 title,link,.share_link。这样,标题、答案和问题链接都包含在返回值中。所以jq的命令可以更简单

参考: