Реалізація експорту отриманих даних (CSV/JSON/API)
Отримані дані потрібні у різних форматах: аналітичні команди потребують CSV для Excel, розробники потребують JSON через API, інтеграції з іншими системами потребують вебхуків або прямого доступу до endpoint-ів.
Експорт CSV
Для великих обсягів (>10k рядків) ми не генеруємо весь файл у пам'яті — ми потокуємо його:
import csv
import io
from flask import Response, stream_with_context
def export_csv(site_id: int, filters: dict):
def generate():
output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=[
'id', 'name', 'price', 'currency', 'url', 'in_stock', 'scraped_at'
])
writer.writeheader()
yield output.getvalue()
output.truncate(0); output.seek(0)
for product in stream_products(site_id, filters):
writer.writerow(product)
yield output.getvalue()
output.truncate(0); output.seek(0)
return Response(
stream_with_context(generate()),
mimetype='text/csv',
headers={'Content-Disposition': 'attachment; filename=export.csv'},
)
JSON API
REST endpoint із фільтруванням, пагінацією та вибором полів:
GET /api/v1/scraped-products?site_id=7&in_stock=true&fields=name,price,url&page=1&per_page=100
{
"data": [
{ "name": "Кросівки Nike Air Max", "price": 89.99, "url": "https://..." }
],
"meta": {
"page": 1,
"per_page": 100,
"total": 4823
}
}
Аутентифікація — API-ключ у заголовку X-API-Key. Доступ обмежується по IP та rate-limit (100 запитів/хв).
Вебхук-сповіщення
Після завершення парсингу або оновлення даних система відправляє POST на URL вебхуку клієнта:
import httpx, hashlib, hmac
def send_webhook(url: str, secret: str, payload: dict):
body = json.dumps(payload).encode()
sig = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
httpx.post(url, content=body, headers={
'Content-Type': 'application/json',
'X-Signature-SHA256': f'sha256={sig}',
}, timeout=10)
Підпис дозволяє отримувачу перевірити автентичність запиту.
Строки реалізації
CSV та JSON API з базовою аутентифікацією — 1–2 робочі дні. Вебхуки з підписами, фільтри, вибір полів — ще 1 день.







