16

我发现 bitbucket api 如下:

https://bitbucket.org/api/2.0/repositories/{teamname}

但此链接返回 301 状态(永久移至!api/2.0/repositories/{teamname})。

好的,但是这个返回状态 200,存储库为零。

我提供了两个参数作为userpassword,但似乎没有任何改变。

那么,任何人都可以回答如何获取允许特定用户使用的私有存储库的完整列表吗?

4

5 回答 5

22

Atlassian 文档 -存储库端点提供了有关如何访问存储库的详细文档。

bitbucket 中提到的用于获取帐户存储库列表的URL是:

GET https://api.bitbucket.org/2.0/repositories/{owner}

如果您使用上面的 URL,它总是检索您是所有者的存储库。为了检索用户所属的存储库的完整列表,您应该调用:

GET https://api.bitbucket.org/2.0/repositories?role=member

您可以根据需要为角色应用以下一组过滤器。

要限制返回的存储库集,请应用 role=[owner|admin|contributor|member] 参数,其中角色为:

  • owner:返回当前用户拥有的所有存储库。
  • admin:返回用户具有明确管理员访问权限的存储库。
  • 贡献者:返回用户具有显式写入权限的存储库。
  • member:返回用户具有显式读取权限的存储库。

Edit-1:
您可以使用Bitbucket REST 浏览器来测试请求/响应。(停产)

于 2015-09-25T10:38:51.183 回答
1

您不应使用来自https://bitbucket.org/api域的 API。

相反,您应该始终使用https://api.bitbucket.org

现在,在执行重定向后您可能会得到一个空结果的一个原因可能是因为某些 http 客户端只会在服务器通过返回带有WWW-Authenticate响应标头的 401 响应来明确要求它们时发送基本身份验证凭据。

存储库端点不需要身份验证。它只会返回对匿名用户可见的存储库(在您的情况下可能是一个空集),因此坚持WWW-Authenticate挑战的客户端(有很多,包括 Microsoft Powershell)将无法按预期工作(注意,curl总是急切地发送基本身份验证凭据,这使其成为一个很好的测试工具)。

于 2015-09-30T18:14:38.427 回答
0

不幸的是,根据我在文档中看到的内容,无法列出用户有权访问的所有私有存储库。

GET https://api.bitbucket.org/2.0/repositories

“返回所有公共存储库的分页列表。” 根据doco

GET https://api.bitbucket.org/2.0/repositories/{owner}

“返回指定帐户或 UUID 拥有的所有存储库的分页列表。” 根据doco

因此,获取所有不一定由用户拥有的私有存储库要么是不可能的,要么是我没有找到正确的端点,或者文档不准确。

于 2019-12-02T10:59:05.883 回答
0

上面的答案都不适合我,所以这就是我所做的。我们将使用 Bitbucket REST API。

验证

您不能使用您的正常凭据。我创建了一个 API 密码。我不确定如何通过您的浏览器访问此页面,但请访问此处:https ://bitbucket.org/account/settings/app-passwords/

创建一个应用密码,然后剪切并保存 Atlassian 为您生成的密码。

卷曲

curl --user your_username:your_app_password https://api.bitbucket.org/2.0/repositories/your_workspace?pagelen=100

我通过管道将其jq保存到文件中。

your_workspace您可以通过查看任何存储库的 URL 获得。

寻呼

最大 pagelen 似乎是 100。如果您有超过 100 个 repos,那么您可能必须这样做:

curl --user your_username:your_app_password https://api.bitbucket.org/2.0/repositories/your_workspace?pagelen=100&page=2

JSON

JSON 还不错。您想要“值”数组。从那里,查看 links.clone,它可能有两个这样的条目:

    "clone": [
      {
        "href": "https://user@bitbucket.org/WORKSPACE/REPO.git",
        "name": "https"
      },
      {
        "href": "git@bitbucket.org:WORKSPACE/REPO.git",
        "name": "ssh"
      }
    ],

这是我的结果中的剪切和粘贴,个人信息已更改。其他两个字段也很有用:

  "full_name": "WORKSPACE/repo",
  "name": "Repo",
于 2021-12-17T19:27:56.943 回答
0

扩展暴雪的答案,这是我刚刚写的一个 node.js 小脚本:

import axios from 'axios';
import fs from 'fs';


async function main() {
    const bitbucket = axios.create({
        baseURL: 'https://api.bitbucket.org/2.0',
        auth: {
            username: process.env.BITBUCKET_USERNAME!,
            password: process.env.BITBUCKET_PASSWORD!,
        }
    });

    const repos = [];
    let next = 'repositories?role=member';

    for(;;) {
        console.log(`Fetching ${next}`)
        const res = await bitbucket.get(next);
        if(res.status < 200 || res.status >= 300) {
            console.error(res);
            return 1;
        }
        repos.push(...res.data.values);
        if(!res.data.next) break;
        next = res.data.next;
    }
    console.log(`Done; writing file`);
    await fs.promises.writeFile(`${__dirname}/../data/repos.json`,JSON.stringify(repos,null,2),{encoding:'utf8'});
}


main().catch(err => {
    console.error(err);
});
于 2019-12-27T23:59:24.463 回答