这是如何根据bitbucket的文档检索特定pull-request的注释:

虽然我有pull-request ID并设置了正确的URL格式,但我仍然得到一个400响应错误。我可以发一个帖子请求评论,但我不能发GET。在进一步阅读之后,我注意到为这个端点列出的六个参数并没有说“可选”。看起来需要提供这些才能检索所有的注释。
但是这些参数到底是什么呢?我觉得他们的描述一点用处都没有。任何和所有的帮助都将非常感谢!
发布于 2021-07-20 21:05:35
仅当diffType未设置为EFFECTIVE时,才需要fromHash和toHash。state对我来说似乎也是可选的(当不包含它时,没有给我一个错误),anchorState指定了要获取哪种类型的注释-您可能希望ALL在那里。据我所知,path包含要从中读取注释的文件的路径。(例如: src/a.py和src/b.py被更改为->指定要为其中哪个获取注释)然而,这可能不是您想要的。我假设你想获取所有的评论。
你可以通过/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/activities来做到这一点,它还包括其他活动,比如评论,所以你必须做一些过滤。
我不会粘贴文档或我测试过一次的bitbucket实例中的示例数据,因为json响应非常长。正如我已经说过的,在链接的页面上有一个示例响应。我还认为,一旦下载,你就会找到你想要的数据,因为这是一个问答论坛,而不是一个“为我编程”的页面:
作为一个小的快速入门:您可以像这样使用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模块Python版本的curl代码段:
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 documentation进行分页的,因此您将不得不做一些额外的工作来构建一个完整的列表:要么设置一个令人讨厌的高限制(脏),要么继续发出请求,直到获取完所有内容。我强烈推荐后者。
您可以使用start和limit参数控制您获得的数据,您可以直接将它们附加到url (例如https://bla/asdasdasd/activity?start=25),或者更简洁地添加到params字典,如下所示:
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")])将打印活动ids列表,例如[77190, 77188, 77123, 77136]等。当然,您可能不应该在那里硬编码您的用户名和密码-这只是一个示例,而不是生产就绪的代码。
最后,要在函数内按操作进行过滤,可以将return values替换为如下所示
return [activity for activity in values if activity["action"] == "COMMENTED"]https://stackoverflow.com/questions/68306295
复制相似问题