GitHub API 限制
GitHub API limit
我有一个网站 iOS Cookies,我将用 Swift 编写的库(目前有 190 个)分类。显示类别时,我会显示它的库列表,其中包含 GitHub 星数和描述。
由于星星的数量不必准确,我决定使用 CRON 作业(每天一次)一次为每个图书馆获取它。问题是我出于某种原因达到了 API 限制:
You have reached GitHub hour limit! Actual limit is: 5000
这很奇怪,因为只有不到 200 个库,而且每个库只调用一次,如下所示:
// GitHub API
$this->github = new GitHub($page);
// list of libraries stored in .yaml file
$libraries = $this->config->get('plugins.swift-version.libraries');
$arrlength = count($libraries);
$array = Array();
for($x = 0; $x < $arrlength; $x++) {
$link = $libraries[$x]['link'];
$path = parse_url($link, PHP_URL_PATH);
$segments = explode('/', $path);
$author = $segments[1];
$repo = $segments[2];
// actual API calling to get number of stars for library
$libraries[$x]['stargazers_count'] = $this->github->client->api('repo')->show($author, $repo)['stargazers_count'];
}
我是不是漏掉了什么?
为了省去编写完整 API 客户端的麻烦,也因为该客户端在我的 to-do 列表中,所以我需要试用 github API 无论如何,这是一个快速而肮脏的例子,它恰好使用了一个 API 请求:
$url = "https://api.github.com/repos/realm/realm-cocoa";
$token = /* https://github.com/settings/tokens */;
$headers = [
'Authorization: token ' . $token,
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0',
]);
$foo = json_decode(curl_exec($ch), true);
curl_close($ch);
var_dump($foo['description'], $foo['stargazers_count']);
输出:
string(64) "Realm is a mobile database: a replacement for Core Data & SQLite"
int(5888)
我有一个网站 iOS Cookies,我将用 Swift 编写的库(目前有 190 个)分类。显示类别时,我会显示它的库列表,其中包含 GitHub 星数和描述。
由于星星的数量不必准确,我决定使用 CRON 作业(每天一次)一次为每个图书馆获取它。问题是我出于某种原因达到了 API 限制:
You have reached GitHub hour limit! Actual limit is: 5000
这很奇怪,因为只有不到 200 个库,而且每个库只调用一次,如下所示:
// GitHub API
$this->github = new GitHub($page);
// list of libraries stored in .yaml file
$libraries = $this->config->get('plugins.swift-version.libraries');
$arrlength = count($libraries);
$array = Array();
for($x = 0; $x < $arrlength; $x++) {
$link = $libraries[$x]['link'];
$path = parse_url($link, PHP_URL_PATH);
$segments = explode('/', $path);
$author = $segments[1];
$repo = $segments[2];
// actual API calling to get number of stars for library
$libraries[$x]['stargazers_count'] = $this->github->client->api('repo')->show($author, $repo)['stargazers_count'];
}
我是不是漏掉了什么?
为了省去编写完整 API 客户端的麻烦,也因为该客户端在我的 to-do 列表中,所以我需要试用 github API 无论如何,这是一个快速而肮脏的例子,它恰好使用了一个 API 请求:
$url = "https://api.github.com/repos/realm/realm-cocoa";
$token = /* https://github.com/settings/tokens */;
$headers = [
'Authorization: token ' . $token,
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0',
]);
$foo = json_decode(curl_exec($ch), true);
curl_close($ch);
var_dump($foo['description'], $foo['stargazers_count']);
输出:
string(64) "Realm is a mobile database: a replacement for Core Data & SQLite"
int(5888)