М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет281/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   277   278   279   280   281   282   283   284   ...   334
Байланысты:
Изучаем Python

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/
.


Итоги


Достарыңызбен бөлісу:
1   ...   277   278   279   280   281   282   283   284   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет