GitHub API liste de tous les dépôts et du contenu de repo
si je devais simplement afficher mes dépôts github et leur contenu sur un site Web externe, comment ferais-je? Y a-t-il un code source que vous pouvez me fournir, si ce n'est me pointer dans la bonne direction? Je suis tout à fait un débutant en programmation, donc toute aide est appréciée. Merci à vous tous. Jeter un coup d'oeil à leur site web
j'ai jeté un coup d'oeil sur les liens pertinents - mais je n'ai toujours aucune idée de comment je pourrais accomplir ceci.
- Github List tous Repo's
-Github Liste de toutes les Pensions de contenu
8 réponses
toutes les réponses précédentes sont grands. cependant, si vous cherchez un exemple rapide et sale de la façon d'obtenir une liste de ventes à réméré publiquement disponibles, alors vérifiez mon jsfiddle.
qui utilise cet appel ajax pour lister tous les utilisateurs d'un dépôt public:
$("#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 retourné il suffit de vérifier la console après avoir cliqué sur le bouton ou vous pouvez installer Google Chromes jsonview extension et puis juste visiter l'url que la demande ajax est faire c'est à dire https://api.github.com/users/google/repos
Voici une belle façon juste avec le curl. Vous devez changer le $ user et le $token variableso pour faire fonctionner ce script pour votre cas. Le code est testé avec un token valide donc j'espère qu'il fonctionnera pour vous. Comme vous pouvez le voir dans les commentaires du code, le token peut être généré à partir de votre compte github d'icihttps://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 />';
}
}
?>
aussi puisque nous aimons github, nous devrions mettre en cache les résultats à la fin et les récupérer une fois par jour ou deux.
tous ces exemples sont aussi pseudo sans "authentification" et vous pouvez les améliorer vous-même comme vous le souhaitez;
<?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] => git@github.com: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 ...
Mais, je pense, besoin de plus de structure complexe;
<?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') );
?>
Quand tu dis "afficher les pensions de titres et de son contenu" vous fait dire "affichage de l'état de l'opération après le dernier commit de la branche master", à droite? C'est en fait la meilleure façon de penser au problème et sera un meilleur guide à travers l'utilisation de L'API GitHub.
Vous avez besoin de regarder les Git fait partie de L'API. Voici ce que vous devez faire:
1) Récupérez la liste des réf pour votre repo en utilisant:
https://api.github.com/repos/:user/:repo/git/refs
Travail exemple:
https://api.github.com/repos/izuzak/noam/git/refs
notez qu'il répertorie les références dans votre rapport et vous donne des liens pour continuer.
2) récupérez l'objet commit du ref qui vous intéresse, à savoir "master", en utilisant le lien fourni dans la réponse à 1):
https://api.github.com/repos/:user/:repo/git/commits/:sha
exemple:
https://api.github.com/repos/izuzak/noam/git/commits/5cf12775b844664d5f7af6663706195680181374
notez que vous récupérez un objet avec un lien vers un arbre.
3) récupérez l'objet tree du dernier commit dans la référence maître, en utilisant le lien fourni dans le réponse à 2) :
https://api.github.com/repos/:user/:repo/git/trees/:sha
exemple:
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 est votre repo. C'est ce que vous voulez. Si vous avez des sous-répertoires, vous obtiendrez des liens pour récupérer les fichiers dans les sous-répertoires.
cela devrait être suffisant pour que vous commenciez :). Bonne chance!
veuillez essayer de suivre la bibliothèque aussi disponible sur Git hub: https://github.com/ornicar/php-github-api
vous devez analyser la réponse que L'API Githubs vous renvoie. En PHP, vous pouvez le faire en utilisant json_decode()
qui vous donnera un tableau pour travailler avec. Vous pouvez utiliser quelque chose comme curl
pour émettre les demandes de PHP et ensuite obtenir les résultats et les analyser comme décrit ci-dessus.
Une autre façon de le faire sont les classes de Client REST pour PHP, regardez celui-ci ici par exemple.
si vous voulez qu'un code source soit analysé, à propos de javascript, vous pouvez essayer de commencer par Dépôts 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 recherchez.
vous pouvez utiliser api github
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
comme résultat de ce qui précède vous obtiendrez un long json avec tous les dépôts, et leurs informations. vous pouvez continuer à partir d'ici.