API Github Список всех репозиториев и контента репо
Если бы я должен был показывать только мои репозитории github и их содержимое на внешнем веб-сайте, как бы я это сделал? Есть ли какой-либо исходный код, который вы можете мне предоставить, если не указать мне в правильном направлении? Я новичок в программировании, поэтому любая помощь ценится. Всем спасибо.
Взглянув на их веб-сайт
Я просмотрел соответствующие ссылки, но до сих пор не знаю, как бы это сделать.
-Github Перечислить все репо
-Github Перечислить все содержимое репо
Ответы
Ответ 1
все предыдущие ответы велики. однако, если вы ищете быстрый и грязный пример того, как получить список общедоступных репозиториев, проверьте мою jsfiddle.
который использует этот вызов ajax для отображения всех публичных репозиций пользователей:
$("#btn_get_repos").click(function() {
$.ajax({
type: "GET",
url: "https://api.github.com/users/google/repos",
dataType: "json",
success: function(result) {
for(var i in result ) {
$("#repo_list").append(
"<li><a href='" + result[i].html_url + "' target='_blank'>" +
result[i].name + "</a></li>"
);
console.log("i: " + i);
}
console.log(result);
$("#repo_count").append("Total Repos: " + result.length);
}
});
});
чтобы увидеть, какие данные будут возвращены, просто проверьте консоль после нажатия кнопки или вы можете установить расширение Google Chromes JSONView, а затем просто посетить URL-адрес, который делает запрос ajax, т.е. https://api.github.com/users/google/repos
Ответ 2
Все эти примеры так же, как псевдо без "аутентификации", и вы можете улучшить их самостоятельно, как вам нравится;
<?php
// a simple way to get a user repo
$res = file_get_contents("https://api.github.com/repos/qeremy/mii");
$res = json_decode($res);
print_r($res);
?>
stdClass Object
(
[language] => JavaScript
[merges_url] => https://api.github.com/repos/qeremy/mii/merges
[contributors_url] => https://api.github.com/repos/qeremy/mii/contributors
[assignees_url] => https://api.github.com/repos/qeremy/mii/assignees{/user}
[url] => https://api.github.com/repos/qeremy/mii
[description] => Multipurpose JavaScript Library
[ssh_url] => [email protected]:qeremy/mii.git
[comments_url] => https://api.github.com/repos/qeremy/mii/comments{/number}
[statuses_url] => https://api.github.com/repos/qeremy/mii/statuses/{sha}
[keys_url] => https://api.github.com/repos/qeremy/mii/keys{/key_id}
...
<?php
// getting a repo README
$res = file_get_contents("https://api.github.com/repos/qeremy/mii/readme");
$res = json_decode($res);
print_r($res);
?>
stdClass Object
(
[_links] => stdClass Object
(
[self] => https://api.github.com/repos/qeremy/mii/contents/README.md
[git] => https://api.github.com/repos/qeremy/mii/git/blobs/49f0c4d5e25ac44921ba4372aebd76d2da5128e2
[html] => https://github.com/qeremy/mii/blob/master/README.md
)
[url] => https://api.github.com/repos/qeremy/mii/contents/README.md
[type] => file
[sha] => 49f0c4d5e25ac44921ba4372aebd76d2da5128e2
[path] => README.md
[size] => 8213
[encoding] => base64
[content] => QWN0dWFsbHksIEkga25vdyB0aGF0IHRoZXJlIGFyZSBidWNoIG9mIEphdmFT
Y3JpcHQgbGlicmFyeSwgZXZlbiBtb3JlIHBvd2VyZnVsbC4gQnV0IHNvbWV0
...
Но, мне кажется, нужна более сложная структура;
<?php
class GRepo
{
protected
// needs "user"
$src_userRepos = "https://api.github.com/users/%s/repos",
// needs "user,repo"
$src_userRepoDetails = "https://api.github.com/repos/%s/%s",
$responseCode, $responseText,
$user;
public function __construct($user) {
$this->user = $user;
}
public function listRepos() {
$this->_request(
sprintf($this->src_userRepos, $this->user));
if ($this->responseCode != 200) {
throw new Exception('Server error!'); // e.g
}
return json_decode($this->responseText);
}
public function getRepoDetails($repo) {
$this->_request(
sprintf($this->src_userRepoDetails, $this->user, $repo));
if ($this->responseCode != 200) {
throw new Exception('Server error!'); // e.g
}
return json_decode($this->responseText);
}
// Could be extended, e.g with CURL..
protected function _request($url) {
$contents [email protected] file_get_contents($url);
$this->responseCode = (false === $contents) ? 400 : 200;
$this->responseText = $contents;
}
}
// Test
$gr = new GRepo('qeremy');
print_r( $gr->listRepos() );
print_r( $gr->getRepoDetails('mii') );
?>
Ответ 3
Вот хороший способ только с завитом. Вы должны изменить переменную $user и $token variableso, чтобы сделать эту работу script для вашего дела. Код проверен с помощью действительного токена, поэтому я надеюсь, что он сработает для вас. Как вы могли видеть в комментариях кода, токен может быть создан из вашей учетной записи github здесь https://github.com/settings/applications
<?php
// for example your user
$user = 'flesheater';
// A token that you could generate from your own github
// go here https://github.com/settings/applications and create a token
// then replace the next string
$token = 'ced38b0e522a5c5e8ab10';
// We generate the url for curl
$curl_url = 'https://api.github.com/users/' . $user . '/repos';
// We generate the header part for the token
$curl_token_auth = 'Authorization: token ' . $token;
// We make the actuall curl initialization
$ch = curl_init($curl_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// We set the right headers: any user agent type, and then the custom token header part that we generated
curl_setopt($ch, CURLOPT_HTTPHEADER, array('User-Agent: Awesome-Octocat-App', $curl_token_auth));
// We execute the curl
$output = curl_exec($ch);
// And we make sure we close the curl
curl_close($ch);
// Then we decode the output and we could do whatever we want with it
$output = json_decode($output);
if (!empty($output)) {
// now you could just foreach the repos and show them
foreach ($output as $repo) {
print '<a href="' . $repo->html_url . '">' . $repo->name . '</a><br />';
}
}
?>
Также, поскольку нам нравится github, мы должны кэшировать результаты в конце и извлекать их один раз в день или около того.
Ответ 4
Когда вы говорите "отображать репо и его содержимое", вы фактически говорите "отображать состояние репо после последней фиксации ведущей ветки", правильно? Это на самом деле лучший способ задуматься над проблемой и станет лучшим руководством с использованием API GitHub.
Вам нужно посмотреть часть Git данных в API. Вот что вам нужно сделать:
1) извлеките список ссылок для вашего репо, используя:
https://api.github.com/repos/:user/:repo/git/refs
Рабочий пример:
https://api.github.com/repos/izuzak/noam/git/refs
Обратите внимание, что он перечисляет ссылки в вашем репо и дает вам ссылки для продолжения.
2) выберите объект commit интересующей вас ссылки, а именно "master", используя ссылку, указанную в ответе на 1):
https://api.github.com/repos/:user/:repo/git/commits/:sha
Рабочий пример:
https://api.github.com/repos/izuzak/noam/git/commits/5cf12775b844664d5f7af6663706195680181374
Обратите внимание, что вы возвращаете объект со ссылкой на дерево.
3) выберем древовидный объект последнего фиксации в master ref, используя ссылку, указанную в ответе на 2):
https://api.github.com/repos/:user/:repo/git/trees/:sha
Рабочий пример:
https://api.github.com/repos/izuzak/noam/git/trees/8a721bea8d2f281c87b39c74cbf5a70075d686b4
Обратите внимание, что вы возвращаете список файлов в корневом каталоге, который является вашим репо. Это то, что вы хотите. Если у вас есть подкаталоги, вы получите ссылки для извлечения файлов в этих подкаталогах.
Этого должно быть достаточно, чтобы вы начали:). Удачи!
Ответ 5
Пожалуйста, попробуйте следующую библиотеку, также доступную в git hub:
https://github.com/ornicar/php-github-api
Ответ 6
Вам нужно проанализировать соответствующий API Githubs, который возвращает вас обратно. В PHP вы можете сделать это, используя json_decode()
, который даст вам массив для работы. Вы можете использовать что-то вроде curl
, чтобы выдать запросы с PHP, а затем получить результаты и проанализировать их, как описано выше.
Другой способ сделать это - это классы REST Client для PHP, посмотрите здесь здесь.
Ответ 7
Если вам нужен какой-то исходный код для анализа, о javascript вы можете попытаться начать с GitHub Repositories (точнее здесь), это хороший открытый проект для расширения Chrome, который делает что-то похожее на то, что вы ищете.
Ответ 8
вы можете использовать github api
organization="write-here-the-organization"
githubuser="your-github-user"
token=`curl -i -u ${githubuser} -d '{"scopes": ["repo"]}' https://api.github.com/authorizations | grep token | cut -d\" -f 4`
curl -i -H "Authorization: token ${token}" https://api.github.com/orgs/${organization}/repos
в результате вы получите длинный json со всеми репозиториями и их информацией. вы можете продолжить здесь.