如何通过API接受Github仓库邀请?

问题描述 投票:0回答:2

我正在查看 Github API,它允许您通过 API 端点获取所有存储库邀请(请参阅 https://developer.github.com/v3/repos/invitations/#list-invitations-for-a-repository )。这样就可以正常工作了:

from requests.auth import HTTPBasicAuth
import requests
login = 'xxx'
password = 'yyy'
url = 'https://api.github.com/user/repository_invitations'
repository_invites = requests.get(
            url, auth=HTTPBasicAuth(login, password)).json()
print('response: ' + str(repository_invites))

然后我可以像这样取出每个请求的

url

for repository_invite in repository_invites:
    print('url: ' + repository_invite.get('url'))

它会返回如下内容:

url: https://api.github.com/user/repository_invitations/123456789

Github 还提到您可以在 https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation 接受邀请,其中提到

补丁/user/repository_invitations/:invitation_id

我不明白的是我如何告诉 Github 如何接受它。该端点似乎用于删除和接受邀请。 Github 在

https://developer.github.com/v3/#http-verbs
讨论了 PATCH,其中提到您可以使用
POST
或发送
PATCH
请求,但没有说明如何使用。所以问题是,我如何知道应该在
PATCH
通话中发送什么内容?我尝试过这个例子:

result = requests.patch(repository_invite.get('url'), json.dumps({'accept': True}))
    print('result: ' + str(result.json()))

这回馈:

result: {'message': 'Invalid request.\n\n"accept" is not a permitted key.', 'documentation_url': 'https://developer.github.com/v3'}

python-3.x python-requests github-api
2个回答
5
投票

为了调用 API 端点,您需要对 Github 用户进行身份验证,并且需要发送

Patch
调用(如果需要,可以获取数据/标头)。这是一个工作示例:

for repository_invite in repository_invites:
    repository_id = repository_invite.get('id')
    accept_invite = requests.patch('https://api.github.com/user/repository_invitations/'+ str(repository_id), 
            data={}, headers={},
            auth=HTTPBasicAuth(github_username, github_password))

如果没有身份验证,

Patch
调用将返回 404 响应代码,因为出于明显的安全目的,只能在登录后访问它。如果您拨打端点
user/repository_invitations/
并输入 ID,Github 将自动接受邀请。


0
投票

这是我使用 gh cli 的方法:

gh api user/repository_invitations | jq .[].id | each "p `gh api --method=PATCH user/repository_invitations/#{it}`"

它列出了所有邀请,获取邀请 ID,并为每个邀请 ID 发出接受邀请的请求

© www.soinside.com 2019 - 2024. All rights reserved.