การใช้ GitHub list-problems-for-a-repository API


9

เมื่อคุณไปที่ GitHub ภายใต้ปัญหาจะดึงปัญหาที่เปิดอยู่ทั้งหมดเป็นหน้า HTML เราต้องการใช้แดชบอร์ดที่แสดงปัญหาทั้งหมดในพื้นที่เก็บข้อมูลจัดกลุ่มตามป้ายกำกับรวมถึงปัญหาที่ติดป้ายไม่ถูกต้อง

นี่คือที่สอดคล้องรายการปัญหาสำหรับ-a-พื้นที่เก็บข้อมูล API

ในขณะที่ฉันเริ่มใช้ jQuery และ Javascript ตอนนี้ฉันกำลังใช้ PHP เพื่อพิสูจน์แนวคิดเนื่องจากการจัดการเซสชันในตัวทำให้ฉันสามารถใช้หน้าเดียวกันในการเข้าสู่ระบบมี GitHub รับรองความถูกต้อง & โทรกลับและดำเนินการต่อ แต่มันไม่สำคัญสำหรับฉันภาษาใด ๆ ก็โอเค

ฉันจัดการเพื่อเข้าถึง GitHub API ผ่าน OAUTH2 แต่เมื่อฉันได้รับรายชื่อที่เก็บข้อมูลผ่านhttps://api.github.com/orgs/{org}/reposมันจะปรากฏเป็นอาร์เรย์ว่าง

เนื่องจาก/orgs/{org}/reposAPI ส่งคืนอาร์เรย์ว่างเปล่าดังนั้น/repos/{org}/{repo}/issuesAPI ที่สอดคล้องกันจะส่งคืนข้อผิดพลาด

แก้ไข : ดูการติดตามผลสำหรับวิธีการแก้ปัญหา! ดีใจที่ฉันได้ทำงานในที่สุด!

คำตอบ:


7

มันเป็น API ส่วนที่เหลือ คุณต้องโทรหาจุดปลายบางจุดโดยใช้คำขอ Http ฉันไม่รู้ว่าคุณกำลังใช้ภาษาอะไรอยู่ดังนั้นฉันจึงไม่สามารถยกตัวอย่างที่ดีให้กับคุณเกี่ยวกับวิธีการทำให้เกิดผลนี้ หากคุณยังไม่รู้ว่าจะใช้ภาษาใดให้ใช้บุรุษไปรษณีย์เพื่อสร้างการเรียกใช้ REST API ไปยัง github API

สมมติว่าคุณต้องการแก้ไขปัญหาของrepository typescript ของ Microsoftคุณจะต้องเรียกจุดสิ้นสุด API นี้:

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

สังเกตุที่นี่ว่าฉันได้แทนที่:ownerและ:repoค่าของเอกสารสำหรับหนึ่งฉันพยายามที่จะได้รับ

จากนั้นคุณสามารถส่งพารามิเตอร์บางอย่างไปยังการโทรเพื่อกรองข้อมูลของคุณตัวอย่างเช่นป้ายกำกับ API

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

สิ่งนี้จะส่งคืนปัญหาที่ระบุว่าเป็นAPIเท่านั้น

นี่คือพื้นฐานของวิธีการใช้ API


ขอบคุณ. นั่นทำให้ฉันมีส่วนร่วมทางนั้น มันบอกฉัน{ "message": "Not Found", "documentation_url": "https://developer.github.com/v3/issues/#list-issues-for-a-repository" }แต่ฉันอ่านและเห็นได้ชัดว่าเป็นการตอบสนองมาตรฐานเมื่อพยายามเข้าถึง repos ส่วนตัวดังนั้นการวิจัยเกี่ยวกับ OAuth ฯลฯ FWIW โดยใช้ JavaScript ภายใต้กรอบ jQuery
Yimin Rong

อาจมี แต่ ณ จุดนี้ฉันไม่สามารถสอนคุณว่า oauth ทำงานอย่างไร มีบทช่วยสอนออนไลน์มากมาย ฉันต้องบอกว่าอย่าใช้วิธีนี้ผิด แต่นี่เป็นโครงการที่ยิ่งใหญ่สำหรับใครบางคนที่คุณรู้จัก API ฉันแค่ต้องการให้แน่ใจว่าคุณรู้ว่าคุณกำลังจะเข้าสู่ @YiminRong
Nicolas

ขอบคุณ. ฉันได้รับ OAUTH2 เพื่อการทำงาน แต่มันไม่ได้ส่งคืนข้อมูลที่คาดหวัง โปรดดูการแก้ไขในปัญหา
Yimin Rong

4

คุณสามารถใช้ jQuery Ajax เพื่อเข้าถึง Github API และเพิ่มส่วนหัวการรับรองความถูกต้องพื้นฐานเพื่อรับรองความถูกต้อง (ดูที่นี่ ) ตัวอย่างที่แสดงด้านล่างนี้จะดึงปัญหาสำหรับ repo ที่ระบุและแสดง 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));
        }
    });
});

ด้านล่างนี้เป็นปัญหารายชื่อตัวอย่างสำหรับ repo (สาธารณะ) โดยใช้ 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>


ขอบคุณ. ฉันจะดูโดยเร็วนี้ ฉันไม่ได้รับผลที่คาดหวังโดยใช้ OAUTH2 และผมสังเกตเห็นหนึ่ง API ชี้ให้เห็นว่ามันอาจจะเข้าถึงได้มีการอนุมัติขั้นพื้นฐาน: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 )ดังนั้นอาจใช้การได้
Yimin Rong

การรับรองความถูกต้องเบื้องต้นใช้งานได้สำหรับฉันโดยใช้หนังสือรับรอง GitHub ของฉัน หากคุณต้องการเข้าถึง repo สาธารณะคุณสามารถแสดงความคิดเห็นในส่วน beforeSend!
เทอร์รี่เลนน็อกซ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.