hn_submissions.py
from operator import itemgetter
import requests
# Создание вызова API и сохранение ответа.
❶
url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print(f"Status code: {r.status_code}")
# Обработка информации о каждой статье.
❷
submission_ids = r.json()
❸
submission_dicts = []
for submission_id in submission_ids[:30]:
# Создание отдельного вызова API для каждой статьи.
❹
url = f"https://hacker-news.firebaseio.com/v0/item/{submission_id}.json"
r = requests.get(url)
print(f"id: {submission_id}\tstatus: {r.status_code}")
response_dict = r.json()
# Построение словаря для каждой статьи.
❺
submission_dict = {
'title': response_dict['title'],
'hn_link': f"http://news.ycombinator.com/item?id={submission_id}",
'comments': response_dict['descendants'],
}
❻
submission_dicts.append(submission_dict)
❼
submission_dicts = sorted(submission_dicts, key=itemgetter('comments'),
reverse=True)
❽
for submission_dict in submission_dicts:
print(f"\nTitle: {submission_dict['title']}")
print(f"Discussion link: {submission_dict['hn_link']}")
print(f"Comments: {submission_dict['comments']}")
Сначала программа создает вызов API и выводит статус ответа
. Этот вызов API
возвращает список идентификаторов 500 самых популярных статей на Hacker News
на момент выдачи вызова. Текст ответа преобразуется в список Python
, который
сохраняется в переменной
submission_ids
. Идентификаторы будут использованы
для построения набора словарей, каждый из которых содержит информацию об
одной из текущих статей.
390
Глава 17 • Работа с API
В точке
создается пустой список с именем
submission_dicts
для хранения сло-
варей. Далее программа перебирает идентификаторы 30 самых популярных статей
и выдает новый вызов API для каждой статьи, генерируя URL с текущим значением
submission_id
. Также выводится статус каждого запроса, чтобы мы могли про-
верить, успешно ли он был обработан.
В точке
создается словарь для текущей обрабатываемой статьи, в котором со-
храняется заголовок статьи, ссылка на страницу с ее обсуждением и количество
комментариев к статье. Затем каждый элемент
submission_dict
присоединяется
к списку
submission_dicts
.
Статьи Hacker News ранжируются по общей системе, основанной на нескольких
факторах: сколько раз за статью голосовали, сколько комментариев она получила
и давно ли была опубликована. Требуется отсортировать список словарей по ко-
личеству комментариев. Для этого мы используем функцию
itemgetter()
из
модуля
operator
. Мы передаем этой функции ключ
'comments'
, а она извлекает
значение, связанное с данным ключом, из каждого словаря в списке. Функция
sorted()
затем использует это значение для сортировки списка. Мы сортируем
список в обратном порядке, чтобы публикации с наибольшим количеством ком-
ментариев оказались на первом месте.
После того как список будет отсортирован, мы перебираем элементы
и выво-
дим для каждой из самых популярных статей три атрибута: заголовок, ссылку на
страницу обсуждения и текущее количество комментариев:
Status code: 200
id: 19155826 status: 200
id: 19180181 status: 200
id: 19181473 status: 200
...
Title: Nasa's Mars Rover Opportunity Concludes a 15-Year Mission
Discussion link: http://news.ycombinator.com/item?id=19155826
Comments: 220
Title: Ask HN: Is it practical to create a software-controlled model rocket?
Discussion link: http://news.ycombinator.com/item?id=19180181
Comments: 72
Title: Making My Own USB Keyboard from Scratch
Discussion link: http://news.ycombinator.com/item?id=19181473
Comments: 62
...
Аналогичный процесс применяется для обращения и анализа информации из лю-
бого API. С такими данными вы сможете построить визуализацию, показывающую,
какие публикации вызывали наиболее активные обсуждения за последнее время.
Этот метод также лежит в основе приложений, предоставляющих специализиро-
ванные средства чтения таких сайтов, как Hacker News. Чтобы больше узнать об
информации, доступной через Hacker News API, посетите страницу документации
по адресу
https://github .com/HackerNews/API/
.
Итоги
Достарыңызбен бөлісу: |