Github API Список всех репозиториев и содержимого репозитория

Если бы я собирался отображать только МОИ репозитории github и их содержимое на внешнем веб-сайте, как бы я это сделал? Есть ли какой-нибудь исходный код, который вы можете мне предоставить, если не указать мне правильное направление? Я совсем новичок в программировании, поэтому любая помощь приветствуется. Всем спасибо. Взглянув на их веб-сайт

Я просмотрел соответствующие ссылки, но до сих пор не знаю, как это сделать.

-Github Список всех репозиториев

-Github Список всего содержимого репозиториев


person ramr    schedule 17.01.2013    source источник


Ответы (8)


все предыдущие ответы великолепны. однако, если вы ищете быстрый и грязный пример того, как получить список общедоступных репозиториев, посмотрите мой 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

person Decker W Brower    schedule 02.02.2013
comment
Размер страницы здесь не смущает? Согласно Git, за вызов разрешено не более 100 элементов. developer.github.com/v3/#pagination - person Ruifeng Ma; 04.11.2016

Вот хороший способ только с завитком. Вы должны изменить переменные $user и $token, чтобы этот скрипт работал в вашем случае. Код протестирован с действительным токеном, поэтому я надеюсь, что он сработает для вас. Как вы могли видеть в комментариях к коду, токен может быть сгенерирован из вашей учетной записи 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, мы должны кэшировать результаты в конце и получать их один раз в день или около того.

person Nikolay    schedule 30.04.2014

Все эти примеры такие же псевдо без "аутентификации" и вы можете сами их улучшать как хотите;

<?php
// a simple way to get a user's 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's 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 =@ 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') );
?>
person K-Gun    schedule 30.01.2013
comment
Допустим, я просто хочу получить json-подобный ответ (содержимого репо) с аутентификацией. Как я должен это делать? - person Khurshid Alam; 29.06.2014

Когда вы говорите «отобразить репозиторий и его содержимое», вы на самом деле говорите «отобразить состояние репо после последней фиксации основной ветки», верно? На самом деле это лучший способ осмысления проблемы, и он станет лучшим руководством по использованию GitHub API.

Вам нужно взглянуть на данные Git часть API. Вот что вам нужно сделать:

1) получить список ссылок для вашего репо, используя:

https://api.github.com/repos/:user/:repo/git/refs

Рабочий пример:

https://api.github.com/repos/izuzak/noam/git/refs

Обратите внимание, что он перечисляет ссылки в вашем репо и дает вам ссылки для продолжения.

2) получить объект фиксации интересующей вас ссылки, а именно «мастер», используя ссылку, указанную в ответе на 1):

https://api.github.com/repos/:user/:repo/git/commits/:sha

Рабочий пример:

https://api.github.com/repos/izuzak/noam/git/commits/5cf12775b844664d5f7af6663706195680181374

Обратите внимание, что вы возвращаете объект со ссылкой на дерево.

3) получить объект дерева последней фиксации в главной ссылке, используя ссылку, указанную в ответе на 2):

https://api.github.com/repos/:user/:repo/git/trees/:sha

Рабочий пример:

https://api.github.com/repos/izuzak/noam/git/trees/8a721bea8d2f281c87b39c74cbf5a70075d686b4

Обратите внимание, что вы получаете список файлов в корневом каталоге, который является вашим репозиторием. Это то, что вы хотите. Если у вас есть подкаталоги, вы получите ссылки для получения файлов в этих подкаталогах.

Этого должно быть достаточно для начала :). Удачи!

person Ivan Zuzak    schedule 18.01.2013

Пожалуйста, попробуйте следующую библиотеку, также доступную в git hub: https://github.com/ornicar/php-github-api

person Vijay Verma    schedule 30.01.2013

Вам нужно проанализировать ответ, который Githubs API отправляет вам обратно. В PHP вы можете сделать это, используя json_decode(), который даст вам массив для работы. Вы можете использовать что-то вроде curl для отправки запросов из PHP и последующего получения результатов. и проанализируйте их, как описано выше.
Другой способ сделать это — классы клиента REST для PHP, посмотрите на этот здесь< /а> например.

person Stefan    schedule 17.01.2013

Если вы хотите проанализировать исходный код, о javascript вы можете попробовать начать с репозиториев GitHub (подробнее в частности здесь), это хороший открытый проект для расширения Chrome, которое делает что-то похожее на то, что вы ищете.

person Ragnarokkr    schedule 18.01.2013

вы можете использовать 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 со всеми репозиториями и их информацией. Вы можете продолжить отсюда.

person drordk    schedule 03.10.2013
comment
это будет перечислять только 30 проектов в репозитории - person Ganga; 21.06.2017