REQUESTS ТА API
Курс: Python для аналітиків з нуля
1. ЩО НАВЧИМОСЯ РОБИТИ
Завантажити координати адрес через Nominatim API (безкоштовна геокодування).
API — спосіб програм спілкуватись між собою. Надсилаєш запит, отримуєш JSON з даними. Nominatim, погода, курси валют — все через API.
2. ТЕРМІНОЛОГІЯ
API (Application Programming Interface)Інтерфейс для програм. URL куди надсилаєш запит, отримуєш дані.
HTTP GET
Запит на отримання даних. Найпоширеніший метод.
Query параметри
Дані у URL після знака питання: ?city=Kyiv&format=json
requests.get(url, params)Надіслати GET запит, отримати відповідь.
response.json()Розпарсити JSON з відповіді у Python словник.
timeout
Максимальний час очікування відповіді (секунди). Якщо перевищено — помилка.
3. ТЕОРІЯ
3.1 Як працює API
Приклад: геокодування адреси "Київ, Хрещатик 1"
- Формуєш URL: https://nominatim.openstreetmap.org/search?q=Київ, Хрещатик 1&format=json
- Надсилаєш GET запит
- Отримуєш JSON з координатами
- Парсиш: витягуєш lat, lon
3.2 Базовий запит
import requests3.3 Обробка відповіді
Nominatim повертає список результатів:
[Витягти координати:
data = response.json()3.4 Обробка помилок
Що може піти не так:
- Немає інтернету — timeout
- API недоступний — status_code != 200
- Невалідний JSON — помилка парсингу
Порожній результат — data = []
import requests4. КОД З КОМЕНТАРЯМИ
Геокодування списку адрес з CSV:
import requests5. РОЗБІР ПО РЯДКАХ
headers={'User-Agent': '...'} — ідентифікація. Багато API вимагають це. Nominatim може заблокувати якщо немає.
response.raise_for_status() — викинути виключення якщо код помилки (404, 500 тощо)time.sleep(1) — пауза 1 секунда. Nominatim дозволяє 1 запит/сек. Більше — бан.
df.iterrows() — ітерація по рядках DataFrame. Повертає (індекс, рядок)
result_df['lat'].notna() — булева серія: True де lat не None/NaN6. ЗАВДАННЯ 1: ЗНАЙТИ ПОМИЛКУ
Код геокодує 100 адрес без паузи:
for address in addresses:Відповідь:
Проблема: немає time.sleep() між запитами. Nominatim заблокує після 10-20 запитів.
Виправлено:
for address in addresses:7. ЗАВДАННЯ 2: ПРОМПТ ДЛЯ AI
Задача: завантажити погоду для координат через Open-Meteo API
API: https://api.open-meteo.com/v1/forecast?latitude=48.46&longitude=35.04¤t_weather=true
Приклад промпту:
Напиши функцію get_weather(lat, lon) що використовує Open-Meteo API. URL: https://api.open-meteo.com/v1/forecast. Параметри: latitude, longitude, current_weather=true. Поверни словник: temperature, windspeed, weathercode. Додай обробку помилок (timeout, status code). Використай requests.get() з timeout=5.
8. ЗАВДАННЯ 3 (ОПЦІОНАЛЬНО)
Пагінація: завантажити 1000 записів з API (по 100 за запит)Багато API повертають дані порціями (pagination). Треба робити кілька запитів.
Приклад структури API:
GET /api/data?page=1&per_page=100Підказка:
all_data = []9. РЕФЛЕКСІЯ
Я розумію що таке API
Я вмію робити GET запити через requests
Я знаю як обробляти JSON відповіді
Я додаю timeout та обробку помилок
Я дотримуюсь rate limits (паузи між запитами)10. ЩО ДАЛІ
Модуль 2.5: OSINT бібліотеки — BeautifulSoup для парсингу, folium для карт
Головна думка: API = URL + параметри → JSON з даними. Requests надсилає запити, обробляй помилки, дотримуйся пауз.