2016-01-04 63 views
0

我有网站iOS Cookies在哪里我把用Swift编写的库(当前为190)分为几类。当显示类别时,我将显示具有多个GitHub星号和说明的库的列表。GitHub API限制

由于这些明星数量并不一定准确,我决定一次性使用CRON工作(每天一次)为每个图书馆购买。问题是我由于某种原因正在达到API限制:

您已达到GitHub小时限制!实际限制是: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'];  
} 

我缺少的东西?

+3

只是因为你只能调用'Github'对象上的一个功能,并不意味着它只会让一个API调用。尝试将其分成两个或更多更小的作业,并安排它们运行一小时以保持API限制。或者找到一个更高效的API客户端。或者编写你自己的API客户端。 – Sammitch

+0

噢,好的。说得通。我会尝试写我自己的客户端。 –

+2

特别是在客户端的自动分页可以轻松超过你的限制。除了防止不必要的呼叫之外,还有一种方法可以提高未认证呼叫的速率限制。 https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications – iltempo

回答

1

为了节省您编写完整的API客户端的麻烦,也因为该客户端在我的待办事项列表中,所以我需要尝试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) 
+0

很好用!谢谢 –