GitHub jsonp源代码api

Pau*_*opf 8 jsonp github

GitHub有一个jsonp api作为文件的来源吗?我知道BitBucket有,但我找不到GitHubs的任何信息(假设他们有一个).

他们不是吗?如果没有,那么真可惜......

kyb*_*kos 12

有一个API可以从github获取数据的内容.它是v3 github API的一部分.

你提出要求

https://api.github.com/repos/{username}/{repository name}/contents/{filepath and name}
Run Code Online (Sandbox Code Playgroud)

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

除非您设置了接受标头,否则您将收到一些带有以base64编码的文件内容的JSON.你必须解码这个,这在node.js中非常简单,但更多的是浏览器的痛苦.你可以很容易地在stackoverflow上的其他问题中找到javascript中的base64解码器.需要注意的一点是,从github返回的base64代码中包含换行符以使其格式化,并且许多base64解码器无法处理换行符,因此您可能需要删除它们或修改解码器.

您可能只是想要内容而不需要json中的其他内容(例如sha和length等),因此您可以通过将Accept标头设置为更轻松application/vnd.github.3.raw.

这是使用curl的接受标头的示例:

curl -i https://api.github.com/repos/mono/monodevelop/contents/README --header "Accept: application/vnd.github.3.raw"
Run Code Online (Sandbox Code Playgroud)

现在,如果您正在使用节点或卷曲,那可能没问题,但如果您在浏览器中运行,那么您需要使用CORS.Github仅允许从注册为OAuth应用程序的主机进行访问.这样做并不是特别困难,但对于我的用例(书店),这不是一个选择.

有一种方法可以在不使用CORS的情况下访问,也就是使用JSONP,您可以添加例如?callback=_processGithubResponse以获得适合包含脚本标记的javascript输出(使用响应调用名为_processGithubResponse的函数).不幸的是,你不能在那上设置一个接受标头,所以你在这种情况下坚持使用解码base64.

如果您使用的是node.js,我建议您使用node-github,这会使API更容易使用.


Kev*_*ert 0

我认为 GitHub 没有用于提取文件源的 API。他们确实有 jsonp 回调,但通过在任何 API 调用后指定callback=funciton(即curl https://api.github.com?callback=foo

您可以使用Trees API 来查找存储库中某个提交(主分支的 HEAD)处存在的源文件。然后,您可以使用文件原始版本的 URL 获取源代码(即https://raw.github.com/robbyrussell/oh-my-zsh/master/lib/directories.zsh