Получение 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);
        }
    });

получить авторов из файла GiHub

Используя 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
Другие вопросы по тегам