web-dev-qa-db-ja.com

Github APIすべてのリポジトリとリポジトリのコンテンツを一覧表示します

私のgithubリポジトリとそのコンテンツのみを外部のWebサイトに表示する場合、どうすればよいですか?あなたが私に提供できるソースコードはありますか?私はプログラミングの初心者なので、どんな助けにも感謝します。みんなありがとう。彼らのウェブサイトをちらっと見る

私は関連するリンクをちらりと見ましたが、これをどのようにして達成するのかまだわかりません。

-Githubすべてのリポジトリをリスト

-Githubすべてのレポコンテンツをリスト

29
ramr

以前の答えはすべて素晴らしいです。ただし、公開されているリポジトリのリストを取得する方法の簡単で汚い例を探している場合は、私の 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 ChromeのJSONView拡張機能をインストールして、ajaxリクエストが行っているURLにアクセスしてください https://api.github.com/users/google/repos

28
Decker W Brower

これがカールだけのいい方法です。 $ 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が好きなので、結果を最後にキャッシュし、1日に1回程度フェッチする必要があります。

9
Nikolay

これらの例はすべて「認証」なしの疑似であり、好きなように自分で改善できます。

<?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オブジェクト
(
 [language] => JavaScript 
 [merges_url] => https://api.github.com/repos/qeremy/mii/マージ
 [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] =>多目的JavaScriptライブラリ
 [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オブジェクト
(
 [_links] => stdClassオブジェクト
(
 [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 
 [サイズ] => 8213 
 [コード] => BASE64 
 [コンテンツ] => 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') );
?>
5
K-Gun

「レポとその内容を表示する」と言うと、実際には「マスターブランチの最新のコミット後のレポの状態を表示する」と言いますよね?これは実際に問題について考えるより良い方法であり、GitHubのAPIを使用するためのより良いガイドになります。

APIの Git data 部分を確認する必要があります。これはあなたがする必要があることです:

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

リポジトリであるルートディレクトリにあるファイルのリストが返されることに注意してください。これはあなたが望むものです。サブディレクトリがある場合、それらのサブディレクトリにあるファイルを取得するためのリンクが表示されます。

これはあなたを始めるのに十分なはずです:)。幸運を!

3
Ivan Zuzak

Gitハブでも利用可能な次のライブラリを試してください: https://github.com/ornicar/php-github-api

1
Vijay Verma

返されたGithub APIが返送したものを解析する必要があります。 PHPでは、json_decode()を使用してこれを行うことができます。これにより、操作する配列が提供されます。 curl PHP)からリクエストを発行し、結果を取得して上記のように解析します。
これを行う別の方法は、REST PHPのクライアントクラスです。こちらをご覧ください こちら ) 例えば。

0
Stefan

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が得られます。ここから続行できます。

0
drordk

分析するソースコードが必要な場合は、javascriptについて GitHub Repositories (より具体的には here )から始めることができます。これは、Chrome拡張子は、探しているものと同じようなことをします。

0
Ragnarokkr