← Wszystkie wpisy

Budowa monitora cen w czasie rzeczywistym z FourA

Ceny konkurencji zmieniają się co godzinę. Oto jak zbudować automatyczny monitor cen dla setek stron produktów za pomocą jednego wywołania API i prostego kodu w Pythonie.

Decyzje cenowe w e-commerce zapadają szybko. Konkurent obniża cenę o 5% i w ciągu kilku godzin klienci to zauważają. Wygrywają firmy, które dostrzegą to jako pierwsze.

Budowa systemu monitorowania cen wymagała kiedyś utrzymywania infrastruktury proxy, radzenia sobie z detekcją botów i pisania dedykowanych scraperów dla każdej docelowej witryny. FourA redukuje tę złożoność do pojedynczego wywołania API.

Problem

Ręczne sprawdzanie cen nie skaluje się. Nawet mały sklep internetowy z 50 konkurentami musi śledzić setki stron produktów. Przy trzech sprawdzeniach dziennie daje to ponad 1000 zapytań na dobę, z których każde może zostać zablokowane, objęte rate limitem lub zepsute przez zmianę struktury strony.

Podejście

Oto jak wygląda gotowy do wdrożenia na produkcji pipeline monitorowania cen z FourA:

1. Zdefiniuj swój katalog produktów

Zacznij od ustrukturyzowanej listy adresów URL konkurencji oraz selektorów CSS wskazujących na ceny:

products = [
    {"sku": "WDG-001", "competitor": "Store A", "url": "https://store-a.com/widget", "selector": ".price-current"},
    {"sku": "WDG-001", "competitor": "Store B", "url": "https://store-b.com/products/widget", "selector": "[data-price]"},
]

2. Pobieranie i parsowanie

FourA zajmuje się trudnymi elementami: fingerprintingiem TLS, rotacją proxy i renderowaniem JavaScriptu. Twój kod po prostu wysyła URL i otrzymuje w odpowiedzi HTML:

import requests
from bs4 import BeautifulSoup

def get_price(product):
    resp = requests.post("https://eu.api.foura.ai/api/v1/tasks", headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
    }, json={"url": product["url"], "type": "proxy"})
    
    html = resp.json()["content"]
    soup = BeautifulSoup(html, "html.parser")
    el = soup.select_one(product["selector"])
    return float(el.text.strip().replace("$", "").replace(",", "")) if el else None

3. Śledź zmiany w czasie

Zapisuj wyniki w bazie danych lub pliku CSV. Oznaczaj istotne zmiany, aby generować alerty:

if abs(new_price - last_price) / last_price > 0.03:  # 3% threshold
    send_alert(f"{product['competitor']} changed {product['sku']} from ${last_price} to ${new_price}")

4. Zaplanuj zadanie w Cron

Uruchamiaj tracker co godzinę lub co kilka godzin, zależnie od zmienności cen na Twoim rynku.

Dlaczego to działa

  • Brak infrastruktury do utrzymania. Bez serwerów proxy, farm przeglądarek i logiki rotacji IP.
  • Dostosowanie do zmian zabezpieczeń. Typ proxy w FourA automatycznie ponawia próby przez inne trasy, gdy jedna zostanie zablokowana.
  • Liniowe skalowanie. Dodanie kolejnych 100 produktów to po prostu 100 kolejnych wywołań API, bez konieczności zmian w architekturze.

Pierwsze kroki

Cały powyższy potok (nie licząc logiki powiadomień) mieści się w niecałych 50 liniach kodu w Pythonie. A gdy działa już dla 50 produktów, skalowanie do 500 wymaga jedynie dłuższej listy. Wywołanie API, parsowanie i harmonogram zadań pozostają bez zmian. O to właśnie chodzi.

Pełny przykładowy kod jest dostępny w przewodniku How-To, a dokumentacja API opisuje każdy parametr potrzebny do jego dostosowania.