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'])