Получение Github отдельных участников
Я планирую создать плагин для плагина системы документации Sphinx, который показывает имена и ссылки на профили Github людей, которые внесли свой вклад в страницу документации.
Github имеет эту функцию внутри
Можно ли получить ссылки на профили Github авторов файлов через Github API? Обратите внимание, что электронных писем коммитера недостаточно, необходимо связать их со ссылкой на профиль пользователя Github. Также обратите внимание, что я не хочу всех участников репозитория - только отдельных участников файла.
Если это невозможно, то какие альтернативные методы (частный API, очистка) вы могли бы предложить извлечь эту информацию из Github?
3 ответа
Во-первых, вы можете показать коммиты для данного файла:
https://api.github.com/repos/:owner/:repo/commits?path=PATH_TO_FILE
Например:
https://api.github.com/repos/git/git/commits?path=README
Во-вторых, ответ JSON в разделе автора содержит URL-адрес с именем 'html_url
'к профилю GitHub:
"author": {
"login": "gitster",
"id": 54884,
"avatar_url": "https://0.gravatar.com/avatar/750680c9dcc7d0be3ca83464a0da49d8?d=https%3A%2F%2Fidenticons.github.com%2Ff8e73a1fe6b3a5565851969c2cb234a7.png",
"gravatar_id": "750680c9dcc7d0be3ca83464a0da49d8",
"url": "https://api.github.com/users/gitster",
"html_url": "https://github.com/gitster", <==========
"followers_url": "https://api.github.com/users/gitster/followers",
"following_url": "https://api.github.com/users/gitster/following{/other_user}",
"gists_url": "https://api.github.com/users/gitster/gists{/gist_id}",
"starred_url": "https://api.github.com/users/gitster/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/gitster/subscriptions",
"organizations_url": "https://api.github.com/users/gitster/orgs",
"repos_url": "https://api.github.com/users/gitster/repos",
"events_url": "https://api.github.com/users/gitster/events{/privacy}",
"received_events_url": "https://api.github.com/users/gitster/received_events",
"type": "User"
},
Так что вам не нужно ломать здесь какую-либо веб-страницу.
Вот очень грубый jsfiddle, чтобы проиллюстрировать это на основе выдержки из JavaScript:
var url = "https://api.github.com/repos/git/git/commits?path=" + filename
$.getJSON(url, function(data) {
var twitterList = $("<ul />");
$.each(data, function(index, item) {
if(item.author) {
$("<li />", {
"text": item.author.html_url
}).appendTo(twitterList);
}
});
Используя GraphQL API v4, вы можете использовать:
{
repository(owner: "torvalds", name: "linux") {
object(expression: "master") {
... on Commit {
history(first: 100, path: "MAINTAINERS") {
nodes {
author {
email
name
user {
email
name
avatarUrl
login
url
}
}
}
}
}
}
}
}
Используя curl & jq, вы получите список первых 100 авторов этого файла без дубликатов:
TOKEN=<YOUR_TOKEN>
OWNER=torvalds
REPO=linux
BRANCH=master
FILEPATH=MAINTAINERS
curl -s -H "Authorization: token $TOKEN" \
-H "Content-Type:application/json" \
-d '{
"query": "{repository(owner: \"'"$OWNER"'\", name: \"'"$REPO"'\") {object(expression: \"'"$BRANCH"'\") { ... on Commit { history(first: 100, path: \"'"$FILEPATH"'\") { nodes { author { email name user { email name avatarUrl login url}}}}}}}}"
}' https://api.github.com/graphql | \
jq '[.data.repository.object.history.nodes[].author| {name,email}]|unique'
Зачем вам для этого нужно использовать Github API? Вы можете просто клонировать пакет и использовать git log
:
git log --format=format:%an path/to/file ver1..ver2 |sort |uniq
До тех пор, пока нет необходимости напрямую взаимодействовать с API GITHUB, можно получить список участников, клонировав репо, а затем войдя в клонированный каталог и затем получив список из файла журнала github с помощью команды shortlog
import os
import commands
cmd = "git shortlog -s -n"
os.chdir("C:\Users\DhruvOhri\Documents\COMP 6411\pygithub3-0.3")
os.system("git clone https://github.com/poise/python.git")
os.chdir("/home/d/d_ohri/Desktop/python")
output = commands.getoutput(cmd)
print(output)
raw_input("press enter to continue")
Существует еще один способ составить список участников, если кто-то хочет использовать GITHUB API, мы можем использовать оболочку pytgithub3 для взаимодействия с GITHUB API и получить список участников следующим образом, используя list_contributors:
from pytgithub3.services.repo import Repo
r = Repo()
r.lis_contributors(user='userid/author',repo='repo name')
for page in r:
for result in page:
print result