2012-02-11 55 views
7

GitHub有一個jsonp api文件的來源嗎?我知道BitBucket有,但我找不到GitHubs的任何信息(假設他們有一個)。GitHub jsonp源代碼api

他們不是嗎?如果沒有,那麼無賴...

回答

0

我不認爲GitHub有一個API來提取文件的來源。他們有JSONP回調,雖然通過任何API調用後指定回調=功能可按(即curl https://api.github.com?callback=foo

你也許可以使用Trees API找到存在於存儲庫中的源文件在某個提交(頭主分支)。然後,你可以使用的URL文件的原始版本獲取源(即https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/directories.zsh

3

一個在GitHub API documentation指出,任何呼叫支持JSONP invokation模式:

你可以向任何GET調用發送參數?callback以將結果包裝在JSON函數中。這通常用於瀏覽器通過解決跨域問題來將GitHub內容嵌入到網頁中。響應包含與常規API相同的數據輸出,以及相關的HTTP標頭信息。

如果爲了檢索文件的電流源(或它的任何版本),你必須要麼知道它被存儲在BlobSHA。見Git Database API有關此的詳細信息話題。

通常情況下,人們不知道SHA,但只知道工作目錄中文件的相對路徑。

那麼你就必須遵循以下步驟

從列表中選擇

找回它指向的樹和遞歸地列出每個條目(樹木和斑點)

找到你的斑點匹配的搜索路徑,找出其SHA和應用第一過程

+0

這是SOOO有幫助!謝謝!! – 2012-06-14 21:07:03

8

有一個API來獲取數據的內容來自github。它是v3 github API的一部分。

您對

https://api.github.com/repos/{username}/{repository name}/contents/{filepath and name} 

例如請求https://api.github.com/repos/mono/monodevelop/contents/README

除非你設定的接受頭,你會收到一些JSON用base64編碼的文件內容。您必須對此進行解碼,這在node.js中非常簡單,但在瀏覽器中更加痛苦。你可以在其他問題上很容易地找到javascript中的base64解碼器。有一點要注意,以base64編碼你從GitHub回到中有換行符,使其很好地格式化和許多的base64解碼器無法應對新行,所以你可能需要將其刪除或修改解碼器。

您可能只是想要內容而不需要json中的其他內容(如sha和長度等),因此您可以通過將Accept標頭設置爲application/vnd.github.3.raw來使您的生活更輕鬆。

下面是一個例子使用捲曲接受頭:

curl -i https://api.github.com/repos/mono/monodevelop/contents/README --header "Accept: application/vnd.github.3.raw" 

現在,如果你使用的節點或捲曲,這可能是好的,但如果你在瀏覽器中運行,要做到這一點,你需要使用CORS。 Github只允許註冊爲OAuth應用程序的主機訪問。這樣做並不是特別困難,但對於我的用例(書庫)來說,這不是一個選項。

有一種方式來獲得,而無需使用CORS訪問,這是JSONP,你可以添加例如?callback=_processGithubResponse來獲取適合包括腳本標記(即呼叫被叫_processGithubResponse與響應函數)的JavaScript輸出。不幸的是,你不能設置接受頭,所以你在這種情況下堅持解碼base64。

如果使用Node.js的,我會建議你使用node-github這使得API稍微更容易使用。

+0

不適用於當前版本的api – rakesh 2017-05-13 08:44:21