Программа Парсер Цен Api -
@app.get("/price/product_id") async def get_price(product_id: str): # Сначала проверяем кэш (TTL 5 минут) cached = cache.get(f"price:product_id") if cached: return json.loads(cached)
return normalize_price(price) # убираем пробелы, заменяем запятую Предположим, мы используем FastAPI (Python) для простоты и производительности. Модели данных from pydantic import BaseModel from datetime import datetime class PriceRecord(BaseModel): product_id: str source_url: str price: float currency: str = "RUB" timestamp: datetime in_stock: bool Эндпоинты | Метод | URL | Описание | |-------|-----|----------| | GET | /api/v1/prices/product_id | Получить последнюю цену | | GET | /api/v1/prices/history/product_id?from=date&to=date | Исторические цены | | POST | /api/v1/parse/request | Запросить принудительный парсинг сейчас | | GET | /api/v1/products/search?query=...&min_price=... | Поиск товаров с фильтрацией по цене | Пример реализации (FastAPI) from fastapi import FastAPI, BackgroundTasks, HTTPException from redis import Redis import json app = FastAPI() cache = Redis() программа парсер цен api
# 3. Fallback: регулярное выражение на сумму if not price: price = re.search(r'[\d\s]+[.,]?\d2₽', response.text) detail="Product not found")
# Проверяем базу данных price = await db.fetch_one("SELECT * FROM prices WHERE product_id=$1 ORDER BY timestamp DESC LIMIT 1", product_id) if not price: raise HTTPException(status_code=404, detail="Product not found") заменяем запятую Предположим