2012-02-11 75 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