誠品線上庫存查詢工具 — 技術報告 ノート

誠品線上庫存查詢工具 — 技術報告

このプロジェクトでは、Eslite Onlineの製品在庫状況を監視するための軽量CLIツールを開発しました。既存のEslite Online製品ページでは在庫が個別に表示されるのみで、一括チェックや人気商品のリアルタイム監視ができませんでした。主な技術的課題は、フロントエンドの保護を回避し、バックエンドAPIを正しく呼び出すことでした。このツールはEsliteの製品APIと直接対話し、手動でのウェブページ更新を置き換えます。遭遇した重要な問題は、TLSフィンガープリント検出によるCloudflareからの403 Forbiddenエラーでした。標準のPythonライブラリは、実際のブラウザとは異なるTLSフィンガープリントを生成するため、Cloudflareがリクエストをブロックしました。この解決策として、curl-cffiimpersonate="chrome120"パラメータと共に使用し、ChromeブラウザのTLSおよびHTTP/2フィンガープリントを模倣しました。EsliteのAPIは、リクエスト検証またはキャッシュ無効化のために、YYYYMMDDHHMMSS形式の動的なタイムスタンプパラメータを必要とします。このツールは、各API呼び出しのためにリアルタイムでこのタイムスタンプを生成します。ユーザー入力を簡素化するため、このツールは正規表現を使用して、生のGUIDまたは完全な製品URLから20桁のGUIDを抽出します。連続監視のために--watch Nパラメータを追加し、N秒ごとに在庫をクエリしてターミナル表示を更新します。在庫および購入ステータスは、視覚的なスキャンを容易にするために色分けされています。このツールは複数の製品を同時にクエリすることをサポートしており、個々の製品クエリの失敗は、バッチ全体を中断することなく分離されます。UTF-8エンコーディングがデフォルトでないWindowsターミナルでの互換性を確保するため、スクリプトは標準出力およびエラー出力をUTF-8を使用するように積極的に再構成します。このプロジェクトはPEP 723に準拠しており、ユーザーは依存関係を事前にインストールすることなくuv runを使用してスクリプトを実行できます。最も重要で、かつ最も分かりにくい技術的決定は、TLSフィンガープリントの問題を克服することであり、これはHTTPヘッダーを偽装するだけでなく、特殊なライブラリを必要としました。