api - 通过 Bitbucket REST API 获取所有拉取请求评论
问题描述
这是根据 bitbucket 的文档检索特定拉取请求评论的方法:
虽然我确实有拉取请求 ID 并格式化了正确的 URL,但我仍然收到 400 响应错误。我可以发出 POST 请求来发表评论,但我无法发出 GET。进一步阅读后,我注意到为此端点列出的六个参数没有说“可选”。看起来需要提供这些才能检索所有评论。
但这些参数究竟是什么?我觉得他们的描述一点用都没有。任何和所有的帮助将不胜感激!
解决方案
fromHash
并且仅在未设置为toHash
时才需要。对我来说似乎也是可选的(不包括它时没有给我一个错误),并指定要获取哪种评论 - 你可能想要那里。据我了解,包含从中读取评论的文件路径。(例如: src/a.py 和 src/b.py 已更改 -> 指定其中要获取评论的内容)但是,这可能不是您想要的。我假设您想获取所有评论。diffType
EFFECTIVE
state
anchorState
ALL
path
您可以通过/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/activities
其中还包括评论等其他活动来做到这一点,因此您必须进行一些过滤。
我不会粘贴文档中的示例数据或我测试过的 bitbucket 实例,因为 json 响应很长。正如我所说,链接页面上有一个示例响应。我还认为您会弄清楚如何在下载后获取所需的数据,因为这是一个问答论坛,而不是“为我编程”页面:b
作为一个小型快速入门:您可以curl
像这样使用
curl -u <your_username>:<your_password> https://<bitbucket-url>/rest/api/1.0/projects/<project-key>/repos/<repo-name>/pull-requests/<pr-id>/activities
这将打印响应 json。
使用requests模块的那个 curl 片段的 Python 版本:
import requests
url = "<your-url>" # see above on how to assemble your url
r = requests.get(
url,
params={}, # you'll need this later
auth=requests.auth.HTTPBasicAuth("your-username", "your-password")
)
请注意,结果是根据api 文档进行分页的,因此您必须做一些额外的工作来构建完整列表:设置一个令人讨厌的上限(脏)或继续发出请求,直到您获取所有内容。我强烈推荐后者。
您可以使用start
和limit
参数来控制获得的数据,您可以直接附加到 url(例如https://bla/asdasdasd/activity?start=25
)或者 - 更干净 - 添加到params
dict 中,如下所示:
requests.get(
url,
params={
"start": 25,
"limit": 123
}
)
把它们放在一起:
def get_all_pr_activity(url):
start = 0
values = []
while True:
r = requests.get(url, params={
"limit": 10, # adjust this limit to you liking - 10 is probably too low
"start": start
}, auth=requests.auth.HTTPBasicAuth("your-username", "your-password"))
values.extend(r.json()["values"])
if r.json()["isLastPage"]:
return values
start = r.json()["nextPageStart"]
print([x["id"] for x in get_all_pr_activity("my-bitbucket-url")])
将打印活动 ID 列表,例如[77190, 77188, 77123, 77136]
等等。当然,您可能不应该在那里硬编码您的用户名和密码 - 这只是作为示例,而不是生产就绪代码。
最后,要按函数内部的操作进行过滤,您可以return values
将
return [activity for activity in values if activity["action"] == "COMMENTED"]
推荐阅读
- cucumber - 通过电子邮件发布 Karate-Cucumber html 报告
- ruby-on-rails - 设计令牌验证另一个用户登录
- java - AsyncContext 和 I/O 错误创建 CLOSE_WAIT
- java - 如何在Windows的同一目录中复制给定不同名称的文件
- google-maps - Xamarin.Forms.Map 显示什么?
- angular - 使用 Angular 4 打开新的浏览器选项卡使父选项卡无响应
- javascript - 下一页打不开。分页问题
- machine-learning - 从时间序列数据中学习以预测时间序列(不是预测)
- java - 传递给持久化的分离实体 - Hibernate + JavaFX
- node.js - 我的测试中的这个错误代码是什么?我没有更改任何代码