2013-01-17 49 views
25

अगर मुझे बाहरी वेबसाइट पर केवल मेरी जिथब रिपोजिटरीज और उनकी सामग्री को प्रदर्शित करने के बारे में जाना है, तो मैं इसे करने के बारे में कैसे जाऊं? क्या कोई स्रोत कोड है जो आप मुझे प्रदान कर सकते हैं, अगर मुझे सही दिशा में इंगित न करें? मैं प्रोग्रामिंग के लिए काफी शुरुआत कर रहा हूं इसलिए किसी भी मदद की सराहना की जा रही है। आप सभी को धन्यवाद। अपनी वेबसाइटगिथब एपीआई सभी रिपॉजिटरीज और रेपो की सामग्री को सूचीबद्ध करें

पर एक नज़र लेकर मैंने प्रासंगिक लिंक पर देखा - लेकिन अभी भी कोई संकेत नहीं है कि मैं इसे कैसे पूरा करूंगा।

-Github List all Repo's

-Github List all Repo content

उत्तर

25

पिछले जवाब के सभी महान हैं। आप देख रहे हैं लेकिन यदि कैसे सार्वजनिक रूप से उपलब्ध रेपोस की एक सूची प्राप्त करने के लिए की एक त्वरित और गंदे उदाहरण के लिए तो बाहर की जाँच मेरी 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); 
     } 
    }); 
}); 

देखने के लिए डेटा की किस तरह बस बटन क्लिक करने के बाद सांत्वना जाँच दिया जाता है या आप गूगल Chromes JSONView एक्सटेंशन इंस्टॉल कर सकता और फिर बस यूआरएल कि ajax अनुरोध यानी https://api.github.com/users/google/repos

+0

खुश मैं मदद कर सकता था! –

+0

पृष्ठ का आकार यहां परेशान नहीं करता है? गिट के अनुसार, अधिकतम 100 आइटम केवल प्रति कॉल की अनुमति है। https://developer.github.com/v3/#pagination –

0

आप respone Githubs एपीआई आप वापस भेजता है पार्स करने के लिए की जरूरत है। PHP में आप json_decode() का उपयोग कर ऐसा कर सकते हैं जो आपको काम करने के लिए एक सरणी देगा। PHP से अनुरोध जारी करने के लिए आप curl जैसे कुछ का उपयोग कर सकते हैं और फिर परिणाम प्राप्त कर सकते हैं और ऊपर वर्णित अनुसार उन्हें पार्स कर सकते हैं।
ऐसा करने का एक और तरीका PHP के लिए रीस्ट क्लाइंट क्लासेस है, उदाहरण के लिए इस here पर एक नज़र डालें।

0

आप कुछ स्रोत कोड का विश्लेषण करने, जावास्क्रिप्ट आप GitHub Repositories (खासतौर पर here) से शुरू करने के लिए कोशिश कर सकते हैं के बारे में चाहते हैं, यह एक Chrome एक्सटेंशन जो कुछ समान करने के लिए क्या आप देख रहे हैं करता है के लिए एक अच्छा खुला परियोजना है।

3

जब आप कहते हैं कि "एक रेपो और इसकी सामग्री प्रदर्शित करें" तो आप वास्तव में कहते हैं "मास्टर शाखा की नवीनतम प्रतिबद्धता के बाद रेपो की स्थिति प्रदर्शित करें", है ना? वास्तव में समस्या के बारे में सोचने का यह बेहतर तरीका है और गिटहब के एपीआई का उपयोग करके बेहतर मार्गदर्शिका होगी।

आपको एपीआई के Git data भाग को देखने की आवश्यकता है।

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

कार्य उदाहरण:

1) का उपयोग कर अपने रेपो के लिए 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 

सूचना है कि आप रूट रिपोर्टर में फ़ाइलों की एक सूची वापस प्राप्त करें जो आपका रेपो है। आप यही चाहते हैं। यदि आपके पास उपनिर्देशिकाएं हैं, तो आपको उन उपनिर्देशिकाओं में फ़ाइलों को लाने के लिए लिंक मिलेंगे।

यह आपको शुरू करने के लिए पर्याप्त होना चाहिए :)। सौभाग्य!

5

ये सभी उदाहरण "प्रमाणीकरण" के बिना छद्म के समान हैं और आप उन्हें अपनी पसंद के अनुसार सुधार सकते हैं;

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

आइए कहें कि मैं बस प्रमाणीकरण के साथ जेसन जैसी प्रतिक्रिया (रेपो की सामग्री का) प्राप्त करना चाहता हूं। मैं इसे कैसे करूं? –

0

कर रहा है पर जाएँ आप 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

यह केवल भंडार पर 30 परियोजनाओं को सूचीबद्ध करेगा – user6930

5

यहां कर्ल के साथ एक अच्छा तरीका है। इस स्क्रिप्ट को आपके मामले के लिए काम करने के लिए आपको $ उपयोगकर्ता और $ टोकन चर बदलना चाहिए। कोड को वैध टोकन के साथ परीक्षण किया जाता है, इसलिए मुझे उम्मीद है कि यह आपके लिए काम करेगा। आप कोड की टिप्पणियों में देख सकते हैं के रूप में टोकन यहां से 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 खाते से उत्पन्न किया जा सकता क्योंकि हम GitHub की तरह, हम अंत में परिणाम कैश चाहिए और उन्हें प्रति दिन एक बार लाने या इसलिए।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^