@aboveyou00/github 中文文档教程
node-github
GitHub API 的 Node.js 包装器。
Installation
通过 npm 安装。
npm install github
或者通过 git clone 安装:
git clone https://github.com/octokit/node-github
cd node-github
npm install
Documentation
客户端 API:octokit.github.io/node-github GitHub API:developer.github.com/v3
Example
获取用户“defunkt”的所有关注者:
var GitHubApi = require('github')
var github = new GitHubApi({
// optional
debug: true,
Promise: require('bluebird'),
timeout: 5000,
host: 'github.my-GHE-enabled-company.com', // should be api.github.com for GitHub
pathPrefix: '/api/v3', // for some GHEs; none for GitHub
protocol: 'https',
port: 9898,
proxy: '<proxyUrl>',
ca: 'whatever',
headers: {
'accept': 'application/vnd.github.something-custom',
'cookie': 'something custom',
'user-agent': 'something custom'
},
requestMedia: 'application/vnd.github.something-custom',
followRedirects: false, // default: true; there's currently an issue with non-get redirects, so allow disabling follow-redirects
rejectUnauthorized: false, // default: true
family: 6
})
// TODO: optional authentication here depending on desired endpoints. See below in README.
github.users.getFollowingForUser({
// optional
// headers: {
// "cookie": "blahblah"
// },
username: 'defunkt'
}, function (err, res) {
if (err) throw err
console.log(JSON.stringify(res))
})
Pagination
有一些与分页相关的方法:
hasNextPage(link)
hasPreviousPage(link)
hasFirstPage(link)
hasLastPage(link)
getNextPage(link, headers, callback)
getPreviousPage(link, headers, callback)
getFirstPage(link, headers, callback)
getLastPage(link, headers, callback)
NOTE: link is the response object or the contents of the Link header
Authentication
大多数 GitHub API 调用不需要身份验证。 根据经验:如果您可以在未登录的情况下通过访问该站点来查看信息,则您无需经过身份验证即可通过 API 检索相同的信息。 当然,更改数据或读取敏感信息的调用必须经过身份验证。
您需要 GitHub 用户名和 API 密钥进行身份验证。 API 密钥可以在用户的帐户设置中找到。
// basic
github.authenticate({
type: 'basic',
username: process.env.USERNAME,
password: process.env.PASSWORD
})
// oauth
github.authenticate({
type: 'oauth',
token: process.env.AUTH_TOKEN
})
// oauth key/secret (to get a token)
github.authenticate({
type: 'oauth',
key: process.env.CLIENT_ID,
secret: process.env.CLIENT_SECRET
})
// user token
github.authenticate({
type: 'token',
token: 'userToken'
})
// integration (jwt)
github.authenticate({
type: 'integration',
token: 'jwt'
})
// ~/.netrc
github.authenticate({
type: 'netrc'
})
注意:authenticate
是同步的,因为它只存储 下一个请求的凭据。
Creating a token for your application
- Use github.authenticate() to authenticate with GitHub using your username / password.
- Create an application token programmatically with the scopes you need and, if you use two-factor authentication send the
X-GitHub-OTP
header with the one-time-password you get on your token device.
github.authorization.create({
scopes: ['user', 'public_repo', 'repo', 'repo:status', 'gist'],
note: 'what this auth is for',
note_url: 'http://url-to-this-auth-app',
headers: {
'X-GitHub-OTP': 'two-factor-code'
}
}, function (err, res) {
if (err) throw err
if (res.token) {
// save and use res.token as in the Oauth process above from now on
}
})
Create test auth file
为运行测试/示例创建测试授权文件。
$ > testAuth.json
{
"token": "<TOKEN>"
}
Promises
要使用 bluebird,请参阅此处。 要使用 Q,请参阅此处。
Tests
运行所有测试
$ npm test
或运行特定测试
$ npm test test/issuesTest.js
Preview APIs
预览 API 的接受标头应在幕后处理,但如果预览端点无法正常工作,请参阅 此处 有关如何添加所需的自定义接受标头的示例。
有关预览中端点的更新,请参阅 https://developer.github.com/changes/。
Preview API | Accept header val |
---|---|
Blocking Users | application/vnd.github.giant-sentry-fist-preview+json |
Codes of Conduct | application/vnd.github.scarlet-witch-preview+json |
Commit Search | application/vnd.github.cloak-preview+json |
Community | application/vnd.github.black-panther-preview+json |
Deployment | application/vnd.github.ant-man-preview+json |
Git signing | application/vnd.github.cryptographer-preview |
Imports | application/vnd.github.barred-rock-preview |
Integrations | application/vnd.github.machine-man-preview |
License | application/vnd.github.drax-preview+json |
Marketplace | application/vnd.github.valkyrie-preview+json |
Migrations | application/vnd.github.wyandotte-preview+json |
Nested Teams | application/vnd.github.hellcat-preview+json |
Pages | application/vnd.github.mister-fantastic-preview |
Pre-receive | application/vnd.github.eye-scream-preview |
Projects | application/vnd.github.inertia-preview+json |
Pull Request Squash | application/vnd.github.polaris-preview |
Reactions | application/vnd.github.squirrel-girl-preview |
Review Requests | application/vnd.github.thor-preview+json |
Star Creation Timestamp | application/vnd.github.v3.star+json |
Timeline | application/vnd.github.mockingbird-preview |
Topics | application/vnd.github.mercy-preview+json |
Dev notes
更新 github 页面的 apidoc:
$ npm install apidoc -g
$ apidoc -i doc/ -o apidoc/
提醒一下,因为 ad-hoc 过滤器被添加到 apidoc,所以不要覆盖 index.html、main.js。
LICENSE
麻省理工学院执照。 有关详细信息,请参阅许可证文件。
node-github
A Node.js wrapper for GitHub API.
Installation
Install via npm.
npm install github
or install via git clone:
git clone https://github.com/octokit/node-github
cd node-github
npm install
Documentation
Client API: octokit.github.io/node-github GitHub API: developer.github.com/v3
Example
Get all followers for user "defunkt":
var GitHubApi = require('github')
var github = new GitHubApi({
// optional
debug: true,
Promise: require('bluebird'),
timeout: 5000,
host: 'github.my-GHE-enabled-company.com', // should be api.github.com for GitHub
pathPrefix: '/api/v3', // for some GHEs; none for GitHub
protocol: 'https',
port: 9898,
proxy: '<proxyUrl>',
ca: 'whatever',
headers: {
'accept': 'application/vnd.github.something-custom',
'cookie': 'something custom',
'user-agent': 'something custom'
},
requestMedia: 'application/vnd.github.something-custom',
followRedirects: false, // default: true; there's currently an issue with non-get redirects, so allow disabling follow-redirects
rejectUnauthorized: false, // default: true
family: 6
})
// TODO: optional authentication here depending on desired endpoints. See below in README.
github.users.getFollowingForUser({
// optional
// headers: {
// "cookie": "blahblah"
// },
username: 'defunkt'
}, function (err, res) {
if (err) throw err
console.log(JSON.stringify(res))
})
Pagination
There are a few pagination-related methods:
hasNextPage(link)
hasPreviousPage(link)
hasFirstPage(link)
hasLastPage(link)
getNextPage(link, headers, callback)
getPreviousPage(link, headers, callback)
getFirstPage(link, headers, callback)
getLastPage(link, headers, callback)
NOTE: link is the response object or the contents of the Link header
See here and here for examples.
Authentication
Most GitHub API calls don't require authentication. As a rule of thumb: If you can see the information by visiting the site without being logged in, you don't have to be authenticated to retrieve the same information through the API. Of course calls, which change data or read sensitive information have to be authenticated.
You need the GitHub user name and the API key for authentication. The API key can be found in the user's Account Settings.
// basic
github.authenticate({
type: 'basic',
username: process.env.USERNAME,
password: process.env.PASSWORD
})
// oauth
github.authenticate({
type: 'oauth',
token: process.env.AUTH_TOKEN
})
// oauth key/secret (to get a token)
github.authenticate({
type: 'oauth',
key: process.env.CLIENT_ID,
secret: process.env.CLIENT_SECRET
})
// user token
github.authenticate({
type: 'token',
token: 'userToken'
})
// integration (jwt)
github.authenticate({
type: 'integration',
token: 'jwt'
})
// ~/.netrc
github.authenticate({
type: 'netrc'
})
Note: authenticate
is synchronous because it only stores the credentials for the next request.
Creating a token for your application
- Use github.authenticate() to authenticate with GitHub using your username / password.
- Create an application token programmatically with the scopes you need and, if you use two-factor authentication send the
X-GitHub-OTP
header with the one-time-password you get on your token device.
github.authorization.create({
scopes: ['user', 'public_repo', 'repo', 'repo:status', 'gist'],
note: 'what this auth is for',
note_url: 'http://url-to-this-auth-app',
headers: {
'X-GitHub-OTP': 'two-factor-code'
}
}, function (err, res) {
if (err) throw err
if (res.token) {
// save and use res.token as in the Oauth process above from now on
}
})
Create test auth file
Create test auth file for running tests/examples.
$ > testAuth.json
{
"token": "<TOKEN>"
}
Promises
For using bluebird, see here. For using Q, see here.
Tests
Run all tests
$ npm test
Or run a specific test
$ npm test test/issuesTest.js
Preview APIs
Accept headers for the preview APIs should be taken care of behind the scenes, but in the event a preview endpoint isn't working, see here for an example on how to add the required custom accept header.
For updates on endpoints under preview, see https://developer.github.com/changes/.
Preview API | Accept header val |
---|---|
Blocking Users | application/vnd.github.giant-sentry-fist-preview+json |
Codes of Conduct | application/vnd.github.scarlet-witch-preview+json |
Commit Search | application/vnd.github.cloak-preview+json |
Community | application/vnd.github.black-panther-preview+json |
Deployment | application/vnd.github.ant-man-preview+json |
Git signing | application/vnd.github.cryptographer-preview |
Imports | application/vnd.github.barred-rock-preview |
Integrations | application/vnd.github.machine-man-preview |
License | application/vnd.github.drax-preview+json |
Marketplace | application/vnd.github.valkyrie-preview+json |
Migrations | application/vnd.github.wyandotte-preview+json |
Nested Teams | application/vnd.github.hellcat-preview+json |
Pages | application/vnd.github.mister-fantastic-preview |
Pre-receive | application/vnd.github.eye-scream-preview |
Projects | application/vnd.github.inertia-preview+json |
Pull Request Squash | application/vnd.github.polaris-preview |
Reactions | application/vnd.github.squirrel-girl-preview |
Review Requests | application/vnd.github.thor-preview+json |
Star Creation Timestamp | application/vnd.github.v3.star+json |
Timeline | application/vnd.github.mockingbird-preview |
Topics | application/vnd.github.mercy-preview+json |
Dev notes
To update the apidoc for github pages:
$ npm install apidoc -g
$ apidoc -i doc/ -o apidoc/
Just a reminder, since an ad-hoc filter was added to the apidoc, don't overwrite index.html, main.js.
LICENSE
MIT license. See the LICENSE file for details.