通过 Bitbucket REST 获取所有拉取请求评论 API
Fetch All Pull-Request Comments Via Bitbucket REST API
这是根据 bitbucket 的文档检索特定拉取请求的评论的方法:
虽然我确实有拉取请求 ID 并设置了正确的格式 URL,但我仍然收到 400 响应错误。我可以发出 POST 评论请求,但无法发出 GET。进一步阅读后,我注意到为该端点列出的六个参数没有说 'optional'。看起来需要提供这些才能检索所有评论。
但是这些参数到底是什么?我发现他们的描述丝毫没有帮助。任何帮助将不胜感激!
fromHash
和 toHash
仅在 diffType
未设置为 EFFECTIVE
时才需要。 state
对我来说似乎也是可选的(不包括它时没有给我一个错误),并且 anchorState
指定要获取哪种评论 - 你可能想要 ALL
那里。据我了解,path
包含要从中读取注释的文件的路径。 (例如:src/a.py 和 src/b.py 已更改 -> 指定要为其中的哪些获取评论)
但是,这可能不是您想要的。我假设您想获取所有评论。
您可以通过 /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 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")])
将打印 activity 个 ID 列表,例如[77190, 77188, 77123, 77136]
等等。当然,您可能不应该在那里硬编码您的用户名和密码 - 这只是一个例子,而不是生产就绪代码。
最后,要按函数内的操作进行过滤,您可以将 return values
替换为类似
的内容
return [activity for activity in values if activity["action"] == "COMMENTED"]
这是根据 bitbucket 的文档检索特定拉取请求的评论的方法:
虽然我确实有拉取请求 ID 并设置了正确的格式 URL,但我仍然收到 400 响应错误。我可以发出 POST 评论请求,但无法发出 GET。进一步阅读后,我注意到为该端点列出的六个参数没有说 'optional'。看起来需要提供这些才能检索所有评论。
但是这些参数到底是什么?我发现他们的描述丝毫没有帮助。任何帮助将不胜感激!
fromHash
和 toHash
仅在 diffType
未设置为 EFFECTIVE
时才需要。 state
对我来说似乎也是可选的(不包括它时没有给我一个错误),并且 anchorState
指定要获取哪种评论 - 你可能想要 ALL
那里。据我了解,path
包含要从中读取注释的文件的路径。 (例如:src/a.py 和 src/b.py 已更改 -> 指定要为其中的哪些获取评论)
但是,这可能不是您想要的。我假设您想获取所有评论。
您可以通过 /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 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")])
将打印 activity 个 ID 列表,例如[77190, 77188, 77123, 77136]
等等。当然,您可能不应该在那里硬编码您的用户名和密码 - 这只是一个例子,而不是生产就绪代码。
最后,要按函数内的操作进行过滤,您可以将 return values
替换为类似
return [activity for activity in values if activity["action"] == "COMMENTED"]