Bitbucket Rest API,用于获取项目下的Repo名称



我正在尝试使用Bitbucket API获得项目下的回购名称。文档上的当前链接说要使用

curl -u username:pwd http://${bitbucket-url}/rest/api/1.0/projects/${projectkey}/repos

反应:

{
"size": 1,
"limit": 25,
"isLastPage": true,
"values": [
{
***"slug": "my-repo",***
"id": 1,
"name": "My repo",
"scmId": "git",
"state": "AVAILABLE",
"statusMessage": "Available",
"forkable": true,
"project": {
"key": "PRJ",
"id": 1,
"name": "My Cool Project",
"description": "The description for my cool project.",
"public": true,
"type": "NORMAL",
"links": {
"self": [
{
"href": "http://link/to/project"
}
]
}
},
"public": true,
"links": {
"clone": [
{
"href": "ssh://git@<baseURL>/PRJ/my-repo.git",
"name": "ssh"
},
{
"href": "https://<baseURL>/scm/PRJ/my-repo.git",
"name": "http"
}
],
"self": [
{
"href": "http://link/to/repository"
}
]
}
}
],
"start": 0
}

但是我只需要响应中的repo名称

from subprocess import call
import configparser
import subprocess
import json
import os
base_dir = os.getcwd()
DETACHED_PROCESS = 0x00000008
cmd = 'curl --url "' + bb_url + '?pagelen=100&page=' + str(page) + '" --user ' + bb_user + ':' + bb_pwd + ' --request GET --header "Accept: application/json"'
output = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, creationflags=DETACHED_PROCESS).communicate()
datastore = json.loads(output[0].decode("utf-8"))
size = datastore.get("size")
values = datastore.get("values")
if(len(values)) == 0:
break
for repos in range(size):
repo_name = values[repos]["values"]["slug"]
f_initial = open (base_dir+"\repositoryList.txt", "a+")
f_initial.write(repo_name)
f_initial.write("n")
f_initial.close()
page = page + 1

此脚本将帮助您获得项目中所有存储库的列表,并将其写入文件repositoryList.txt

使用bash命令

repoNamesJson=$(curl -D- -X GET -H "Authorization: Basic <encoded user pasword here>" -H "Content-Type: application/json" https://yourstash/rest/api/1.0/projects/ad/repos?limit=100000)
repoNames=$(echo $repoNamesJson | awk -v RS=',' '/{"slug":/ {print}' | sed -e 's/{"slug":/''/g' | sed -e 's/"/''/g')
echo $repoNames

使用python-stash库

import stashy
bitbucket = stashy.connect("host", "username", "password")
projects = bitbucket.projects.list()
repos = bitbucket.repos.list()
for project in projects:
for repo in bitbucket.projects["%s" % (project["key"])].repos.list():
print(repo["name"])
print(repo["project"]['key'])

您可以使用BitBucket API的部分响应来限制API返回的字段。

从文档页摘录:

[…使用fields查询参数。fields参数支持3种操作模式:

  • 删除选择字段(例如-links)
  • 拉入端点通常不返回的附加字段,同时仍然获得所有默认字段(例如+reviewers)
  • 省略除指定字段(如owner.display_name)以外的所有字段

fields参数可以包含多个以逗号分隔的字段名列表(例如fields=owner.display_name,uuid,links.self.href)。参数本身不重复。

在你的例子中应该是这样的:

curl -u username:pwd 
http://${bitbucket-url}/rest/api/1.0/projects/${projectkey}/repos?fields=values.slug

虽然我必须说JSON输出不是平坦的,但它仍然保留其原始结构:

{
"values": [
{
"slug": "your repo slug #1"
},
...

因此,如果您实际上只想要一个列表,其中每个repo段在其单独的行中,则仍然需要做一些腿部工作。

最新更新