2013-01-17 5 views
25

Gdybym miał przejrzeć tylko moje repozytorium Github i ich zawartość na zewnętrznej stronie internetowej, jak miałbym to zrobić? Czy jest jakiś kod źródłowy, który możesz mi podać, jeśli nie wskażesz mi właściwego kierunku? Jestem początkującym programistą, więc każda pomoc jest doceniana. Dziękuje wszystkim. Rzut oka na ich stronę internetową:Gitub API Lista wszystkich repozytoriów i treści repo

Zerknąłem na odpowiednie linki - ale nadal nie mam pojęcia, jak to osiągnąć.

-Github List all Repo's

-Github List all Repo content

Odpowiedz

25

wszystkich poprzednich odpowiedzi są świetne. jednak jeśli szukasz szybkiego i brudne przykład jak uzyskać listę dostępnych publicznie repo następnie sprawdzić mój jsfiddle.

który używa tego wywołanie ajax do listy wszystkich ze użytkowników repo publicznych:

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

aby zobaczyć, jakie dane są zwracane po prostu sprawdzić konsolę po naciśnięciu przycisku lub można zainstalować rozszerzenie Google Chromes JSONView a potem po prostu odwiedzić adres URL żądania ajax jest podejmowanie tj https://api.github.com/users/google/repos

+0

cieszę się, że mogę pomóc! –

+0

Czy rozmiar strony nie przeszkadza tutaj? Według Git, maksymalnie 100 pozycji jest dozwolone tylko na jedno połączenie. https://developer.github.com/v3/#pagination –

0

Trzeba przeanalizować respone Githubs API odsyła. W PHP możesz to zrobić, używając json_decode(), który da ci tablicę do pracy. Możesz użyć czegoś takiego jak curl, aby wysłać żądania z PHP, a następnie uzyskać wyniki i przeanalizować je tak, jak opisano powyżej.
Innym sposobem, aby to zrobić są klasy klientów REST dla PHP, spójrz na to na przykład here.

0

Jeśli potrzebujesz kodu źródłowego do analizy, o javascript możesz spróbować zacząć od GitHub Repositories (dokładniej: here), jest to fajny otwarty projekt dla rozszerzenia do Chrome, które robi coś podobnego do tego, czego szukasz.

3

Kiedy mówisz "wyświetlaj repozytorium i jego zawartość", mówisz "wyświetlaj stan repo po ostatnim zatwierdzeniu gałęzi głównej", prawda? To jest lepszy sposób myślenia o problemie i będzie lepszym przewodnikiem po korzystaniu z API GitHub.

Musisz spojrzeć na część interfejsu API Git data. Oto co trzeba zrobić:

1) pobrać listy piśmiennictwa dla Twojego repo przy użyciu:

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

przykład robocza:

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

zauważyć, że wymienia odniesienia w swoim repo i daje ci linki do kontynuacji.

2) pobrać popełnić przedmiot ref, który Cię interesuje, a mianowicie "mistrz", korzystając z linku podanego w odpowiedzi na 1):

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

przykład roboczych:

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

Zauważ, że wrócisz do obiektu z linkiem do drzewa.

3) pobrać obiekt drzewo ostatniego zatwierdzenia w odnośniku nadrzędnego, korzystając z linku podanego w odpowiedzi do 2):

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

przykład robocza:

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

zauważyć, że odzyskać listę plików w katalogu głównym, który jest twoim repozytorium. To jest to, czego chcesz. Jeśli masz podkatalogi, otrzymasz linki do pobierania plików w tych podkatalogach.

To powinno wystarczyć, aby zacząć :). Powodzenia!

5

Wszystkie te przykłady są tak samo pseudo bez "uwierzytelnienia" i można je poprawić samemu, jak chcesz;

<?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 
    ... 

Ale myślę, że potrzebuje bardziej skomplikowaną strukturę;

<?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')); 
?> 
+0

Powiedzmy, że po prostu chcę uzyskać odpowiedź podobną do jsonów (zawartości repo) z uwierzytelnianiem. Jak mam to zrobić? –

0

można użyć 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 

w wyniku powyższego otrzymasz długi json ze wszystkimi repozytoriami i ich informacjami. możesz kontynuować tutaj.

+0

spowoduje to wyświetlenie tylko 30 projektów w repozytorium – user6930

5

Oto dobra droga z lokami. Powinieneś zmienić zmienne $ user i $ token, aby ten skrypt działał dla twojej sprawy. Kod jest testowany z ważnym tokenem, więc mam nadzieję, że zadziała. Jak można zobaczyć w komentarzach kodu tokena mogą być generowane z konta github stąd 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 />'; 
    } 
    } 

?> 

Ponadto, ponieważ chcemy GitHub, powinniśmy buforować wyniki w końcu i sprowadzić je raz dziennie lub więc.

Powiązane problemy