API для аналитика: практический гайд
Зачем аналитику API
- Marketing data — выгрузить spend из Google Ads, Yandex Direct, Facebook.
- Аналитические сервисы — получить данные из Mixpanel, Amplitude, GA.
- Custom integrations — обогатить данные внешним источником.
- Webhooks — получать события в реальном времени.
Без API аналитик ограничен данными в своей БД.
Что такое REST API
REST API — стандарт обмена данными через HTTP.
GET https://api.example.com/users # получить
GET https://api.example.com/users/42 # одного
POST https://api.example.com/users # создать
PUT https://api.example.com/users/42 # обновить
DELETE https://api.example.com/users/42 # удалитьАналитик чаще всего делает GET (читать данные).
Базовый запрос в Python
import requests
response = requests.get('https://api.example.com/users')
if response.status_code == 200:
data = response.json()
print(data)
else:
print(f'Error: {response.status_code}')Параметры
# Query params
response = requests.get(
'https://api.example.com/orders',
params={
'date_from': '2026-04-01',
'date_to': '2026-04-30',
'status': 'paid'
}
)
# URL: https://api.example.com/orders?date_from=2026-04-01&...Аутентификация
API Key (header)
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
response = requests.get('https://api.example.com/data', headers=headers)Basic Auth
response = requests.get(
'https://api.example.com/data',
auth=('username', 'password')
)OAuth (сложнее)
Для Google, Facebook — нужен access token, обычно через flow.
Pagination
API часто возвращает данные постранично:
all_data = []
page = 1
while True:
r = requests.get('https://api.example.com/orders', params={'page': page, 'per_page': 100})
data = r.json()
if not data['results']:
break
all_data.extend(data['results'])
page += 1
print(f'Total: {len(all_data)}')Альтернативы: cursor-based, offset / limit.
Попробовать силы на подобных вопросах проще всего в тренажёре Карьерник — прямо в Telegram, без регистрации через сайт.
Обработка ошибок
try:
response = requests.get('https://api.example.com/data', timeout=10)
response.raise_for_status() # бросит исключение при 4xx/5xx
data = response.json()
except requests.exceptions.Timeout:
print('Timeout')
except requests.exceptions.HTTPError as e:
print(f'HTTP error: {e}')
except requests.exceptions.RequestException as e:
print(f'Error: {e}')Rate limiting
API ограничивают частоту запросов:
import time
for item in items:
response = requests.get(f'https://api.example.com/items/{item}')
process(response.json())
time.sleep(0.1) # 10 запросов в секундуДля production — exponential backoff:
from time import sleep
def safe_request(url, max_retries=5):
for i in range(max_retries):
r = requests.get(url)
if r.status_code == 429: # rate limited
sleep(2 ** i)
continue
return rЗагрузка данных в pandas
import pandas as pd
import requests
r = requests.get('https://api.example.com/orders')
df = pd.DataFrame(r.json()['results'])Дальше работаете с pandas как обычно.
Запись в БД
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@host/db')
df.to_sql('orders_from_api', engine, if_exists='append', index=False)Стандартный pipeline: API → pandas → БД.
Типичные API для аналитика
Marketing
- Google Ads API — performance кампаний.
- Facebook Marketing API.
- Yandex Direct API.
- TikTok Ads API.
Аналитика
- Mixpanel API — events.
- Amplitude API — cohorts.
- GA4 API — Google Analytics.
- PostHog API — open-source аналог.
CRM
- HubSpot API.
- Salesforce API.
- AmoCRM API.
Финансы
- Stripe API — платежи.
- YooKassa API — для РФ.
POST для отправки данных
Реже, но бывает:
response = requests.post(
'https://api.example.com/events',
json={
'user_id': 42,
'event': 'analyzed',
'timestamp': '2026-04-15T10:00:00'
},
headers={'Authorization': 'Bearer KEY'}
)Пройти 30–50 задач по теме за вечер можно в Telegram-тренажёре. Это то, что отличает «знаю» от «уверенно отвечу на собесе».
Webhook vs polling
Polling — мы запрашиваем
Каждые N минут запрашиваем новые данные. Простой, но overhead.
Webhook — нам присылают
Сервис POST-ит на наш endpoint при событии. Эффективнее, но нужен endpoint.
Аналитики чаще используют polling.
Best practices
1. Не хардкодить API keys
# ❌
key = 'sk_live_xyz123'
# ✅
import os
key = os.environ['API_KEY']2. Кэшировать ответы
Если запрос делается часто — кэшируйте:
import requests_cache
session = requests_cache.CachedSession('cache', expire_after=3600)3. Логировать запросы
import logging
logging.info(f'Requesting {url} with params {params}')4. Респектить rate limits
Не сжигайте quota за час. Это badly affect ваш аккаунт.
Postman / Insomnia
Перед написанием Python-кода — попробуйте API в Postman / Insomnia. UI инструменты для тестирования.
OpenAPI / Swagger
Хорошие API имеют документацию в OpenAPI формате. Можно сгенерировать клиент:
openapi-generator generate -i swagger.yaml -g python -o ./clientЧитайте также
FAQ
Что такое 200, 401, 500?
HTTP статус-коды. 200 — OK, 401 — нет доступа, 404 — не найдено, 500 — ошибка сервера.
REST или GraphQL?
REST — стандарт, простой. GraphQL — гибче, но сложнее. Для аналитика обычно REST.
Сколько данных можно скачать?
Зависит от API. Обычно 1000-10000 запросов в день для бесплатных tiers.
Что делать, если API нет?
Скрейпинг (BeautifulSoup, Selenium). Но это серая зона — проверяйте Terms of Service.