Tôi đã xây dựng một thiết bị săn thẻ PokeGrade chỉ trong một cuối tuần. Đây là câu lệnh chính xác để bạn tự tạo cho mình.

@pokegrade
TIẾNG ANH3 ngày trước · 20 thg 7, 2026
362K
254
9
8
725

TL;DR

Bài viết này cung cấp một câu lệnh đa giai đoạn chi tiết để xây dựng thiết bị giao dịch thẻ Pokemon tự động, sử dụng PokeGrade API và Claude Code để tìm kiếm các cơ hội chênh lệch giá trên thị trường.

Lật thẻ Pokemon slab rất dễ. Vấn đề là: các deal trên Mercari, eBay và Vinted có thể bị chốt trong vài phút hoặc đơn giản là khó tìm, và không một ai có thể canh ba chợ 24/7 để kiểm tra từng tin đăng.

Vì vậy, tôi đã nhờ Claude Code xây dựng một trình theo dõi. Hai ngày sau, đây là thứ chạy 24/7 trên chiếc Mac mini trong văn phòng của tôi:

Công cụ.

Cứ mỗi 5 phút, nó quét các tin đăng mới trên Mercari, eBay và Vinted. Ảnh của mỗi tin đăng mới được đưa qua PokeGrade API, API này xác định chính xác thẻ đó và lấy giá thị trường hiện tại — cả giá thô lẫn giá đã chấm điểm. PokeGrade API là công cụ vận hành hậu trường cho trang web của chúng tôi. Chúng tôi cung cấp quyền truy cập miễn phí cho các nhà phát triển. PokeGrade.ai/developers

Nếu một slab được niêm yết thấp hơn thị trường 25%+, các tin đăng Mercari sẽ được tự động thả tim và mọi thứ khác sẽ gửi thông báo đến điện thoại của tôi. Hai chiến lược chạy song song: slab giá thấp, và chiến lược kỳ lạ hơn — slab được niêm yết thấp hơn giá của thẻ chưa chấm điểm (chênh lệch đập vỏ slab; hiếm, nhưng có thật).

pokegrade.ai - inline image

Terminal.

Một bảng điều khiển trực tiếp — phong cách bàn giao dịch tối màu, dòng chữ cuộn, đèn LED trạng thái — hiển thị mọi đánh giá, tổng lợi nhuận tiềm năng đã tính phí, biểu đồ giá đã bán của các sản phẩm tôi đang theo dõi (lấy mẫu mỗi 60 giây từ các sản phẩm đã bán trên eBay), và một sổ cái: dán bất kỳ URL tin đăng nào từ năm chợ, một trình thu thập sẽ ghi lại giao dịch mua hoặc bán và theo dõi lãi/lỗ luân chuyển của tôi. Về mặt lý thuyết, tôi có thể kết nối script của mình với các tài khoản và để nó tự động thu thập dữ liệu mỗi giờ; chỉ là chưa làm điều này thôi. Yên và Euro tự động được chuyển đổi. Một nút chuyển một món hàng săn được trực tiếp vào sổ cái. Hoạt động từ điện thoại của tôi.

Phần mà không ai nói cho bạn biết. Các tính năng mất một buổi chiều. Một ngày rưỡi còn lại là cuộc chiến với thực tế: hệ thống phát hiện bot của chợ từ chối trình duyệt tự động, các trang hiển thị mã khác nhau tùy thuộc vào việc bạn đã đăng nhập hay chưa, thẻ Nhật ẩn sau tiêu đề tiếng Anh, macOS âm thầm giết các tác vụ nền nằm sai thư mục. Mỗi vấn đề đó mất hàng giờ để chẩn đoán và một dòng code để sửa.

Đó là lý do tại sao tôi chia sẻ prompt thay vì code. Prompt mang tất cả — mọi bộ chọn đã được xác thực, mọi cạm bẫy, mọi lớp bảo vệ — để bản xây dựng của bạn bỏ qua cuộc chiến đó.

Các quy tắc đảm bảo an toàn. Nó không bao giờ mua bất cứ thứ gì. Nó không bao giờ gửi đề nghị. Các "deal" cực tốt (tỷ lệ 5x+) được gắn cờ là đáng ngờ thay vì ăn mừng, vì hầu như luôn là tin đăng mờ ám hoặc AI so sánh nhầm thẻ. Một người thật sẽ xem xét mọi deal trước khi tiền được chuyển. Hãy xây dựng nó theo cách tương tự — tự động hóa tìm kiếm, bạn quyết định.

Chi phí: PokeGrade API để nhận dạng thẻ (gói miễn phí: 100 lần đánh giá/tháng để dùng thử; gói trả phí nếu bạn quét nghiêm túc), tài khoản nhà phát triển eBay miễn phí, và một máy tính luôn bật. Vậy thôi.

Prompt.

Sao chép mọi thứ bên dưới vào Claude Code, điền vào ba chỗ trống, và xây dựng nó theo từng giai đoạn (mỗi giai đoạn đều hữu ích độc lập).

Tôi muốn một bộ công cụ lật thẻ cá nhân trên máy tính, được xây dựng dưới dạng các dịch vụ nền do launchd quản lý (hoặc tương đương trên Windows) cùng với một bảng điều khiển web cục bộ. Stack: Node.js + Playwright, không framework, không cơ sở dữ liệu — file CSV/JSON trong một thư mục dự án. Mọi thứ phải tồn tại sau khi khởi động lại. Tôi sẽ gửi cho bạn 5 giai đoạn. Sau khi mỗi giai đoạn hoàn thành, vui lòng cho tôi biết bạn đã sẵn sàng cho giai đoạn tiếp theo. Một số key API và Giai đoạn 1 là đầu tiên.

Đầu vào của tôi (điền vào):

PokeGrade API key: PGAI_KEY_HERE (từ

pokegrade.ai/developers — endpoint /value xác định một thẻ từ một ảnh và trả về giá thị trường thô + đã chấm điểm; tài liệu tại

pokegrade.ai/developers/docs

eBay production keyset: EBAY_CLIENT_ID / EBAY_CLIENT_SECRET (miễn phí tại

developer.ebay.com ; xin miễn trừ xóa tài khoản để kích hoạt)

Ngưỡng deal của tôi: tim/cảnh báo khi giá thị trường ít nhất gấp 1.25 lần giá yêu cầu; dải danh sách chờ đề nghị từ 1.15-1.25 lần (lợi nhuận ròng khoảng 26% sau khi đề nghị 80% được chấp nhận và phí bán hàng ~12%)

GIAI ĐOẠN 1 — Mercari sniper (tự động tim)

Một dịch vụ quét các tìm kiếm Mercari mỗi ~10 phút, định giá ẢNH ĐẦU TIÊN của mỗi tin đăng mới qua PokeGrade /value, và tim các tin đăng đáp ứng ngưỡng deal. Hai chiến lược từ một mảng cấu hình, một tiến trình trình duyệt:

raw-crack: tìm kiếm "pokemon psa 8", so sánh giá RAW (chưa chấm điểm) — tìm các slab đáng để đập vỏ (raw > giá slab; hiếm nhưng có thật). graded-under: tìm kiếm psa 8/9/10, so sánh giá tham khảo cùng cấp của slab.

**Thông tin triển khai quan trọng (đã xác thực, sẽ giúp bạn tiết kiệm hàng giờ): **

Kiểm tra bot của Mercari (PerimeterX) từ chối hoàn toàn Chromium đi kèm của Playwright — thử thách nhấn giữ lặp vô hạn. Khởi chạy Chrome thực đã cài đặt: channel:'chrome', headful, thư mục hồ sơ liên tục, --disable-blink-features=AutomationControlled, ignoreDefaultArgs:['--enable-automation']. Không bao giờ tự động đăng nhập: phát hiện trạng thái chưa đăng nhập (truy cập /mypage/ chuyển hướng PHÍA MÁY KHÁCH sau ~15s đến /login/?login_callback=... — thăm dò URL, không phải DOM) và chờ tối đa 30 phút để người dùng đăng nhập một lần; phiên tồn tại trong hồ sơ.

Các trang đã đăng nhập và chưa đăng nhập sử dụng test id KHÁC NHAU. Tìm kiếm đã đăng nhập: ô a[data-testid="ProductThumbWrapper"], giá ProductThumbItemPrice (chưa đăng nhập: ItemPrice — chấp nhận cả hai), tim ô ItemLike (bên trong neo của ô — tim từ trang tìm kiếm, không cần mở tin đăng), tim trang item LikeComp. ProductThumbItemDiscountedPrice là giá GỐC bị gạch ngang — không bao giờ sử dụng nó; các ô giảm giá nối cả hai giá trong một nút văn bản ("$99.75$105"), vì vậy chỉ phân tích token tiền ĐẦU TIÊN.

Ảnh đầu tiên của tin đăng không cần truy cập trang:

https://u-mercari-images.mercdn.net/photos/ITEMID_1.jpg (tìm nạp thuần túy).

"Mới" = id item chưa được đánh giá trước đó (file trạng thái), sắp xếp mới nhất trước, bỏ qua các ô ĐÃ BÁN. Mỗi lần gọi PokeGrade = 1 tín dụng — lưu kết quả vào bộ nhớ đệm vĩnh viễn cho mỗi id item và chia sẻ bộ nhớ đệm giữa các chiến lược. Theo dõi id đã tim riêng biệt với id đã thấy (sự cố giữa chấm điểm và tim không bao giờ gây ra nhấp đúp, điều này sẽ BỎ tim). Các lỗi tạm thời (API 5xx, thiếu giá) vẫn chưa được thấy và thử lại vào chu kỳ tiếp theo.

Lưu ý launchd: agent KHÔNG thể đọc ~/Desktop (TCC) — tác vụ chết âm thầm với exit code 78. Giữ dự án trong thư mục home, không phải Desktop. RunAtLoad + KeepAlive; đường dẫn node tuyệt đối trong plist.

**GIAI ĐOẠN 2 — Nguồn cấp dữ liệu eBay + Vinted (chỉ thông báo) **

Cùng chiến lược/ngưỡng, nhưng không có API danh sách theo dõi, vì vậy các deal kích hoạt thông báo macOS (osascript display notification) + hàng CSV thay vì tim/yêu thích.

eBay: sử dụng Browse API chính thức (OAuth chứng chỉ máy khách, item_summary/search, sort=newlyListed, filter buyingOptions FIXED_PRICE + itemLocationCountry US — lưu ý priceCurrency chỉ hợp lệ khi có dải giá). Nâng cấp URL hình ảnh s-l225 lên s-l1600 để OCR. Khoảng 5k lần gọi API/ngày với 3 tìm kiếm mỗi 10 phút là ổn; PokeGrade burn là ngân sách thực sự (khoảng 5k tín dụng/ngày ở khối lượng eBay — giới hạn đánh giá mỗi tìm kiếm, ví dụ 15).

Vinted: thu thập danh mục (không có API, nhưng cũng không có tường bot). Các ô: a[data-testid="product-item-id-ID--overlay-link"] có thuộc tính title chứa "tên, thương hiệu: X, tình trạng: Y,

$price "; hình ảnh tại [data-testid="...--image"] img (tăng phân đoạn URL /f###/ lên /f800/). Các trang Vinted CRASH headless Chromium khoảng 1/3 lần tải VÀ có thể treo mà không báo lỗi — bọc mọi lần thu thập trong một Promise.race watchdog 90s và khởi động lại trình duyệt khi thất bại. Ghi một dòng nhịp tim mỗi chu kỳ để log im lặng có nghĩa là "bị kẹt", không phải "yên tĩnh".

Bảo vệ chất lượng (tất cả đều học được từ các dương tính giả thực tế):

Trước tín dụng: bỏ qua các tiêu đề là nhiều món/hàng loạt hoặc đề cập đến japanese/chinese/korean/german/french/etc.

Sau xác định: từ chối nếu bộ xác định của PokeGrade là thị trường nước ngoài (token JP/CS/CN/KR) — người bán giấu ngôn ngữ khỏi tiêu đề.

Bẫy Celebrations: PokeGrade có thể xác định nhầm các bản tái bản "Classic Collection" của Celebrations là bản gốc cổ điển (một bản tái bản $30 được so sánh với $30k). Nếu tiêu đề nói celebrations/classic collection nhưng bộ xác định không, hãy loại bỏ so sánh. Rủi ro tái bản tương tự: Base Set 2, XY Evolutions.

Bất cứ thứ gì có tỷ lệ 5x hoặc cao hơn đều bị gắn cờ "đáng ngờ — cần xem xét" và bị loại khỏi thu nhập chính (tỷ lệ cực cao hầu như luôn là so sánh sai, không phải trúng đậm).

GIAI ĐOẠN 3 — Bảng điều khiển (ứng dụng web localhost)

Một máy chủ HTTP Node không phụ thuộc duy nhất (bind 0.0.0.0 để điện thoại trên mạng LAN có thể mở) phục vụ một file HTML thăm dò endpoint /data mỗi 30s. Phong cách "trading terminal" tối trước: số monospace, đèn LED trạng thái cho mỗi dịch vụ (mtime file log = sức khỏe), dòng chữ cuộn các đánh giá gần đây, hoạt ảnh đếm lên. Ba tab:

1. Sniper — dải thống kê (lợi nhuận tiềm năng sau phí không bao gồm đáng ngờ, deal, đề nghị, cần xem xét, đã đánh giá), biểu đồ hoạt động quét mỗi giờ, biểu đồ thu nhập tích lũy, phân tích phán quyết, bảng điểm chiến lược, và bảng kết quả có thể sắp xếp với hình thu nhỏ tin đăng, công tắc sao/yêu thích (có thể lọc), và nút "đã mua" sao chép kết quả trực tiếp vào sổ cái.

2. Theo dõi thị trường — trình theo dõi giá đã bán (Giai đoạn 4).

3. Sổ cái — Giai đoạn 5.

Phục vụ hình ảnh bên ngoài thông qua proxy /thumb cùng nguồn gốc (danh sách trắng các CDN chợ) — hình ảnh chéo nguồn gốc/liên kết nóng bị chặn trong một số máy khách. Kết quả đáng ngờ: huy hiệu cảnh báo + bị loại khỏi tổng số.

GIAI ĐOẠN 4 — Trình theo dõi giá đã bán thị trường

Dữ liệu đã bán trên eBay KHÔNG có trong API công khai. Thu thập tìm kiếm đã bán (LH_Sold=1, LH_Complete=1, sort newest) với headless Chromium (channel:'chromium'), giả mạo UA trình duyệt, và thăm trang chủ làm nóng trước (truy cập sâu trực tiếp bị chặn bot). Thẻ: [data-listingid] elements; các mặt hàng đã bán thực sự có dòng "SOLD date" (quảng cáo tài trợ thì không). Mỗi phút, cho mỗi truy vấn đã cấu hình: lấy 10 giá đã bán gần nhất, thêm avg/median/min/max vào CSV. Biểu đồ bảng điều khiển vẽ đường avg + dải min-max cho mỗi trình theo dõi với nút phóng to/thu nhỏ cửa sổ thời gian +/-. Một script backfill một lần duyệt tối đa 10 trang kết quả nhóm theo ngày bán đã in để tái tạo khoảng một tuần lịch sử hàng ngày (idempotent). Lùi lại 10 phút sau 3 lần trích xuất trống liên tiếp.

GIAI ĐOẠN 5 — Sổ cái (mua/bán lãi/lỗ)

Tab sổ cái với đầu vào MUA và đầu vào BÁN: dán bất kỳ URL tin đăng nào từ

mercari.com ,

jp.mercari.com ,

japan.us.mercari.com (cửa hàng xuyên biên giới),

ebay.com (bao gồm

ebay.io liên kết ngắn chia sẻ ứng dụng), hoặc

vinted.com . Một script tìm nạp xác định (không AI) trích xuất tiêu đề/giá/tiền tệ/hình ảnh:

Chính:

schema.org Product JSON-LD (chính xác trên jp.mercari, ebay, vinted).

japan.us .mercari KHÔNG có JSON-LD — giá là [data-testid="main-price"] (ký hiệu và số trên các dòng riêng biệt), đã là USD.

ebay.io liên kết ngắn chỉ phân giải trong trình duyệt thực và thường đáp xuống shell lỗi — lấy id item từ URL đã phân giải và gọi Browse API get_item_by_legacy_id thay vào đó.

Từ chối các trang thử thách bot ("Just a moment...", "Error Page") là lỗi — không bao giờ lưu trữ chúng dưới dạng mục nhập.

Chuyển đổi không phải USD qua

frankfurter.app (ECB, miễn phí, lưu cache 12h). Lưu mục nhập trong ledger.json; tổng luân chuyển = đã bán trừ đã mua, cộng với số liệu sau phí 12%; các hàng hiển thị hình thu nhỏ, chip thị trường, giá bản địa + USD, và xóa có xác nhận. Giá ghi lại = giá niêm yết (bỏ qua đề nghị) — đó là một sự đơn giản hóa có chủ đích.

KIỂM TRA CHẤP NHẬN THEO GIAI ĐOẠN

Chạy một chu kỳ thực tế và cho tôi xem log; xác minh một tin đăng thực tế từ đầu đến cuối qua PokeGrade trước khi kết nối vòng lặp; sau bất kỳ thay đổi UI nào, chụp ảnh màn hình bảng điều khiển ở cả chế độ sáng và tối; không bao giờ để lại các mục nhập thử nghiệm trong sổ cái của tôi hoặc các tim thử nghiệm trên tài khoản của tôi.

Cảnh báo công bằng trước khi bạn chạy nó: các trình thu thập nằm trong vùng xám với Điều khoản dịch vụ của chợ — giữ nhịp độ nhẹ nhàng và mong đợi thỉnh thoảng có captcha. Nhận dạng thẻ bằng AI thường xuyên sai đến mức tự động mua hàng sẽ là đốt tiền. Và thực tế phí của bạn có thể khác với 12% của tôi — hãy điều chỉnh lại ngưỡng.

Nếu bạn xây dựng một cái, hãy cho tôi xem nó tìm thấy gì.

Lưu một chạm

Đọc sâu bài viết viral bằng AI trong YouMind

Lưu nguồn, đặt câu hỏi tập trung, tóm tắt lập luận và biến một bài viết viral thành các ghi chú có thể tái sử dụng trong một không gian làm việc AI duy nhất.

Khám phá YouMind
Dành cho nhà sáng tạo

Biến Markdown của bạn thành bài viết 𝕏 gọn gàng

Khi bạn đăng bài viết dài của riêng mình, việc định dạng hình ảnh, bảng và khối mã cho 𝕏 rất mệt mỏi. YouMind biến cả bản nháp Markdown thành một bài viết 𝕏 gọn gàng, sẵn sàng để đăng.

Thử Markdown sang 𝕏

Thêm pattern để giải mã

Bài viết viral gần đây

Khám phá thêm bài viết viral