ECにおける価格決定は迅速に行われます。競合他社が価格を5%引き下げると、数時間以内に顧客がそれに気づきます。勝利する企業は、誰よりも早くそれに気づく企業です。
かつて価格監視システムを構築するには、proxyインフラの維持、アンチボットシステムへの対応、そして対象サイトごとのカスタムスクレイパーの作成が必要でした。FourAは、その複雑さを単一のAPIコールに凝縮します。
課題
手動での価格確認はスケールしません。50社の競合を抱える小規模なECビジネスであっても、数百の製品ページを追跡する必要があります。1日3回の確認を行う場合、毎日1,000回以上のrequestが発生し、それぞれがブロックされたり、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 guideで入手可能であり、API documentationではカスタマイズに必要なすべてのパラメータをカバーしています。