Читаем Изучаем Python полностью

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

# Обработка информации о каждой статье.

(2)submission_ids = r.json()

(3)submission_dicts = []

for submission_id in submission_ids[:30]:

. .# Создание отдельного вызова API для каждой статьи.

(4) . .url = ('https://hacker-news.firebaseio.com/v0/item/' +

. . . . . .str(submission_id) + '.json')

. .submission_r = requests.get(url)

. .print(submission_r.status_code)

. .response_dict = submission_r.json()

. .

(5) . .submission_dict = {

. . . .'title': response_dict['title'],

. . . .'link': 'http://news.ycombinator.com/item?id=' + str(submission_id),

? . . . .'comments': response_dict.get('descendants', 0)

. . . .}

. .submission_dicts.append(submission_dict)

. .

? submission_dicts = sorted(submission_dicts, key=itemgetter('comments'),

. . . . . . . . . . . . . .reverse=True)

? for submission_dict in submission_dicts:

. .print("\nTitle:", submission_dict['title'])

. .print("Discussion link:", submission_dict['link'])

. .print("Comments:", submission_dict['comments'])

Сначала программа создает вызов API и выводит статус ответа (1) . Этот вызов API возвращает список идентификаторов 500 самых популярных статей на Hacker News на момент выдачи вызова. Текст ответа преобразуется в список Python (2), который сохраняется в переменной submission_ids. Идентификаторы будут использованы для построения набора словарей, каждый из которых содержит информацию об ­одной из текущих статей.

В точке (3) создается пустой список с именем submission_dicts для хранения словарей. Далее программа перебирает идентификаторы 30 самых популярных статей и выдает новый вызов API для каждой статьи, генерируя URL с текущим значением submission_id (4). Также выводится статус каждого запроса, чтобы мы могли проверить, успешно ли он был обработан.

В точке (5) создается словарь для текущей обрабатываемой статьи, в котором сохраняется заголовок статьи и ссылка на страницу с ее обсуждением. В точке ? сохраняется количество комментариев в словаре. Если статья еще не имеет комментариев, ключ 'descendants' отсутствует. Если вы не уверены, существует ли ключ в словаре, используйте метод dict.get(), который возвращает значение, связанное с ключом (если он существует), или значение, заданное вами (если ключ не существует), — 0 в данном примере. Наконец, словарь submission_dict присоединяется к списку submission_dicts.

Статьи Hacker News ранжируются по общей системе, основанной на нескольких факторах: сколько раз за статью голосовали, сколько комментариев она получила и давно ли была опубликована. Требуется отсортировать список словарей по количеству комментариев. Для этого мы используем функцию itemgetter() ? из модуля operator. Мы передаем этой функции ключ 'comments', а она извлекает значение, связанное с данным ключом, из каждого словаря в списке. Функция sorted() затем использует это значение для сортировки списка. Мы сортируем список в обратном порядке, чтобы публикации с наибольшим количеством комментариев оказались на первом месте.

После того как список будет отсортирован, мы перебираем элементы ? и выводим для каждой из самых популярных статей три атрибута: заголовок, ссылку на страницу обсуждения и текущее количество комментариев:

Status code: 200

200

200

200

..

Title: Firefox deactivates Flash by default

Discussion link: http://news.ycombinator.com/item?id=9883246

Comments: 231

Title: New Horizons: Nasa spacecraft speeds past Pluto

Discussion link: http://news.ycombinator.com/item?id=9884165

Comments: 142

Title: Iran Nuclear Deal Is Reached With World Powers

Discussion link: http://news.ycombinator.com/item?id=9884005

Comments: 141

Title: Match Group Buys PlentyOfFish for $575M

Discussion link: http://news.ycombinator.com/item?id=9884417

Comments: 75

Title: Our Nexus 4 devices are about to explode

Discussion link: http://news.ycombinator.com/item?id=9885625

Comments: 14

...

Аналогичный процесс применяется для обращения и анализа информации из любого API. С такими данными вы сможете построить визуализацию, показыва­ющую, какие публикации вызывали наиболее активные обсуждения в последнее время.

Упражнения

17-1. Другие языки: измените вызов API в программе python_repos.py так, чтобы на диаграмме отображались самые популярные проекты на других языках. Попробуйте такие языки, как JavaScript, Ruby, C, Java, Perl, Haskell и Go.

17-2. Активные обсуждения: на основании данных из hn_submissions.py постройте столбцовую диаграмму самых активных обсуждений, проходящих на Hacker News. Высота каждого столбца должна соответствовать количеству комментариев к каждой статье. Метка столбца должна включать заголовок статьи, а сам столбец должен служить ссылкой на страницу обсуждения этой публикации.

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

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

Программист-фанатик
Программист-фанатик

В этой книге вы не найдете описания конкретных технологий, алгоритмов и языков программирования — ценность ее не в этом. Она представляет собой сборник практических советов и рекомендаций, касающихся ситуаций, с которыми порой сталкивается любой разработчик: отсутствие мотивации, выбор приоритетов, психология программирования, отношения с руководством и коллегами и многие другие. Подобные знания обычно приходят лишь в результате многолетнего опыта реальной работы. По большому счету перед вами — ярко и увлекательно написанное руководство, которое поможет быстро сделать карьеру в индустрии разработки ПО любому, кто поставил себе такую цель. Конечно, опытные программисты могут найти некоторые идеи автора достаточно очевидными, но и для таких найдутся темы, которые позволят пересмотреть устоявшиеся взгляды и выйти на новый уровень мастерства. Для тех же, кто только в самом начале своего пути как разработчика, чтение данной книги, несомненно, откроет широчайшие перспективы. Издательство выражает благодарность Шувалову А. В. и Курышеву А. И. за помощь в работе над книгой.

Чед Фаулер

Программирование, программы, базы данных / Программирование / Книги по IT

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных