Программно собирать статистику проектов GitHub?

I'm collecting GitHub issue statistics over time on our project: total number of issues, number of issues with a particular label, number of issues in a given state (open/closed). Right now, I have a Python script to parse the project webpage with the desired labeling/state for the info I want, e.g.,

http://github.com/<projectname>/issues?label=<label_of_interest>&state=<state_of_interest>
However, parsing the HTML is fragile since if the GitHub API changes, more often than not, my code fails.

Кто-нибудь описывает, как использовать GitHub API (или, за исключением этого, знать какой-то другой способ, предпочтительно на Python) для сбора этой статистики, не полагаясь на базовый HTML?


person braymp    schedule 05.07.2013    source источник
comment
Этот сайт может быть полезен, он делает нечто подобное website.clearpoint.co.nz/gitstats /index.html   -  person user1255162    schedule 26.06.2015


Ответы (3)


Могу ли я предложить вам использовать для этого мою оболочку GitHub API? С помощью github3.py вы можете сделать следующее:

import github3

github = github3.login("braymp", "braymp's super secret password")
repo = github.repository("owner", "reponame")
open_issues = [i for i in repo.iter_issues()]
closed_issues = [i for i in repo.iter_issues(state='closed')]

Вызов refresh может быть необходим, потому что я, честно говоря, не помню, отправляет ли GitHub всю информацию о проблеме после такой итерации (например, заменить i.refresh() for i in <generator> в тексте списка выше).

С ними вы можете перебирать два списка и использовать атрибут labels для каждой задачи, чтобы выяснить, какие ярлыки относятся к задаче. Если вы решите объединить два списка, вы всегда можете проверить статус проблемы с помощью метода is_closed.

Подозреваю, что актуальную статистику вы можете сделать сами. :)

Документацию по github3.py можно найти в ReadTheDocs, и вас особенно заинтересует Ошибка и Repository объекты.

Вы также можете задать дополнительные вопросы о github3.py, добавив соответствующий тег в свой вопрос StackOverflow.

Ваше здоровье!

person Ian Stapleton Cordasco    schedule 05.07.2013
comment
Спасибо @sigmavirus24 (и извините за задержку с принятием вашего ответа). Кажется, это работает для меня. - person braymp; 09.09.2013
comment
Не беспокойтесь @braymp рад помочь - person Ian Stapleton Cordasco; 11.09.2013

Я бы посмотрел на Octokit. Который в настоящее время не поддерживает Python, но предоставляет поддерживаемый интерфейс API GitHub для Ruby.

https://github.com/blog/1517-introduction-octokit

person spkane    schedule 11.07.2013

Хотя это не полностью соответствует вашим спецификациям (часть «предпочтительно Python»), Octokit фантастический (и официальный — он разработан GitHub) способ взаимодействия с GitHub API. Вы написали, что хотели бы получить данные о проблемах. Это так же просто, как установить, запросить библиотеку и получить данные (аутентификация не требуется, если проект является общедоступным).

Установить:

gem install octokit

Добавьте это в свой файл Ruby, чтобы потребовать библиотеку Octokit:

require 'octokit'

Хотя есть много вещей, которые вы можете получить от Octokit::Client::Issues вы можете получить разбитый на страницы список всех проблем в репозитории:

Octokit.list_issues('octokit/octokit.rb')
  # => [Array<Sawyer::Resource>] A list of issues for a repository.

Если вы действительно заинтересованы в использовании Python, вы можете ознакомиться с документацией GitHub API для решения проблем. . На самом деле, это так же просто, как получить URL-адрес, например: https://api.github.com/repos/octokit/octokit.rb/issues и получить данные JSON (хотя я не знаком с Python, я уверен, что это какая-то библиотека для разбора JSON); нет необходимости в аутентификации для общедоступных репозиториев.

person Community    schedule 09.09.2013