เรากำลังทำงานในโครงการที่เราจำเป็นต้องแสดงโครงการทั้งหมดของบุคคลในที่เก็บของเขาในบัญชี GitHub
ใครช่วยแนะนำฉันจะแสดงชื่อของที่เก็บ git ทั้งหมดของบุคคลใดบุคคลหนึ่งโดยใช้ชื่อผู้ใช้ git ได้อย่างไร
เรากำลังทำงานในโครงการที่เราจำเป็นต้องแสดงโครงการทั้งหมดของบุคคลในที่เก็บของเขาในบัญชี GitHub
ใครช่วยแนะนำฉันจะแสดงชื่อของที่เก็บ git ทั้งหมดของบุคคลใดบุคคลหนึ่งโดยใช้ชื่อผู้ใช้ git ได้อย่างไร
คำตอบ:
คุณสามารถใช้github apiสำหรับสิ่งนี้ กดปุ่มhttps://api.github.com/users/USERNAME/repos
จะแสดงรายการที่เก็บสาธารณะสำหรับผู้ใช้USERNAME
ใช้Github API :
/users/:user/repos
สิ่งนี้จะทำให้คุณมีที่เก็บสาธารณะทั้งหมดของผู้ใช้ หากคุณต้องการค้นหาที่เก็บส่วนตัวคุณจะต้องพิสูจน์ตัวตนในฐานะผู้ใช้รายนั้น ๆ จากนั้นคุณสามารถใช้การโทร REST:
/user/repos
เพื่อหาทุก Repos ของผู้ใช้
ในการทำสิ่งนี้ใน Python ให้ทำดังนี้:
USER='AUSER'
API_TOKEN='ATOKEN'
GIT_API_URL='https://api.github.com'
def get_api(url):
try:
request = urllib2.Request(GIT_API_URL + url)
base64string = base64.encodestring('%s/token:%s' % (USER, API_TOKEN)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
result = urllib2.urlopen(request)
result.close()
except:
print 'Failed to get api request from %s' % url
โดยที่ url ส่งไปยังฟังก์ชันคือ REST url ดังตัวอย่างด้านบน หากคุณไม่จำเป็นต้องตรวจสอบสิทธิ์ให้แก้ไขวิธีการเพื่อลบการเพิ่มส่วนหัวการอนุญาต จากนั้นคุณสามารถรับ URL API สาธารณะโดยใช้คำขอ GET แบบธรรมดา
?per_page=100
เพื่อรับจำนวนสูงสุด แต่ถ้าผู้ใช้มีมากกว่าหนึ่งร้อย repos คุณจะต้องติดตามnext
URL หลายรายการในLink
ส่วนหัวHTTP ที่ส่งพร้อมกับการตอบกลับ
ลองใช้curl
คำสั่งต่อไปนี้เพื่อแสดงรายการที่เก็บ:
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'
หากต้องการแสดงรายการ URL ที่โคลนให้เรียกใช้:
GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'
หากเป็นแบบส่วนตัวคุณต้องเพิ่มคีย์ API ของคุณ ( access_token=GITHUB_API_TOKEN
) ตัวอย่างเช่น:
curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url
หากผู้ใช้เป็นองค์กรให้ใช้/orgs/:username/repos
แทนเพื่อส่งคืนที่เก็บทั้งหมด
หากต้องการโคลนโปรดดู: จะโคลน repos ทั้งหมดพร้อมกันจาก GitHub ได้อย่างไร
ดูเพิ่มเติม: วิธีดาวน์โหลด GitHub Release จาก repo ส่วนตัวโดยใช้บรรทัดคำสั่ง
per_page=1000
.
-s
ตัวเลือกให้กับcurl
คำสั่งของคุณเพื่อกำจัดแถบความคืบหน้าที่ไม่น่าดูเช่นในcurl -s ...
/orgs/:username/repos
ส่งคืน repos ทั้งหมด /users/...
คืนส่วนของพวกเขานี่เป็นเรื่องแปลกจริงๆ ชื่อผู้ใช้สามารถถือเป็นทั้งผู้ใช้หรือองค์กร
หากคุณติดตั้งjqคุณสามารถใช้คำสั่งต่อไปนี้เพื่อแสดงรายการ repos สาธารณะทั้งหมดของผู้ใช้
curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'
คุณอาจต้องการโซลูชัน jsonp:
https://api.github.com/users/[user name]/repos?callback=abc
หากคุณใช้ jQuery:
$.ajax({
url: "https://api.github.com/users/blackmiaool/repos",
jsonp: true,
method: "GET",
dataType: "json",
success: function(res) {
console.log(res)
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
reposโมดูล NPM คว้า JSON สำหรับ repos สาธารณะทั้งหมดสำหรับผู้ใช้หรือกลุ่มบางคน คุณสามารถเรียกใช้สิ่งนี้ได้โดยตรงnpx
ดังนั้นคุณจึงไม่จำเป็นต้องติดตั้งอะไรเลยเพียงแค่เลือกองค์กรหรือผู้ใช้ ("W3C" ที่นี่):
$ npx repos W3C W3Crepos.json
สิ่งนี้จะสร้างไฟล์ชื่อ W3Crepos.json Grep ดีพอที่จะดึงรายการ repos:
$ grep full_name W3Crepos.json
ข้อดี:
ข้อเสีย:
npx
(หรือnpm
หากคุณต้องการติดตั้งจริง)ดึงรายการที่เก็บสาธารณะทั้งหมดของผู้ใช้ GitHub โดยใช้ Python:
import requests
username = input("Enter the github username:")
request = requests.get('https://api.github.com/users/'+username+'/repos')
json = request.json()
for i in range(0,len(json)):
print("Project Number:",i+1)
print("Project Name:",json[i]['name'])
print("Project URL:",json[i]['svn_url'],"\n")
ตอนนี้มีตัวเลือกให้ใช้GraphQL API Explorer ที่ยอดเยี่ยม
ฉันต้องการรายชื่อ repos ที่ใช้งานอยู่ทั้งหมดขององค์กรของฉันในภาษานั้น ๆ แบบสอบถามนี้ทำเพียงแค่นั้น:
{
organization(login: "ORG_NAME") {
repositories(isFork: false, first: 100, orderBy: {field: UPDATED_AT, direction: DESC}) {
pageInfo {
endCursor
}
nodes {
name
updatedAt
languages(first: 5, orderBy: {field: SIZE, direction: DESC}) {
nodes {
name
}
}
primaryLanguage {
name
}
}
}
}
}
หากกำลังมองหา repos ขององค์กร -
api.github.com/orgs/$NAMEOFORG/repos
ตัวอย่าง:
curl https://api.github.com/orgs/arduino-libraries/repos
นอกจากนี้คุณสามารถเพิ่มพารามิเตอร์ per_page เพื่อรับชื่อทั้งหมดในกรณีที่มีปัญหาการแบ่งหน้า -
curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100
นี่คือข้อมูลจำเพาะทั้งหมดสำหรับ repos API:
https://developer.github.com/v3/repos/#list-repositories-for-a-user
GET /users/:username/repos
พารามิเตอร์สตริงการสืบค้น:
5 รายการแรกมีการบันทึกไว้ในลิงก์ API ด้านบน พารามิเตอร์สำหรับpage
และper_page
ที่จัดทำเอกสารไว้ที่อื่นและมีประโยชน์ในคำอธิบายแบบเต็ม
type
(สตริง): สามารถเป็นหนึ่งall
, ,owner
member
ค่าเริ่มต้น:owner
sort
(สตริง): สามารถเป็นหนึ่งcreated
, updated
, ,pushed
full_name
ค่าเริ่มต้น:full_name
direction
(สตริง): สามารถเป็นหนึ่งหรือasc
desc
ค่าเริ่มต้น: asc
เมื่อใช้full_name
งานเป็นอย่างอื่นdesc
page
(จำนวนเต็ม): หน้าปัจจุบันper_page
(จำนวนเต็ม): จำนวนระเบียนต่อหน้าเนื่องจากนี่คือ HTTP GET API นอกเหนือจาก cURL คุณสามารถลองใช้งานได้ง่ายๆในเบราว์เซอร์ ตัวอย่างเช่น:
https://api.github.com/users/grokify/repos?per_page=1&page=2
HTML
<div class="repositories"></div>
JavaScript
// Github repos
หากคุณต้องการที่จะ จำกัด การเก็บรายการคุณก็สามารถเพิ่มหลัง?per_page=3
username/repos
เช่น username/repos?per_page=3
แทนที่จะใส่ / username
/ คุณสามารถใส่ชื่อผู้ใช้ของบุคคลใดก็ได้ใน Github
var request = new XMLHttpRequest();
request.open('GET','https://api.github.com/users/username/repos' ,
true)
request.onload = function() {
var data = JSON.parse(this.response);
console.log(data);
var statusHTML = '';
$.each(data, function(i, status){
statusHTML += '<div class="card"> \
<a href=""> \
<h4>' + status.name + '</h4> \
<div class="state"> \
<span class="mr-4"><i class="fa fa-star mr-2"></i>' + status.stargazers_count + '</span> \
<span class="mr-4"><i class="fa fa-code-fork mr-2"></i>' + status.forks_count + '</span> \
</div> \
</a> \
</div>';
});
$('.repositories').html(statusHTML);
}
request.send();
โค้ด JS ด้านล่างมีไว้สำหรับใช้ในคอนโซล
username = "mathieucaroff";
w = window;
Promise.all(Array.from(Array(Math.ceil(1+184/30)).keys()).map(p =>
fetch(`//api.github.com/users/{username}/repos?page=${p}`).then(r => r.json())
)).then(all => {
w.jo = [].concat(...all);
// w.jo.sort();
// w.jof = w.jo.map(x => x.forks);
// w.jow = w.jo.map(x => x.watchers)
})
คำตอบคือ "/ users /: user / repo" แต่ฉันมีโค้ดทั้งหมดที่ทำในโปรเจ็กต์โอเพนซอร์สที่คุณสามารถใช้เพื่อตั้งค่าเว็บแอปพลิเคชันบนเซิร์ฟเวอร์
ฉันยืนขึ้นโครงการ GitHub ชื่อGit-Captainที่สื่อสารกับ GitHub API ที่แสดงรายการ repos ทั้งหมด
เป็นเว็บแอปพลิเคชันโอเพ่นซอร์สที่สร้างด้วย Node.js โดยใช้ GitHub API เพื่อค้นหาสร้างและลบสาขาในที่เก็บ GitHub จำนวนมาก
สามารถตั้งค่าสำหรับองค์กรหรือผู้ใช้คนเดียว
ฉันมีวิธีตั้งค่าทีละขั้นตอนเช่นกันใน read-me
ในการรับ URL ที่เก็บสาธารณะ 100 รายการของผู้ใช้:
$.getJSON("https://api.github.com/users/suhailvs/repos?per_page=100", function(json) {
var resp = '';
$.each(json, function(index, value) {
resp=resp+index + ' ' + value['html_url']+ ' -';
console.log(resp);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
const request = require('request');
const config = require('config');
router.get('/github/:username', (req, res) => {
try {
const options = {
uri: `https://api.github.com/users/${req.params.username}/repos?per_page=5
&sort=created:asc
&client_id=${config.get('githubClientId')}
&client_secret=${config.get('githubSecret')}`,
method: 'GET',
headers: { 'user-agent': 'node.js' }
};
request(options, (error, response, body) => {
if (error) console.log(error);
if (response.statusCode !== 200) {
res.status(404).json({ msg: 'No Github profile found.' })
}
res.json(JSON.parse(body));
})
} catch (err) {
console.log(err.message);
res.status(500).send('Server Error!');
}
});
?per_page=
developer.github.com/v3/#pagination