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

8
我正在查看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接受邀请,其中提到:

PATCH /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'}


我在这里遇到了类似的错误,无论是 X 不是允许的键还是如果没有正文,则对于“links/1/schema”,[] 不是 null 或对象。-- 你确定只是权限问题吗?我可以使用删除而不是补丁来取消邀请,所以我不确定权限是否是问题。任何帮助都将不胜感激。 - ejntaylor
简而言之:发送一个没有主体的 PATCH 请求(但在标头中带有正确的凭据)。 - Janaka Bandara
1个回答

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/并跟随Github的ID邀请,Github将自动接受邀请。


我要补充的是,如果您正在使用个人访问令牌进行身份验证,则必须授予repo:invite权限才能代表用户接受邀请。 - Brendan Forster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接