dry_run とは(仕組み)
MercariClient(dry_run=True) は メルカリ API に TCP 接続しない モードです。
代わりに、ライブ時と 同じ組み立てパイプライン でリクエストを作り、中身を返します。
何のため?
| 用途 | 説明 |
|---|---|
| デバッグ | keyword / category / condition が protobuf にどう載るか確認 |
| テスト | ネットワーク・トークンなしで CI 可能 |
| 学習 | DPoP ヘッダや search_condition の形を見る |
| 安全 | 誤って大量リクエストしない |
仕組み(search)
c.search(...) または c.search_from_condition(...)
│
▼
builder.build_search_dict(**kwargs) # ラベル → id、status など
│
▼
codec.json_to_binary(..., kind=request) # protobuf 本体
│
▼
_keystore.make_dpop("POST", url) # 本物の DPoP JWT(鍵があれば)
│
▼
dry_run=True → return { mode: "dry_run", url, headers, request_json, body_hex, ... }
dry_run=False → mercari_http.urlopen(POST body) → live / network_error
戻り値の形(search)
{
"mode": "dry_run", # live | dry_run | network_error
"url": "https://api.mercari.jp/...",
"method": "POST",
"headers": { "DPoP": "...", "X-PLATFORM": "android", ... },
"request_json": {
"search_condition": { "keyword": "...", "category_id": [3833], ... },
"page_size": 30,
...
},
"body_hex": "...", # 実際に送る protobuf
"auth": { "guest_ready": true, "mode": "dpop_only", ... },
}
items は空です(API を叩いていないため)。ヒット一覧が欲しいときは dry_run=False(ライブ)。
item() の dry_run
商品詳細もネットワークなしで GET URL + ヘッダ形 を返します。
c = mercari.MercariClient(dry_run=True)
print(c.item("m12345678901")["url"])
ライブとの切り替え
# 開発
c = mercari.MercariClient(dry_run=True)
# 本番ゲスト検索
c = mercari.MercariClient(dry_run=False) # 既定
# または CLI: mercari --live search -k iPhone -c 3833
webapp は環境変数 MERCARI_WEB_DRY_RUN=1 で dry_run 起動できます。
よくある誤解
| 誤解 | 実際 |
|---|---|
| dry_run はモックデータ | いいえ。本物のリクエスト組み立てだけ |
| DPoP はダミー | 鍵があれば 本物の JWT を mint |
| dry_run で相場が取れる | いいえ。ヒットが無いので stats は空 |
| プロキシは dry_run でも効く | ネットワークしないので プロキシは使われない |
関連: 高度な検索 JSON · プロキシ · Sample dry-run