メインコンテンツへスキップ

概要

Olostepは、数百万の製品のリアルタイム価格追跡を定期的な間隔(例:数時間ごと)でスケーラブルかつ費用対効果の高い方法で可能にするウェブスクレイピングAPIを提供します。 これは、価格変動を監視したい、複数のウェブサイトで価格を比較したい、または競合他社の価格戦略を追跡したい企業にとって有用です。 このガイドでは、顧客がOlostepを使用して、毎日数百万のAmazon製品の自動価格追跡を設定する方法を見ていきます。

なぜ価格追跡にOlostepを使用するのか?

  • スケーラビリティ: 数百万の製品の価格を数時間ごとに追跡します。
  • 自動化: 定義された時間/定期的な間隔で実行されるスケジュールされたスクレイピングタスクを設定します。
  • 複数のフォーマット: JSON、html、またはmarkdown形式でデータを取得します。
  • カスタムパーサー: パーサーを使用して関連するJSON情報のみを抽出するか、独自のパーサーをAPIに渡します。

Olostepを使用した価格追跡方法

プロセスセットアップの概要

製品を大規模に追跡する際には、OlostepのBatchesエンドポイントを使用することをお勧めします。 このエンドポイントを使用すると、最大10,000件のURLを含む複数のバッチを並行して処理し、5〜8分後に結果を取得できます。複数のバッチを同時に送信し、その進行状況を監視し、完了したら結果を取得できます。この方法で、15〜20分で数百万のURLを処理できます。 Olostepを使用した価格追跡の全体的な流れは次のとおりです:
  1. データベースから製品を読み取り、追跡したいURLをCSVファイルに保存します。
  2. CSVファイルからデータを読み取り、Olostepのバッチエンドポイントを使用してバッチを開始します。 これは、最大10,000件のURLのチャンクでデータをエンドポイントに投稿することで行われます。
  3. バッチの進行状況を監視するために、60秒ごとにバッチステータスを確認します。
  4. バッチが完了したら、コンテンツを読み取り、ワークフローで使用します。
バッチを開始し、ページのhtml/markdownコンテンツを返してもらい、必要なデータを抽出するために自分で解析することもできますが、パーサーを使用してバッチを開始することをお勧めします。これにより、必要な解析済みデータのみを含むJSONオブジェクトが返されます。 独自のパーサーをAPIに渡すことも、一般的なウェブサイト用に事前に構築されたものを使用することもできます(例:Amazon製品ページ、Google検索結果、Linkedinプロファイルなど)。 各バッチのデータは7日間保存されるため、必要に応じて複数回取得できます。

ステップ1: データベースから製品データをエクスポート

最初のステップは、データベースから製品情報を取得し、CSV形式で保存することです。このファイルには、製品識別子、URL、および追跡に必要な追加のメタデータが含まれている必要があります。

ステップ2: Olostepでバッチを開始

バッチを開始するには、CSVから製品データを読み取り、Olostepのバッチエンドポイントに送信します。これは、JSONペイロードを使用したHTTP POSTリクエストで行われます。 各バッチには最大10,000件のURLを含めることができます。大規模なデータセット(>10,000件のURL)の場合、複数のバッチに分割して並行して送信します。 バッチは、処理される製品URLを表すアイテムの配列で構成されます。バッチリクエストの構造は次のとおりです:
import requests

def start_batch(batch_array):
    payload = {
        "batch_array": batch_array,                 # 処理するアイテムの配列
        "batch_country": "IT",                      # バッチの国コード
        "parser": "@olostep/amazon-it-product"      # オプション: 必要なJSONデータのみを取得するためのカスタムパーサーを指定
    }

    headers = {
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
    }

    response = requests.post(
        "https://api.olostep.com/v1/batches",
        headers=headers,
        json=payload
    )

    return response.json()["id"]

バッチ配列構造

batch_arrayの各アイテムは次の構造に従う必要があります:
{
    "custom_id": "unique_identifier",    // 必須: アイテムのユニークな識別子
    "url": "product_url",               // 必須: 処理するURL
    "wait_before_scraping": 0,         // オプション: バッチ内の各URLをスクレイピングする前の待機時間(ミリ秒単位)
}
パラメータ
batch_array
array
必須
処理するアイテムの配列。バッチごとに最大10,000件のURL。各アイテムにはユニークなcustom_idが必要です。
batch_country
string
必須
2文字の国コード(例:“IT”はイタリア)。
parser
string
使用するカスタムパーサーの名前(例:“@olostep/amazon-it-product”)。事前に構築されたパーサーへのアクセスを得るか、独自のものを作成するにはinfo@olostep.comまでご連絡ください。
レスポンス
{
    "id": "batch_54ikwskmt8"
}
エンドポイントは、ステータスを監視し、その後結果を取得するために使用できるbatch_idを含むJSONオブジェクトを返します。 使用例
# バッチ配列を準備
batch_array = [
{
    "custom_id": "product_123",
    "url": "https://www.amazon.it/dp/B0CHF6Z393/?coliid=INQXTGFQF4FM4&colid=1R0NGA5NR5LSZ&psc=1&ref_=list_c_wl_lv_vv_lig_dp_it"
},
{
    "custom_id": "product_124",
    "url": "https://www.amazon.it/dp/B0CHMJL774/?coliid=I6CFYA5EHVHE2&colid=1R0NGA5NR5LSZ&psc=1&ref_=list_c_wl_lv_vv_lig_dp_it"
}
]

# バッチ処理を開始
batch_id = start_batch(batch_array)
print(f"Started batch: {batch_id}")

ステップ3: バッチステータスの監視

バッチが開始されたら、そのステータスを監視して処理が完了したかどうかを判断する必要があります。APIは、batch_idで定期的にポーリングできるステータスエンドポイントを提供します。
import requests

def check_batch_status(batch_id):
headers = {"Authorization": "Bearer " + API_KEY}
response = requests.request(
"GET",
f"https://api.olostep.com/v1/batches/{batch_id}",
headers=headers
)
return response.json()["status"]
本番環境での使用には、複数のバッチを効率的に処理するために非同期モニタリングを実装することをお勧めします:
import asyncio

async def monitor_batch(batch_id: str) -> None:
"""バッチが完了するまで監視する"""
while True:
    status = check_batch_status(batch_id)
    if status == "completed":
        print(f"Batch {batch_id} completed!")
        return
    print(f"Batch {batch_id} still processing... Checking again in 60 seconds")
    await asyncio.sleep(60)

ステップ4: 完了したアイテムのIDを取得

バッチが完了とマークされたら、完了したアイテムのリストを取得できます。各アイテムにはretrieve_idが付与されます。実際のコンテンツが必要な場合は、retrieve_idを渡してretrieveエンドポイントを使用します。
import requests

def get_completed_items(batch_id):
    headers = {"Authorization": "Bearer YOUR_API_KEY"}
    response = requests.get(f"https://api.olostep.com/v1/batches/{batch_id}/items", headers=headers)
    return response.json()["items"]
これにより、送信された各URLに対してretrieve_idを持つ完了したアイテムが返されます。その後、各URLの抽出データ(html、markdown、またはJSON)を取得して保存するためにretrieveエンドポイントを使用できます。 バッチ内の各アイテムのretrieve_idを取得するには、次のコードを使用します:
items = get_completed_items("your_batch_id")
for item in items:
    print(f"""
    URL: {item['url']}
    Custom ID: {item['custom_id']}
    Retrieve ID: {item['retrieve_id']}
    ---
    """)

ステップ5: 各アイテムのコンテンツを取得

各アイテムのretrieve_idを取得したら、retrieveエンドポイントを使用してそのコンテンツ(HTML、Markdown、またはJSON)を取得できます:
def retrieve_content(retrieve_id):
url = "https://api.olostep.com/v1/retrieve"
headers = {"Authorization": "Bearer YOUR_API_KEY"}
params = {"retrieve_id": retrieve_id}

response = requests.get(
url,
headers=headers,
params=params
)
return response.json()

# 使用例
retrieve_id = "product_123"
content = retrieve_content(retrieve_id)

# 複数のアイテムを処理したい場合
def process_batch_content(batch_id):
items = get_completed_items(batch_id)
for item in items:
content = retrieve_content(item['retrieve_id'])
# 必要に応じてコンテンツを処理または保存

結論

これらのステップに従うことで、Olostepを使用した自動価格追跡システムを設定できます。近日中にこの例の完全なコードを含むオープンソースのGitHubリポジトリを公開する予定です。