我在写blog的时候用到的github api接口
https://aisen60.now.sh/#/posts/4
No.1
申请token
如果没有任何授权直接访问的话,单IP每小时只能有60次的请求。如果授权了的话,每小时可达到5000次的请求。
文档还介绍了,在响应头response headers中返回了X-RateLimit-Limit和X-RateLimit-Remaining。这2个字段分别代表着当前剩余的访问次数和当前每小时限次。
如果想要获得更多的访问次数以及更大的限次,可以申请token来解决。下面是我在做blog的时候用到的授权方式,OAuth2 token。
申请token步骤
进入github,个人设置页面,Personal settings。
点击左侧菜单栏最下方,Developer settings。
点击个人token,Personal access tokens
点击创建一个新的toekn,Generate new token
输入github密码,进入到创建token页面,输入token名称,勾选权限。(如果只是做blog的话,个人建议还是只勾选读取的权限。)
输入完token名称、勾选完权限后,点击Generate token就可以了,这样token就创建好了。创建成功后,一定要保存这个token,github默认只会给你看一次这个token,下次打开页面或者刷新页面这个token就不见了。如果忘记了可以重新生成一个新的token。
token的注意事项
token的权限,如果只是做blog的话,像我这样,建议只设置读取的权限。在勾选权限的时候会有可选的,如果你全部都勾选了,一旦这个token暴露了,被别人知道了,别人就可以拿这个token调用相关的api把你的所有东西都修改或者直接删掉repo了。
token字符串不能提交到github仓库里面,如果你提交了,github会把你这个token删掉。我试过几次,把token提交到github的repo上,github就给我邮箱发了邮件,那个邮件的意思大概说是不能暴露这个token。那请求github api的时候要用到这个token,怎么办?我的做法是,把这个token拆分成数组,然后使用过的时候直接拼接起来。当然了有很多方法,主要不完全暴露就行。
使用token 请求github api接口的时候,放在请求头上就可以了。官网是这样介绍的
No.2
我使用到的api
GET
https://api.github.com/users/:username
获取个人用户信息
GET
https://api.github.com/users/:username/repos
获取当前用户所有的仓库
GET
https://api.github.com/repos/:username/:repos/labels
获取某个仓库下的所有标签
GET
https://api.github.com/repos/:username/:repos/issues
获取某个仓库下的所有issues
GET
https://api.github.com/repos/:username/:repos/issues?state=状态
获取issues状态,open打开,close关闭。
GET
https://api.github.com/repos/:username/:repos/issues?labels=标签名
获取指定标签的所有issues。
GET
https://api.github.com/repos/:username/:repos/issues?page=页数&per_page=每页包含数量
分页功能,获取指定的issues数量。
GET
https://api.github.com/repos/:username/:repos/issues/: issue_number根据issues的
number获取详情
GET
https://api.github.com/repos/:username/:repos/contents/:path 获取一个原始文件的内容。
application/vnd.github.VERSION.html就能返回可直接渲染的html文本了。如果不加这句话,会返回以下的格式 :
{
"name": "timeline.md",
"path": "timeline.md",
"sha": "1f45c2bf90e5362fb11c7f069ea995a398412a04",
"size": 1709,
"url": "https://api.github.com/repos/Aisen60/blog/contents/timeline.md?ref=master",
"html_url": "https://github.com/Aisen60/blog/blob/master/timeline.md",
"git_url": "https://api.github.com/repos/Aisen60/blog/git/blobs/1f45c2bf90e5362fb11c7f069ea995a398412a04",
"download_url": "https://raw.githubusercontent.com/Aisen60/blog/master/timeline.md",
"type": "file",
"content": "IyDwn5K76YeM56iL56KRCgojIyMjIyAyMDIwLTA0LTA5IDAwOjAwOjAxCi0g\n5re75Yqg5LqGIFvmiJHlnKjlhplibG9n55qE5pe25YCZ55So5Yiw55qEZ2l0\naHViIGFwaeaOpeWPo++8iOayoeWGmeWujO+8iV0oaHR0cHM6Ly9naXRodWIu\nY29tL0Fpc2VuNjAvYmxvZy9pc3N1ZXMvNCkKCiMjIyMjIDIwMjAtMDQtMDcg\nMjI6NTI6MDAKCi0g5LuK5aSp5oqKdGltZWxpbmXpobXpnaLlgZrkuobvvIzl\ngZrov5nkuKp0aW1lbGluZeeahOaXtuWAme+8jOiwg+eUqGdpdGh1YueahOaO\npeWPo+S8muaKpei3qOWfn+mXrumimOeahOmUmeivr++8jOWQjuadpeWPkeeO\nsOiwg+eUqOmUmeaOpeWPo+S6hu+8jOeEtuWQjuWcqOiKseWcqOino+Wvhuea\nhOaXtumXtOS4iuavlOi+g+Wkmu+8jOWGjeWQjuadpeagueacrOWwseS4jeeU\nqOino+Wvhu+8jOWumOaWueacieaWh+aho+OAggoKLSDnlLHkuo7miJHnmoTp\nmL/ph4zkupHmnI3liqHlmajmmK/lm73lhoXnmoTvvIzorr/pl65naXRodWLl\nvojkuI3nqLPlrprvvIznhLblkI7miJHlsLHnlKjkuoZub3cuc2jmnaXpg6jn\nvbLvvIzpgJ/luqbnm7jlr7nmnaXor7Tov5jov4flvpfljrvjgIJibG9nLXZ1\nZeWcsOWdgO+8mltodHRwczovL2Fpc2VuNjAubm93LnNoXShodHRwczovL2Fp\nc2VuNjAubm93LnNoKQoKIyMjIyMgMjAyMC0wNC0wNCAyMjoxMzowMAoKLSBi\nbG9nLXZ1ZSDlgZrlrozkuobvvIzlnKjmuIXmmI7lgYfmnJ/mlL7lgYfnrKzk\nuIDlpKnvvIzmiopibG9n5Ymp5LiL55qE5Lic6KW/6YO95YGa5LqG77yM5YyF\n5ousbmdpbnjnmoTvvIzlnKjlronoo4VuZ2lueOeahOaXtuWAme+8jOi4qeS6\nhuS4gOS6m+Wdke+8jOiKseS6huWkp+amgjLkuKrlsI/ml7bnoJTnqbbkuobk\nuIvvvIznrpfmmK/op6PlhrPkuobvvIzljp/mnaXmmK/ot6/lirLnmoTpl67p\nopjvvIzlrrPmiJHph43oo4XkuoYy5qyh57O757uf44CC6L+Y6ZyA6KaB6Iqx\n5pe26Ze06Kej5Yaz5LiA5LiL77yM6LCD5LyY6Zeu6aKY77yM6L+Y5pyJYWJv\ndXQgbWXjgIF0aW1lbGluZeebruW9leayoeWBmuOAguOAgn5+YmxvZy12dWXl\nnLDlnYDvvJpbaHR0cDovL2Jsb2cuY2FpeHVzaGVuZy5jb21dKGh0dHA6Ly9i\nbG9nLmNhaXh1c2hlbmcuY29tKeOAgn5+CgojIyMjIyAyMDIwLTAzLTIzIDIz\nOjU4OjAwCgotIOWIm+W7uuS6hmJsb2ctdnVl6L+Z5Liq5LuT5bqT77yM5bm2\n5LiU5Yid5aeL5YyW5LqG6aG555uu44CC55yL5LqG5LiA5LiLZ2l0aHViIGFw\naeeahOaOpeWPo++8jOacieW/heimgeS6huino+S4gOS4i++8jOS8muWGmeS4\nquWmguS9leS9v+eUqGdpdGh1YiBhcGnnmoTlrabkuaDnrJTorrAg44CCCgoj\nIyMjIyAyMDIwLTAzLTIyIDIyOjMwOjAwCgotIOS7k+W6k+WIm+W7uuWlveS6\nhizkuYvliY3mmK/lnKhbaHR0cHM6Ly9naXRodWIuY29tL0Fpc2VuNjAvYWlz\nZW42MC5naXRodWIuaW9dKGh0dHBzOi8vZ2l0aHViLmNvbS9BaXNlbjYwL2Fp\nc2VuNjAuZ2l0aHViLmlvKeWGmeS4gOS6m+aWh+eroOaIluiAheWtpuS5oOes\nlOiusOeahO+8jOWQjuadpeWPiOWIsOS6huiHquW3seWOu+WcqOaciemBk+S6\nkeeslOiusOS4iuWGmeeslOiusO+8jOmDveaYr+S4gOS6m+mbtumbtueijuei\njueahOS4nOilv++8jOi/meWHoOWkqeS8muaAu+e7k+S4gOS6m+i/geenu+i/\nh+adpe+8jOS8sOiuoei/meS4quaciOaciOW6leS8muWHuuS4quWNmuWuoumm\nlumhte+8jOesrOS4gOeJiOaJk+eul+WFiOeUqHZ1ZeadpeWunueOsOOAggo=\n",
"encoding": "base64",
"_links": {
"self": "https://api.github.com/repos/Aisen60/blog/contents/timeline.md?ref=master",
"git": "https://api.github.com/repos/Aisen60/blog/git/blobs/1f45c2bf90e5362fb11c7f069ea995a398412a04",
"html": "https://github.com/Aisen60/blog/blob/master/timeline.md"
}
}
我一开始就是用这种decodeURIComponent(escape(window.atob(content)));来解密的拿到原始内容,这个content是通过base64加密的,后来查阅了一些资料和官方文档,直接在request headers上加上这句话Accept:application/vnd.github.VERSION.html就能返回可渲染的html内容。
这是朋友(aisen)的一个个人博客的其中一篇文章,里面有很多他写的个人前端经验,有兴趣的可以收藏一下
https://aisen60.now.sh/#/issues/All
更多前端分享,请关注:
前端路人甲