<p>Сводка самых популярных репозиториев</p>

При построении визуализации этих данных на диаграмму необходимо нанести более одного репозитория. Напишем цикл для вывода информации о каждом репозитории, возвращаемом вызовом API, чтобы все эти репозитории можно было включить в визуализацию:

python_repos.py

...

# Анализ информации о репозиториях.

repo_dicts = response_dict['items']

print("Repositories returned:", len(repo_dicts))

(1) print("\nSelected information about each repository:")

(2)for repo_dict in repo_dicts:

. .print('\nName:', repo_dict['name'])

. .print('Owner:', repo_dict['owner']['login'])

. .print('Stars:', repo_dict['stargazers_count'])

. .print('Repository:', repo_dict['html_url'])

. .print('Description:', repo_dict['description'])

В точке (1) выводится приветственное сообщение. В точке (2) перебираются все словари в repo_dicts. Внутри цикла выводится имя каждого проекта, его владелец, количество звезд, URL на GitHub и краткое описание проекта:

Status code: 200

Total repositories: 713067

Repositories returned: 30

Selected information about each repository:

Name: httpie

Owner: jkbrzt

Stars: 16101

Repository: https://github.com/jkbrzt/httpie

Description: CLI HTTP client; user-friendly cURL replacement featuring

intuitive UI, JSON support, syntax highlighting, wget-like downloads,

extensions, etc.

Name: django

Owner: django

Stars: 15028

Repository: https://github.com/django/django

Description: The Web framework for perfectionists with deadlines.

...

Name: powerline

Owner: powerline

Stars: 4315

Repository: https://github.com/powerline/powerline

Description: Powerline is a statusline plugin for vim, and provides

statuslines and prompts for several other applications, including zsh, bash,

tmux, IPython, Awesome and Qtile.

В этих результатах встречаются интересные проекты; возможно, вам стоит присмотреться к некоторым из них… Но не увлекайтесь, потому что мы собираемся создать визуализацию, которая существенно упростит чтение результатов.

<p>Проверка ограничений частоты обращений API</p>

Многие API ограничивают частоту обращений; иначе говоря, существует предел для количества запросов в определенный промежуток времени. Чтобы ­узнать, не приближаетесь ли вы к ограничениям GitHub, введите в браузере адрес https://api.github.com/rate_limit. Вы получите ответ, который выглядит примерно так:

{

"resources": {

. ."core": {

. . "limit": 60,

. . "remaining": 58,

. . "reset": 1426082320

. .},

(1) . ."search": {

(2) . . "limit": 10,

(3) . . "remaining": 8,

(4) . . "reset": 1426078803

. .}

},

"rate": {

. ."limit": 60,

. ."remaining": 58,

. ."reset": 1426082320

}

}

В этих данных нас интересует частота обращений для поискового API (1) . В точке (2) видно, что предельная частота составляет 10 запросов в минуту и что на текущую минуту осталось еще 8 запросов (3). Значение reset представляет Unix-время, или эпохальное время (число секунд, прошедших с полуночи 1 января 1970 года) момента, когда произойдет сброс квоты (4). При достижении предельного количества обращений вы получите короткий ответ, уведомляющий о достижении предела API. Если вы достигнете предела, просто подождите, пока квота будет сброшена.

Примечание

Многие API требуют регистрации и получения ключа API для совершения вызовов. На момент ­написания для GitHub такого требования не было, но, если вы получите ключ API, предельная частота обращений для ваших программ значительно увеличится.

<p>Визуализация репозиториев с использованием Pygal</p>

Теперь, с появлением интересных данных, мы построим визуализацию, демонстрирующую относительную популярность проектов Python в GitHub. Мы построим интерактивную столбцовую диаграмму: высота каждого столбца будет представлять количество звезд у проекта. Щелчок на столбце будет открывать домашнюю страницу проекта на GitHub. Первая попытка выглядит так:

python_repos.py

import requests

import pygal

from pygal.style import LightColorizedStyle as LCS, LightenStyle as LS

# Создание вызова API и сохранение ответа.

URL = 'https://api.github.com/search/repositories?q=language:python&sort=star'

r = requests.get(URL)

print("Status code:", r.status_code)

# Сохранение ответа API в переменной.

response_dict = r.json()

print("Total repositories:", response_dict['total_count'])

# Анализ информации о репозиториях.

repo_dicts = response_dict['items']

(1) names, stars = [], []

for repo_dict in repo_dicts:

(2) . .names.append(repo_dict['name'])

. .stars.append(repo_dict['stargazers_count'])

# Построение визуализации.

(3)my_style = LS('#333366', base_style=LCS)

(4)chart = pygal.Bar(style=my_style, x_label_rotation=45, show_ legend=False)

chart.title = 'Most-Starred Python Projects on GitHub'

chart.x_labels = names

(5)chart.add('', stars)

chart.render_to_file('python_repos.svg')

Перейти на страницу:

Все книги серии Библиотека программиста

Похожие книги