Работа со словарем ответа
Итак, полученная при вызове API информация хранится в словаре, и мы можем заняться работой с данными. Для начала построим сводку с обобщенными сведениями — это позволит убедиться в том, что вызов вернул ожидаемую информацию, и перейти к анализу интересующих данных.
python_repos.py
import requests
# Создание вызова API и сохранение ответа.
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code:", r.status_code)
# Сохранение ответа API в переменной.
response_dict = r.json()
(1) print("Total repositories:", response_dict['total_count'])
# Анализ информации о репозиториях.
(2)repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))
# Анализ первого репозитория.
(3)repo_dict = repo_dicts[0]
(4)print(" Keys:", len(repo_dict))
(5)for key in sorted(repo_dict.keys()):
. .print(key)
В точке (1) выводится значение, связанное с 'total_count', которое представляет общее количество репозиториев Python в GitHub.
Значение, связанное с 'items', представляет собой список со словарями, каждый из которых содержит данные об одном репозитории Python. В точке (2) этот список словарей сохраняется в repo_dicts. Затем программа выводит длину repo_dicts, чтобы пользователь видел, по какому количеству репозиториев имеется информация.
Чтобы получить первое представление об информации, возвращенной по каждому репозиторию, программа извлекает первый элемент из repo_dicts и сохраняет его в repo_dict (3). Затем программа выводит количество ключей в словаре — это значение определяет объем доступной информации (4). В точке (5) выводятся все ключи словаря; по ним можно понять, какая информация включена в ответ.
Из сводки начинает вырисовываться более четкая картина полученных данных:
Status code: 200
Total repositories: 713062
Repositories returned: 30
(1) Keys: 68
archive_url
assignees_url
blobs_url
...
url
watchers
watchers_count
API GitHub возвращает подробную информацию о каждом репозитории: в repo_dict 68 ключей (1) . Просмотр ключей дает представление о том, какую информацию можно извлечь о проекте. (Чтобы узнать, какую информацию можно получить через API, следует либо прочитать документацию, либо проанализировать информацию в коде, как мы и поступаем.)
Прочитаем значения некоторых ключей repo_dict:
python_repos.py
...
# Анализ информации о репозиториях.
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))
# Анализ первого репозитория.
repo_dict = repo_dicts[0]
print(" Selected information about first repository:")
(1) print('Name:', repo_dict['name'])
(2)print('Owner:', repo_dict['owner']['login'])
(3)print('Stars:', repo_dict['stargazers_count'])
print('Repository:', repo_dict['html_url'])
(4)print('Created:', repo_dict['created_at'])
(5)print('Updated:', repo_dict['updated_at'])
print('Description:', repo_dict['description'])
В программе выводятся значения, связанные с некоторыми ключами словаря первого репозитория. В точке (1) выводится имя проекта. Владельца проекта представляет целый словарь, поэтому в точке (2) ключ owner используется для обращения к словарю, представляющему владельца, после чего ключ login используется для получения регистрационного имени владельца. В точке (3) выводится количество звезд, заработанных проектом, и URL репозитория GitHub проекта. Далее выводится дата создания (4) и последнего обновления репозитория (5). В завершение выводится описание репозитория; вывод должен выглядеть примерно так:
Status code: 200
Total repositories: 713065
Repositories returned: 30
Selected information about first repository:
Name: httpie
Owner: jkbrzt
Stars: 16101
Repository: https://github.com/jkbrzt/httpie
Created: 2012-02-25T12:39:13Z
Updated: 2015-07-13T14:56:41Z
Description: CLI HTTP client; user-friendly cURL replacement featuring
intuitive UI, JSON support, syntax highlighting, wget-like downloads,
extensions, etc.
Из вывода видно, что на момент написания книги самым «звездным» проектом Python на GitHub был проект HTTPie, владельцем которого является пользователь jkbrzt, и звезды этот проект получил более чем от 16 000 пользователей GitHub. Мы видим URL репозитория проекта, дату создания (февраль 2012 г.) и то, что проект недавно обновлялся. Наконец, из описания следует, что HTTPie помогает выдавать вызовы HTTP из терминала (CLI — сокращение от «Command Line Interface», то есть «интерфейс командной строки»).