web-dev-qa-db-fra.com

API Github Lister tous les référentiels et le contenu du référentiel

Si je devais afficher seulement mes dépôts github et leur contenu sur un site Web externe, comment pourrais-je m'y prendre? Y a-t-il des codes source que vous pouvez me fournir, sinon me diriger dans la bonne direction? Je suis un débutant en programmation, toute aide est la bienvenue. Merci à tous. Jetez un coup d’œil sur leur site internet 

J'ai jeté un coup d'œil sur les liens pertinents, mais je n'ai toujours aucune idée de la façon dont j'y arriverais.

-Github Lister tous les Repo

-Github Lister tout le contenu du repo

28
ramr

toutes les réponses précédentes sont super. Toutefois, si vous recherchez un exemple rapide et compliqué sur la façon d'obtenir une liste des pensions disponibles au public, consultez mon jsfiddle.

qui utilise cet appel ajax pour répertorier tous les repos publics d'un utilisateur:

$("#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);
        }
    });
});

pour voir quel type de données est renvoyé, il suffit de vérifier la console après avoir cliqué sur le bouton. Vous pouvez également installer l'extension Google Chromes JSONView, puis simplement visiter l'URL de la demande ajax, par exemple: https://api.github.com/users/google/repos

28
Decker W Brower

Voici une belle façon juste avec la boucle. Vous devez modifier les variables $ user et $ token variables pour que ce script fonctionne pour votre cas. Le code est testé avec un jeton valide, donc j'espère que cela fonctionnera pour vous. Comme vous avez pu le constater dans les commentaires du code, le jeton pourrait être généré à partir de votre compte github à partir d'ici 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 />';
    }
  }

?>

De plus, comme nous aimons github, nous devrions mettre les résultats en cache et les récupérer une fois par jour environ.

8
Nikolay

Tous ces exemples sont tout aussi pseudo sans "authentification" et vous pouvez les améliorer vous-même à votre guise;

<?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);
?>
 Objet stdClass 
 (
 [language] => JavaScript 
 [merges_url] => https://api.github.com/repos/qeremy/mii/ fusionne 
 [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] => Bibliothèque JavaScript polyvalente 
 [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/{shaurther
 [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);
?>
 Objet stdClass 
 (
 [_links] => Objet stdClass 
 (
 [self] => https://api.github.com /repos/qeremy/mii/contents/README.md
 [git] => https://api.github.com/repos/qeremy/mii/git/blobs/49f0c4d5e25ac44921ba4372aebd76d2da5128e2hhtml ] => https://github.com/qeremy/mii/blob/master/README.md
) 
 
 [url] => https: //api.github .com/repos/qeremy/mii/sommaire/README.md 
 [type] => fichier 
 [sha] => 49f0c4d5e25ac44921ba4372aebd76d2da5128e2 
 [chemin] => README.md [. .____.] [size] => 8213 
 [encodage] => base64 
 [content] => QWN0dWFsbHksIEkga25vdyB0aGF0IHRoZXJlIGFyZSBidWNoIG9mIEphdmFT 
 Y3JpcHQgbGlicmFyeSwgZXZlbiBtb3JlIHBvd2VyZnVsbC4gQnV0IHNvbWV0 
 ... 

Mais, je pense a besoin d'une structure plus compliquée;

<?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') );
?>
5
K-Gun

Lorsque vous dites "afficher un référentiel et son contenu", vous dites en fait "afficher l'état du référentiel après la dernière validation de la branche principale", n'est-ce pas? C'est en fait la meilleure façon de réfléchir au problème et sera un meilleur guide pour utiliser l'API de GitHub.

Vous devez examiner la partie Données Git de l'API. Voici ce que vous devez faire:

1) Récupérez la liste des références pour votre repo en utilisant:

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

Exemple de travail:

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

Notez qu'il répertorie les références dans votre rapport et vous fournit des liens pour continuer.

2) chercher l'objet commit de la référence qui vous intéresse, à savoir "master", en utilisant le lien fourni dans la réponse au 1):

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

Exemple de travail:

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

Notez que vous récupérez un objet avec un lien vers une arborescence.

3) récupérer l’arborescence de la dernière validation dans la référence principale, à l’aide du lien fourni dans la réponse à la question 2):

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

Exemple de travail:

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

Notez que vous récupérez une liste de fichiers dans le répertoire racine qui constitue votre référentiel. Voici ce que vous voulez. Si vous avez des sous-répertoires, vous obtiendrez des liens pour récupérer les fichiers dans ces sous-répertoires.

Cela devrait suffire à vous aider à démarrer :). Bonne chance!

3
Ivan Zuzak

Veuillez essayer la bibliothèque suivante également disponible sur le hub git: https://github.com/ornicar/php-github-api

1
Vijay Verma

Vous devez analyser le respone de l'API Githubs de retour vous renvoie. Dans PHP, vous pouvez le faire en utilisant json_decode() qui vous donnera un tableau avec lequel travailler. Vous pouvez utiliser quelque chose comme curl pour émettre les demandes de PHP, puis obtenir les résultats et les analyser comme décrit ci-dessus.
Une autre façon de faire est REST Les classes clientes pour PHP, regardez celle-ci ici par exemple.

0
Stefan

vous pouvez utiliser 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 

à la suite de ce qui précède, vous obtiendrez un long json avec tous les référentiels et leurs informations. vous pouvez continuer à partir d'ici.

0
drordk

Si vous voulez analyser du code source, à propos de javascript, vous pouvez essayer de démarrer à partir de Référentiels GitHub (plus précisément ici ), c’est un beau projet ouvert pour une extension Chrome qui fait quelque chose de similaire à ce que vous ' re cherche.

0
Ragnarokkr