Python · API · Начальный уровень
Пагинация
Проходите по многостраничным ответам API, чтобы собрать все результаты.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Паттерны пагинации
#Справочник пагинации
#Упражнения:
Получить конкретную страницу
#Получите 3-ю страницу списка продуктов с page_size=10. Выведите название каждого продукта на этой странице.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Получите 3-ю страницу и выведите названия продуктов
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
params = {'page': 3, 'page_size': 10}
response = requests.get(f'{BASE_URL}/api/products/', params=params)
for product in response.json()['results']:
print(product['name'])
Вычислить количество страниц
#Получите список продуктов с page_size=20. Вычислите и выведите общее количество страниц, необходимых для просмотра всех продуктов.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Вычислите количество страниц для page_size=20
Решение
import requests
import math
BASE_URL = 'https://apilearn.tukas.dev'
PAGE_SIZE = 20
data = requests.get(f'{BASE_URL}/api/products/', params={'page_size': PAGE_SIZE}).json()
total_pages = math.ceil(data['count'] / PAGE_SIZE)
print(f'{data["count"]} продуктов на {total_pages} страницах')
Собрать все продукты категории
#Соберите все продукты в категории "kitchen" в список, следуя за URL next. Выведите общее количество собранных продуктов.
import requests
BASE_URL = 'https://apilearn.tukas.dev'
all_products = []
url = f'{BASE_URL}/api/products/'
params = {'category': 'kitchen'}
# Пройдите все страницы товаров kitchen
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
all_products = []
url = f'{BASE_URL}/api/products/'
params = {'category': 'kitchen'}
while url:
data = requests.get(url, params=params).json()
all_products.extend(data['results'])
url = data['next']
params = {}
print(len(all_products))
Собрать все названия продуктов
#Соберите названия всех продуктов в каталоге (все страницы) в список. Выведите общее количество и название последнего продукта в списке.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Соберите все названия продуктов по всем страницам
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
all_names = []
url = f'{BASE_URL}/api/products/'
while url:
data = requests.get(url).json()
for product in data['results']:
all_names.append(product['name'])
url = data['next']
print(len(all_names))
print(all_names[-1])
Найти самый дорогой продукт
#Найдите самый дорогой продукт в каталоге без получения всех страниц. Выведите его название и цену.
import requests BASE_URL = 'https://apilearn.tukas.dev' # Эффективно найдите самый дорогой продукт
Решение
import requests
BASE_URL = 'https://apilearn.tukas.dev'
params = {'ordering': '-price', 'page_size': 1}
data = requests.get(f'{BASE_URL}/api/products/', params=params).json()
product = data['results'][0]
print(product['name'])
print(product['price'])