簡體   English   中英

如何使用github-api在github中下載拉取請求的補丁

[英]how to download patch for pull request in github using github-api

我正在嘗試編寫一個腳本,將給定回購協議的所有打開的“拉取請求”下載到文件名為“.patch”的文件夾中。

我正在使用https://pypi.org/project/ghapi/

我已經能夠登錄並獲取打開的拉取請求列表以及應該用於獲取補丁的 url。

但是我沒有找到可以直接下載補丁的API。

如果 repo 是公共倉庫,我可以使用“請求”package 直接下載它。 但是我的回購是私人的,因此需要身份驗證。

這是我的示例代碼

from ghapi.core import GhApi
import requests

github_token=<my token>
api=GhApi(owner=<my-org>, repo=<my-repo>,token=github_token )

for (pr_number,patch_url) in map(lambda pr: (pr['number'], pr['patch_url']), api.pulls.list(state="open", per_page=100, page=1 )):
    print(pr_number, patch_url)
    r=requests.get(patch_url, headers={'Authorization':'token '+github_token})
    open("%d.patch"%(pr_number),'wb').write(r.content)

如果我遺漏了什么,有人可以告訴我嗎? 我不斷收到上面的“未找到”。 但是,如果我直接從瀏覽器打開 URL,我可以看到補丁。

謝謝

api.pulls.list(...)返回的patch_url屬性不是 API url; 您可以分辨出來,因為它不包含 API 端點 ( api.github.com )。 這意味着它不支持使用 API 令牌進行身份驗證。 它旨在呈現給用戶並在瀏覽器中獲取。

如果您想通過 API 獲取補丁格式的拉取請求,您需要使用特定的內容類型獲取拉取請求:

for pull in api.pulls.list(state="open", per_page=100, page=1):
    patch = api(pull.url, headers={"Accept": "application/vnd.github.patch"})
    print(patch)

api 文檔顯示了在獲取拉取請求時可以使用的內容類型。


警告,因為我發現了困難的方法:雖然requests模塊正確地將標頭視為不區分大小寫(因此acceptAccept相同),但ghapi模塊不會。 覆蓋Accept header 時,您必須使用與模塊使用的相同的大寫字母。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM