週末で PokeGrade のカードスナイピング用ターミナルを自作しました。あなたも作れるプロンプトを公開します。

@pokegrade
英語3 日前 · 2026年7月20日
362K
254
9
8
725

TL;DR

この記事では、PokeGrade API と Claude Code を活用し、市場の裁定取引の機会を見つけ出す自動化されたポケモンカード取引ターミナルを構築するための、詳細なマルチフェーズ・プロンプトを紹介します。

ポケモンのスラブ転売は簡単です。しかし問題は、Mercari、eBay、Vinted でのお買い得品は数分で取られてしまったり、そもそも見つけるのが難しかったりすることです。そして、3 つのマーケットプレイスを 24 時間体制で監視し、すべての出品をチェックできる人間はいません。

そこで、Claude Code に監視ツールを作らせました。2 日後、私のオフィスの Mac mini で 24 時間 365 日稼働しているのが、これです。

ツール。

5 分ごとに、Mercari、eBay、Vinted の新着出品をスキャンします。各新着出品の写真は PokeGrade API を通じて処理され、該当するカードを特定し、そのカードの生の市場価値(未鑑定品および鑑定済みの相場)を取得します。PokeGrade API は、私たちのウェブサイトを裏で動かしているものです。開発者向けに無料アクセスを提供しています。PokeGrade.ai/developers

スラブが市場価格より 25% 以上安く出品されている場合、Mercari の出品は自動的に「いいね」され、それ以外は私のスマートフォンに通知が届きます。2 つの戦略が並行して実行されます。割安なスラブを見つける戦略と、もう少し変わった戦略として、スラブの価格が未鑑定カードの販売価格を下回っている場合(スラブ割り裁定取引、まれに存在します)を狙う戦略です。

pokegrade.ai - inline image

ターミナル。

ライブダッシュボード — ダークなトレーディングデスク風のデザイン、スクロールするティッカー、ステータス LED — 表示されるのは、各評価結果、手数料計算を組み込んだ潜在利益の集計、監視中の商品の販売価格チャート(eBay の売却済みデータから 60 秒ごとにサンプリング)、そして台帳です。5 つのマーケットプレイスから任意の出品 URL を貼り付けると、スクレイパーが購入または販売を記録し、現在の損益を追跡します。理論的には、スクリプトをアカウントに接続して毎時間自動取得させることもできますが、まだそこまではやっていません。円とユーロは自動的に換算されます。1 つのボタンで、スナイプした掘り出し物を台帳に直接移動できます。スマートフォンからも操作可能です。

誰も教えてくれない部分。機能の実装は午後だけで終わりました。残りの 1 日半は、現実との格闘でした。自動ブラウザを拒否するマーケットプレイスのボット検出、ログイン状態によって異なるコードをレンダリングするページ、英語のタイトルの背後に隠れた日本語カード、間違ったフォルダにあるバックグラウンドジョブを静かに強制終了する macOS。これらの問題の診断に何時間も費やし、修正は 1 行で済みました。

だからこそ、コードではなくプロンプトを共有しているのです。プロンプトには、検証済みのセレクタ、落とし穴、ガードなど、すべての知識が詰め込まれているため、あなたの構築ではこの格闘を回避できます。

安全性を確保するルール。決して購入はしません。決してオファーを送信することもありません。極端な「お買い得品」(5 倍以上の比率)は、祝う代わりに疑わしいものとしてフラグ付けされます。なぜなら、それらはほぼ常に怪しい出品か、AI が誤ったカードを比較しているためです。実際にお金が動く前に、人間がすべての取引を確認します。同じ方法で構築してください — 自動化は見つけるだけで、判断するのはあなたです。

コスト: カード識別用の PokeGrade API(無料枠: お試しで月 100 回の評価、本格的にスキャンする場合は有料プラン)、無料の eBay 開発者アカウント、そして常時稼働するコンピュータ。これだけです。

プロンプト。

以下のすべてを Claude Code にコピーし、3 つのプレースホルダーを埋めて、フェーズごとに構築してください(各フェーズは単独でも有用です)。

パーソナルカード転売ツールキットを自分のコンピュータ上に構築したい。launchd で管理されるバックグラウンドサービス(または Windows の同等機能)と、ローカル Web ダッシュボードのセットとして。スタック: Node.js + Playwright、フレームワークなし、データベースなし — 1 つのプロジェクトフォルダ内の CSV/JSON ファイル。すべては再起動後も持続すること。5 つのフェーズを送ります。各フェーズが完了したら、次のフェーズの準備ができたことを知らせてください。いくつかの API キーとフェーズ 1 が最初です。

私の入力(記入してください):

PokeGrade API キー: PGAI_KEY_HERE(

pokegrade.ai/developers から取得 — /value エンドポイントは 1 枚の写真からカードを識別し、未鑑定 + 鑑定済みの市場価格を返します。ドキュメントは

pokegrade.ai/developers/docs にあります。)

eBay プロダクションキーセット: EBAY_CLIENT_ID / EBAY_CLIENT_SECRET(

developer.ebay.com で無料入手可能。アカウント削除の例外を申請して有効化してください。)

私の取引閾値: 市場価格が希望価格の 1.25 倍以上で「いいね」/アラート。オファー作業リスト帯域は 1.15~1.25 倍(80% オファーが受け入れられ、約 12% の販売手数料を差し引いた後の純利益率約 26% に相当)

フェーズ 1 — Mercari スナイパー(自動いいね)

約 10 分ごとに Mercari の検索結果をスキャンし、各新着出品の最初の写真を PokeGrade /value で価格評価し、取引閾値をクリアした出品に「いいね」を付けるサービス。設定配列からの 2 つの戦略、1 つのブラウザプロセス:

raw-crack: 「ポケモン psa 8」を検索し、未鑑定(RAW)の価値と比較 — スラブ割りに値するスラブを見つけます(未鑑定価格 > スラブ価格、まれですが現実にあります)。 graded-under: psa 8/9/10 を検索し、スラブ自体の鑑定済みグレードの相場と比較します。

**重要な実装の事実(すべて検証済み、あなたの時間を大幅に節約します): **

Mercari のボットチェック(PerimeterX)は、Playwright のバンドル版 Chromium を完全に拒否します — プレスアンドホールドチャレンジが無限ループします。実際にインストールされている Chrome を起動してください: channel:'chrome'、headful、永続的なプロファイルディレクトリ、--disable-blink-features=AutomationControlled、ignoreDefaultArgs:['--enable-automation']。ログインを自動化しないでください: ログアウト状態を検出し(/mypage/ にアクセスすると、約 15 秒後に CLIENT-SIDE で /login/?login_callback=... にリダイレクトされます — DOM ではなく URL をポーリングしてください)、人間が一度ログインするまで最大 30 分待機します。セッションはプロファイルに永続化されます。

ログイン時とログアウト時では、ページで使用されるテスト ID が異なります。ログイン時の検索: タイル a[data-testid="ProductThumbWrapper"]、価格 ProductThumbItemPrice(ログアウト時: ItemPrice — 両方を受け入れる)、タイルのいいね ItemLike(タイルのアンカー内 — 出品ページを開かずに検索ページからいいね)、アイテムページのいいね LikeComp。ProductThumbItemDiscountedPrice は取り消し線付きの元の価格です — 絶対に使用しないでください。割引タイルは両方の価格を 1 つのテキストノードに連結します("$99.75$105")。そのため、最初の金額トークンのみを解析してください。

最初の出品写真はページにアクセスする必要はありません:

https://u-mercari-images.mercdn.net/photos/ITEMID_1.jpg (単純な fetch)。

「新着」とは、以前に評価されていないアイテム ID(状態ファイルに保存)を指し、新しい順に並べ替え、SOLD タイルはスキップします。各 PokeGrade 呼び出し = 1 クレジット。結果はアイテム ID ごとに永久にキャッシュし、戦略間で共有します。いいねした ID は、表示済み ID とは別に追跡します(評価中といいね中の間にクラッシュが発生しても、ダブルクリックを防ぎます。ダブルクリックは「いいね」を解除します)。一時的な障害(API 5xx、価格データ欠落)は未表示のままにし、次のサイクルで再試行します。

launchd の落とし穴: エージェントは ~/Desktop(TCC)を読み取れません — ジョブは終了コード 78 で静かに停止します。プロジェクトは Desktop ではなく、ホームフォルダに置いてください。RunAtLoad + KeepAlive。plist 内のノードパスは絶対パスにしてください。

フェーズ 2 — eBay + Vinted フィード(通知のみ) **

同じ戦略/閾値ですが、どちらにもウォッチリスト API はありません。そのため、お買い得品は macOS 通知(osascript display notification)と CSV 行をトリガーし、いいね/お気に入りは行いません。

eBay: 公式 Browse API を使用(クライアント認証情報 OAuth、item_summary/search、sort=newlyListed、filter buyingOptions FIXED_PRICE + itemLocationCountry US — priceCurrency は価格範囲と一緒にのみ有効であることに注意)。画像 URL の s-l225 を s-l1600 にアップグレードして OCR に使用。10 分あたり 3 回の検索で、1 日あたり約 5,000 回の API 呼び出しは問題ありません。PokeGrade の消費が実際の予算です(eBay のボリュームでは 1 日あたり約 5,000 クレジット — 検索あたりの評価数を制限してください。例: 15)。

Vinted: カタログをスクレイピングします(API はありませんが、ボット対策の壁もありません)。タイル: a[data-testid="product-item-id-ID--overlay-link"]。その title 属性には「name, brand: X, condition: Y,

$price 」が含まれています。画像は [data-testid="...--image"] img(/f###/ URL セグメントを /f800/ に変更)。Vinted のページは、ヘッドレス Chromium で約 3 回に 1 回クラッシュし、エラーをスローせずにハングする可能性もあります。すべてのスクレイピングを 90 秒の watchdog Promise.race でラップし、失敗した場合はブラウザを再起動してください。停止を示すために、サイクルごとにハートビート行をログに記録してください。ログが静かだと「スタック」を意味し、「通常」ではありません。

品質ガード(実際の誤検知から学んだものすべて):

クレジット消費前: ロット/バンドル、または日本語/中国語/韓国語/ドイツ語/フランス語などに言及しているタイトルをスキップします。

識別後: PokeGrade が特定したセットが外国市場(JP/CS/CN/KR トークン)である場合は拒否します — 出品者はタイトルから言語を隠します。

Celebrations トラップ: PokeGrade は、Celebrations「Classic Collection」の再版をヴィンテージのオリジナルと誤認識する可能性があります(30 ドルの再版が 3 万ドルで比較される)。タイトルに celebrations/classic collection とあるが、特定されたセットが異なる場合、その比較結果を破棄します。同じ再版リスク: Base Set 2、XY Evolutions。

5 倍以上の比率のものはすべて「疑わしい — 確認が必要」としてフラグ付けされ、収益の主要数値から除外されます(極端な比率は、ほぼ常に比較ミスマッチであり、大当たりではありません)。

フェーズ 3 — ダッシュボード(localhost Web アプリ) **

依存関係のない単一の Node HTTP サーバー(LAN 上のスマートフォンからアクセスできるように 0.0.0.0 にバインド)が、1 つの HTML ファイルを提供し、30 秒ごとに /data エンドポイントをポーリングします。ダークファーストの「トレーディングターミナル」美学: 等幅数字、サービスごとのステータス LED(ログファイルの mtime = ヘルス)、最近の評価結果のスクロールティッカー、カウントアップアニメーション。3 つのタブ:

1. スナイパー — 統計バンド(疑わしいものを除いた手数料後潜在利益、取引数、オファー数、確認必要数、評価数)、1 時間あたりのスキャンアクティビティチャート、累積収益チャート、判定結果の内訳、戦略スコアボード、そして出品サムネイル、スター/お気に入りトグル(フィルタリング可能)、および「購入済み」ボタン(発見品を台帳に直接コピー)付きのソート可能な発見品テーブル。

2. マーケットウォッチ — 販売価格トラッカー(フェーズ 4)。

3. 台帳 — フェーズ 5。

外部画像は、同一オリジンの /thumb プロキシ経由で提供します(マーケットプレイスの CDN をホワイトリストに登録)— クロスオリジン/ホットリンク画像は一部のクライアントでブロックされます。疑わしい発見品: 警告バッジ + 合計から除外。

フェーズ 4 — 販売価格マーケットトラッカー **

eBay の売却済みデータは公開 API には含まれていません。売却済み検索(LH_Sold=1、LH_Complete=1、sort newest)をヘッドレス Chromium(channel:'chromium')、ブラウザ UA 偽装、および最初にホームページをウォームアップ訪問(コールドディープリンクはボットブロックされます)でスクレイピングします。カード: [data-listingid] 要素。実際の売却済み品には「SOLD date」行があります(スポンサー広告にはありません)。毎分、設定されたクエリごとに: 最新の販売価格 10 件を取得し、平均/中央値/最小/最大を CSV に追加します。ダッシュボードは、トラッカーごとに平均線と最小-最大帯域をグラフ化し、時間ウィンドウのズームボタン(+/-)を備えます。1 回限りのバックフィルスクリプトは、印刷された販売日でグループ化しながら最大 10 ページの結果ページをウォークし、約 1 週間分の日次履歴を再構築します(冪等)。空の抽出が 3 回連続した場合は、10 分間バックオフします。

フェーズ 5 — 台帳(購入/売却 P/L)

台帳タブには、BUY 入力と SELL 入力があります。以下の任意の出品 URL を貼り付けてください:

mercari.com

jp.mercari.com

japan.us.mercari.com (越境ストアフロント)、

ebay.com

ebay.io アプリアクセスショートリンクを含む)、または

vinted.com 。決定論的なフェッチャースクリプト(AI なし)が、タイトル/価格/通貨/画像を抽出します:

主要:

schema.org Product JSON-LD(jp.mercari、ebay、vinted では正確)。

japan.us .mercari には JSON-LD がありません — 価格は [data-testid="main-price"](記号と数字が別々の行)、すでに USD です。

ebay.io ショートリンクは実際のブラウザでのみ解決され、多くの場合エラーシェルに着地します — 解決された URL からアイテム ID を取得し、代わりに Browse API の get_item_by_legacy_id を呼び出してください。

ボットチャレンジページ(「Just a moment...」、「Error Page」など)はエラーとして拒否します — エントリとして保存しないでください。

非 USD は

frankfurter.app (ECB、無料、12 時間キャッシュ)で換算します。エントリを ledger.json に保存。現在の集計 = 売却額から購入額を引いたもの、さらに 12% 手数料後の数値を表示。各行にはサムネイル、マーケットチップ、現地通貨 + USD 価格、および確認ガード付きの削除ボタンが表示されます。記録価格 = 表示価格(オファーは無視)— これは意図的な簡略化です。

フェーズごとの受け入れチェック

実際のサイクルを 1 回実行し、ログを見せてください。ループを配線する前に、実際の出品が PokeGrade を通じてエンドツーエンドで検証されることを確認してください。UI 変更後は、ダッシュボードのスクリーンショットをライトモードとダークモードの両方で撮影してください。テストエントリを台帳に残したり、テストの「いいね」をアカウントに残したりしないでください。

実行する前の公正な警告: スクレイパーはマーケットプレイスの利用規約とのグレーゾーンにあります — 穏やかな頻度を保ち、時折のキャプチャを想定してください。AI によるカード識別は十分な頻度で間違うため、自動購入はお金を燃やすようなものです。また、手数料の実態は私の 12% とは異なる可能性があります — 閾値を再調整してください。

もし構築したら、何が見つかったか見せてください。

ワンクリック保存

YouMindでバイラル記事をAI深読み

ソースを保存し、的を絞った質問をし、主張を要約して、バイラル記事を再利用できるノートに変えます。すべてを1つのAIワークスペースで行えます。

YouMindを探索
クリエイターのために

あなたの Markdown をきれいな 𝕏 記事に

自分の長文を投稿するとき、画像・表・コードブロックを 𝕏 向けに整形するのは手間がかかります。YouMind は Markdown 全体を、そのまま投稿できるきれいな 𝕏 記事に変換します。

Markdown → 𝕏 を試す

解読すべきパターンをもっと

最近のバイラル記事

バイラル記事をもっと見る