Note: 通过 GitHub API 拿 GitHub README

649 查看

下午更新了 http://cirru.org , 整个页面的文档都是通过抓 GitHub README 生成的,

已经失效的直接 GET 的方法

抓 READMD 原来是有个简单的思路, 通过 HTTP 请求直接拿 raw 的文件,
比如 cirru.org 项目的 README 文件, 原来的网址是这样的:
https://github.com/Cirru/cirru.org/blob/master/README.md
页面上代码右上角又个 raw 的链接, 可以获取纯文本的内容:
https://raw.githubusercontent.com/Cirru/cirru.org/master/README.md
不过这个链接做了跨域限制, 不能直接用...

我记得早先的网址, 其实更短一些, 是这样的:
https://raw.github.com/Cirru/cirru.org/master/README.md
这个网址的特别之处在于, 通过去掉两个字母可以获得允许直接调用的网址:
http://rawgithub.com/Cirru/cirru.org/master/README.md
不知什么缘故, 这个网址现在是个重定向, 内容有拿不到了

通过 GitHub API

通过查文档, 确认 GitHub 是有获取 README 的 API 的:
http://developer.github.com/v3/repos/contents/#get-the-readme

GET /repos/:owner/:repo/readme

不过网址没明确写, 搜索加猜测找到网站是这样的:
https://api.github.com/repos/Cirru/cirru.org/readme

从返回结果看, 里边没有 README 的文本内容, 而是包含一段 base64 字符,
搜索可以知道 JS 里可以通过 atob 函数进行解码:
https://developer.mozilla.org/en-US/docs/Web/API/Window.atob
于是, 就能够通过获取 README 真实的文本内容了.

两个注意的地方

GitHub API 单个 IP 的访问数量存在限制, 需要通过注册应用来解决:
https://github.com/settings/applications/
具体做法是在请求的 url 后面加上注册好的 key
http://developer.github.com/v3/#oauth2-keysecret

$ curl 'https://api.github.com/users/whatever?client_id=xxxx&client_secret=yyyy'

(我图方便直接在网页上使用了, 可能存在问题...)

另一个是我使用中发现非 ASCII 的字符, 比如国际音标, 显示为乱码
估计是 base64 编码过程的问题, 我没想到好的办法..
中文没有测试, 估计也会出现问题...
我发了对应的问题,: http://segmentfault.com/q/1010000000451621