首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Bitbucket REST API获取所有拉取请求评论

通过Bitbucket REST API获取所有拉取请求评论
EN

Stack Overflow用户
提问于 2021-07-09 01:34:33
回答 1查看 420关注 0票数 1

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

虽然我有pull-request ID并设置了正确的URL格式,但我仍然得到一个400响应错误。我可以发一个帖子请求评论,但我不能发GET。在进一步阅读之后,我注意到为这个端点列出的六个参数并没有说“可选”。看起来需要提供这些才能检索所有的注释。

但是这些参数到底是什么呢?我觉得他们的描述一点用处都没有。任何和所有的帮助都将非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-07-20 21:05:35

仅当diffType未设置为EFFECTIVE时,才需要fromHashtoHashstate对我来说似乎也是可选的(当不包含它时,没有给我一个错误),anchorState指定了要获取哪种类型的注释-您可能希望ALL在那里。据我所知,path包含要从中读取注释的文件的路径。(例如: src/a.py和src/b.py被更改为->指定要为其中哪个获取注释)然而,这可能不是您想要的。我假设你想获取所有的评论。

你可以通过/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/activities来做到这一点,它还包括其他活动,比如评论,所以你必须做一些过滤。

我不会粘贴文档或我测试过一次的bitbucket实例中的示例数据,因为json响应非常长。正如我已经说过的,在链接的页面上有一个示例响应。我还认为,一旦下载,你就会找到你想要的数据,因为这是一个问答论坛,而不是一个“为我编程”的页面:

作为一个小的快速入门:您可以像这样使用curl

代码语言:javascript
复制
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代码段:

代码语言:javascript
复制
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进行分页的,因此您将不得不做一些额外的工作来构建一个完整的列表:要么设置一个令人讨厌的高限制(脏),要么继续发出请求,直到获取完所有内容。我强烈推荐后者。

您可以使用startlimit参数控制您获得的数据,您可以直接将它们附加到url (例如https://bla/asdasdasd/activity?start=25),或者更简洁地添加到params字典,如下所示:

代码语言:javascript
复制
requests.get(
    url,
    params={
        "start": 25,
        "limit": 123
    }
)

把所有这些放在一起:

代码语言:javascript
复制
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替换为如下所示

代码语言:javascript
复制
return [activity for activity in values if activity["action"] == "COMMENTED"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68306295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档