Eコマースにおける価格決定は迅速に行われます。競合が価格を5%引き下げれば、数時間以内に顧客はそれに気付きます。勝つのは、最初に気付いた企業です。
従来の価格監視システムの構築には、プロキシインフラの維持、ボット検出への対処、対象サイトごとのカスタムスクレイパーの開発が必要でした。FourAは、その複雑さを単一のAPI呼び出しに集約します。
課題
手動での価格確認はスケールしません。競合他社が50社ある小規模なEコマース事業者であっても、数百の製品ページを追跡する必要があります。1日3回の確認を行うと、毎日1,000件以上のリクエストが発生し、それぞれがブロックされたり、レート制限(rate limit)を受けたり、サイトのデザイン変更によって動作しなくなるリスクを抱えます。
アプローチ
FourAを使用した本番環境向け価格監視パイプラインの構成は以下のとおりです。
1. 製品カタログの定義
まず、競合のURLと価格が表示されるCSSセレクタの構造化リストを作成します。
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. 取得とパース
FourAがTLSフィンガープリント、proxyローテーション、JavaScriptレンダリングなどの複雑な処理を担当します。コード側はURLを送信して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. 経時的な変化を追跡
結果をデータベースまたはCSVに保存します。アラート対象となる重大な変更にフラグを設定します:
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. Cronによる定期実行
市場の価格変動性に応じて、トラッカーを1時間ごと、または数時間ごとに実行します。
これが機能する理由
- インフラの保守が不要。 proxyサーバー、ブラウザファーム、IPローテーションのロジックは一切必要ありません。
- 保護機能の変更に適応。 FourAのproxyタイプは、あるルートがブロックされた場合でも別のルート経由で自動的にリトライします。
- 線形にスケール。 100件の製品を追加しても、アーキテクチャの変更は不要で、API呼び出しが100回増えるだけです。
はじめに
上記のパイプライン全体(アラートロジックを除く)は、50行未満のPythonコードで動作します。また、50件の製品で動作すれば、500件へのスケールはリストを増やすだけです。API呼び出し、パース処理、スケジューリングのすべてが変わりません。それが本質です。
完全なサンプルコードはHow-Toガイドで入手可能です。また、カスタマイズに必要なすべてのパラメータはAPI documentationに記載されています。