GitHub सूची-मुद्दों-के लिए-रिपॉजिटरी API का उपयोग करना


9

जब आप GitHub पर जाते हैं, तो मुद्दे के तहत, यह एक HTML पृष्ठ के रूप में सभी खुले मुद्दों को खींचता है। हम उन मुद्दों सहित एक रिपॉजिटरी में सभी मुद्दों को दर्शाने वाले एक डैशबोर्ड को लागू करना चाहते हैं, जिसमें वे मुद्दे भी शामिल हैं जो सही तरीके से लेबल नहीं हैं।

यह संबंधित सूची-मुद्दों-के लिए-रिपॉजिटरी एपीआई है

जब मैं शुरू में jQuery और जावास्क्रिप्ट का उपयोग कर रहा था, अब मैं एक प्रूफ-ऑफ-कॉन्सेप्ट के लिए PHP का उपयोग कर रहा हूं क्योंकि इसके बिल्ट-इन सत्र हैंडलिंग से मुझे लॉगिन करने के लिए एक ही पेज का उपयोग करने की सुविधा मिलती है, GitHub को प्रमाणित और कॉलबैक करें, और जारी रखें। लेकिन यह मेरे लिए कोई मायने नहीं रखता, कोई भी भाषा ठीक है।

मैं OAUTH2 के माध्यम से GitHub API तक पहुँच प्राप्त करने में कामयाब रहा, लेकिन जब मुझे https://api.github.com/orgs/{org}/reposइसके माध्यम से रिपॉजिटरी की सूची मिलती है तो यह एक खाली सरणी के रूप में सामने आती है।

चूंकि /orgs/{org}/reposAPI एक खाली सरणी देता है, निश्चित रूप से संबंधित /repos/{org}/{repo}/issuesAPI एक त्रुटि लौटाएगा।

संपादित करें : एक समाधान के लिए इस फॉलोअप को देखें ! खुशी है कि मैं अंत में यह काम कर रहा हूँ!

जवाबों:


7

यह एक बाकी एपीआई है। आपको Http अनुरोध का उपयोग करके कुछ समापन बिंदुओं को कॉल करने की आवश्यकता है। मैं नहीं जानता कि आप किस भाषा का उपयोग करने की कोशिश कर रहे हैं, इसलिए मैं आपको इस बारे में एक अच्छा उदाहरण नहीं दे सकता कि इसे कैसे स्वीकार किया जाए। यदि आप नहीं जानते कि किस भाषा का उपयोग करना है, तो पोस्टमैन का उपयोग करके GESTUB API पर REST API कॉल बनाएं।

मान लें कि आप Microsoft के टाइपस्क्रिप्ट रेपो के मुद्दों को फिर से पकड़ना चाहते हैं , आपको इस एपीआई एंडपॉइंट को कॉल करना होगा:

https://api.github.com/repos/microsoft/typescript/issues

यहाँ ध्यान दें कि मैंने जो पाने की कोशिश की है, उसके लिए मैंने प्रलेखन के मूल्य :ownerऔर :repoमूल्य को बदल दिया है ।

फिर आप अपने डेटा को फ़िल्टर करने के लिए कॉल में कुछ पैरामीटर पास कर सकते हैं, उदाहरण के लिए, एपीआई लेबल।

https://api.github.com/repos/microsoft/typescript/issues?labels=API

यह केवल उन समस्याओं को लौटाएगा जिन्हें लेबल किया गया है API

यह एक एपीआई का उपयोग करने की मूल बातें है।


धन्यवाद। वह मुझे वहाँ भाग गया। यह मुझे बता रहा है { "message": "Not Found", "documentation_url": "https://developer.github.com/v3/issues/#list-issues-for-a-repository" }, लेकिन मैंने पढ़ा है और यह स्पष्ट रूप से मानक प्रतिक्रिया है जब निजी रिपोज को एक्सेस करने की कोशिश की जा रही है, इसलिए OAuth, आदि FWIW पर शोध कर रहे हैं, जावास्क्रिप्ट के तहत jQuery फ्रेमवर्क का उपयोग कर रहे हैं।
यमिन रोंग

वहाँ शायद है, लेकिन इस बिंदु पर, मैं आपको यह नहीं सिखा सकता कि ओउथ कैसे काम करता है। ऑनलाइन ट्यूटोरियल बहुत है। मुझे कहना होगा, इसे गलत तरीके से न लें, लेकिन यह आपके एपीआई के किसी ज्ञात व्यक्ति के लिए काफी बड़ी परियोजना है। मैं सिर्फ यह सुनिश्चित करना चाहता हूं कि आपको पता चल जाए कि आप @YiminRong
निकोलस

धन्यवाद। मुझे काम करने के लिए OAUTH2 मिल गया है, लेकिन यह अपेक्षित जानकारी नहीं दे रहा है। कृपया मुद्दे में संपादित देखें।
यिमिन रोंग

4

आप जीथ्यू एपीआई तक पहुँचने के लिए jQuery Ajax का उपयोग कर सकते हैं और प्रमाणित करने के लिए एक बुनियादी प्रमाणीकरण शीर्षक जोड़ सकते हैं ( यहाँ देखें ), एक उदाहरण नीचे दिखाया गया है, यह किसी दिए गए रेपो के लिए मुद्दों को खींचेगा और पहले 10 को अलर्ट विंडो में दिखाएगा।

मुद्दों को यहाँ खींचने पर दस्तावेज़ीकरण देखें: https://developer.github.com/v3/issues/ यह देखने के लिए कि आप किन मापदंडों का उपयोग फ़िल्टर, सॉर्ट आदि के लिए कर सकते हैं।

उदाहरण के लिए आप 'बग' लेबल वाले सभी मुद्दों का उपयोग कर सकते हैं:

/issues?labels=bug

इसमें कई लेबल शामिल हो सकते हैं, जैसे

/issues?labels=enhancement,nicetohave

आप तालिका आदि में सूची को आसानी से संशोधित कर सकते हैं।

const username = 'github_username'; // Set your username here
const password = 'github_password'; // Set your password here
const repoPath = "organization/repo" // Set your Repo path e.g. microsoft/typescript here

$(document).ready(function() {
    $.ajax({
        url: `https://api.github.com/repos/${repoPath}/issues`,
        type: "GET",
        crossDomain: true,
        // Send basic authentication header.
        beforeSend: function (xhr) {
            xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
        },
        success: function (response) {
            console.log("Response:", response);
            alert(`${repoPath} issue list (first 10):\n - ` + response.slice(0,10).map(issue => issue.title).join("\n - "))
        },
        error: function (xhr, status) {
            alert("error: " + JSON.stringify(xhr));
        }
    });
});

नीचे jQuery और Github API का उपयोग करके (सार्वजनिक) रेपो के लिए एक स्निपेट लिस्टिंग मुद्दे हैं:

(ध्यान दें कि हम यहां प्रमाणीकरण शीर्षलेख नहीं जोड़ते हैं!)

const repoPath = "leachim6/hello-world" // 

$(document).ready(function() {
$.ajax({
    url: `https://api.github.com/repos/${repoPath}/issues`,
    type: "GET",
    crossDomain: true,
    success: function (response) {
        tbody = "";
        response.forEach(issue => {
            tbody += `<tr><td>${issue.number}</td><td>${issue.title}</td><td>${issue.created_at}</td><td>${issue.state}</td></tr>`;
        });
        $('#output-element').html(tbody);
    },
    error: function (xhr, status) {
        alert("error: " + JSON.stringify(xhr));
    }
});
});
<head>
<meta charset="utf-8">
<title>Issue Example</title>
<link rel="stylesheet" href="css/styles.css?v=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body style="margin:50px;padding:25px">
<h3>Issues in Repo</h3>
<table class="table table-striped">
    <thead>
      <tr>
        <th scope="col">Issue #</th>
        <th scope="col">Title</th>
        <th scope="col">Created</th>
        <th scope="col">State</th>
      </tr>
    </thead>
    <tbody id="output-element">
    </tbody>
</table>
</body>


धन्यवाद। मैं इस ASAP को देखूंगा। मुझे OAUTH2 का उपयोग करके अपेक्षित परिणाम नहीं मिल रहे हैं, और मैंने देखा कि एक एपीआई https://api.github.com/authorizationsने संकेत दिया कि इसे केवल मूल प्राधिकरण के साथ ही एक्सेस किया जा सकता है stdClass Object ( [message] => This API can only be accessed with username and password Basic Auth [documentation_url] => https://developer.github.com/v3 ):। तो शायद यह काम करेगा।
यिमिन रोंग

मूल प्रमाणीकरण मेरे लिए काम करता है, मेरे github क्रेडेंशियल्स का उपयोग करते हुए। यदि आप एक सार्वजनिक रेपो तक पहुँचना चाहते हैं तो आप पहले वाले सेक्शन पर टिप्पणी कर सकते हैं!
टेरी लेनोक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.