Работа со словарем ответа

We use cookies. Read the Privacy and Cookie Policy

Итак, полученная при вызове 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», то есть «интерфейс командной строки»).