SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
7.5 KB · 171 lines json
Raw Blame History
1{2  "id": "cardboard-memories",3  "displayName": "Cardboard Memories (Canadian sports-card & TCG & collector-toy store, CAD)",4  "sourceId": "cardboard-memories",5  "sourceName": "Cardboard Memories",6  "sourceType": "dealer",7  "sourceUrl": "https://www.cardboardmemories.ca",8  "module": "api/cardboard-memories",9  "enginePriority": [10    "api"11  ],12  "categories": [13    "hockey_cards",14    "football_cards",15    "baseball_cards",16    "basketball_cards",17    "sports_cards",18    "sports_memorabilia",19    "yugioh",20    "pokemon",21    "magic_the_gathering",22    "funko",23    "comics",24    "dc_comics",25    "soccer_cards",26    "f1_cards",27    "marvel_comics"28  ],29  "regions": [30    "CA"31  ],32  "languages": [33    "en"34  ],35  "currency": [36    "CAD"37  ],38  "supportsListings": true,39  "supportsSold": false,40  "supportsAuctions": false,41  "supportsImages": true,42  "supportsCatalog": false,43  "supportsPopulation": false,44  "supportsLookup": true,45  "refreshFrequencyMinutes": 720,46  "priority": "medium",47  "trustScore": 0.75,48  "attributionRequired": true,49  "termsUrl": "https://www.cardboardmemories.ca/policies/terms-of-service",50  "accessNotes": "Cardboard Memories (cardboardmemories.ca) runs on Shopify. The connector reads ONLY the public, unauthenticated storefront JSON that every Shopify shop serves to any visitor: /collections/<handle>/products.json?limit=250&page=N for the 14 configured collections (hockey-cards, football-cards-1, baseball-cards, basketball-cards, sports-cards, upper-deck-authenticated, yu-gi-oh-singles, pokemon … (+6 more, see config.collections)) and /products/<handle>.json for URL lookups (~26k comics, 1.1k hockey card products, Yu-Gi-Oh!/Pokémon singles, Funko). robots.txt (verified 2026-09-08, User-agent *): standard Shopify rules — Disallow /admin, /cart, /checkout(s), /orders, /account, /services, /sf_*, /cart.js, /recommendations/products, /cdn/wpm/*.js and the filter/sort crawl traps (/collections/*sort_by*, /collections/*+*, /collections/*filter*&*filter*); no Crawl-delay for *. The /collections/<handle>/products.json and /products/<handle>.json paths we read carry none of those patterns and are allowed. Sitemap declared at /sitemap.xml (not needed). Access behaviour: plain HTTP 200 JSON with the honest RareIndexBot UA, no anti-bot challenge, no login, no key. Market pinning: Shopify Markets localises products.json prices by the requester IP as soon as an Accept-Language header is present (observed on Markets-enabled shops: a Canadian crawler receives CAD-converted prices with content-language en-CA while the JSON carries no currency field). Every request therefore sends the public localization=CA cookie — the shop's own home market, exactly what a CA visitor gets — so prices are always the declared CAD (verified 2026-09-08: 30.00 vs 43.00 on a Markets shop). Politeness: 1 request per 1.5 s, concurrency 1 per host (connectors/domains.d/g3-shops-na.json), crawlDepth pages per collection per incremental run, backfill bounded by backfillMaxPages. Data: asking prices in CAD (the shop's declared currency) — these are LISTINGS, never sales (§111); one listing per variant (condition/size/edition), variant SKU kept as identifier, out-of-stock variants kept as 'ended' listings, 0.00-priced placeholders dropped. Dates: published_at only; no fetch time is ever used as a sale date. Deliberately NOT fetched: cart/checkout/account/customer endpoints, per-product .js barcode enrichment (fetchBarcodes=false: one extra request per product is not worth it for listings), the whole-shop /products.json, and unmapped collections — RPG books, miniatures, paints, supplies (binders, sleeves, deck boxes), trade paperbacks. No personal data is collected; seller = the store itself.",51  "enabled": true,52  "schemaVersion": "1.0",53  "acquisitionMethod": "Shopify storefront products.json",54  "historicalDepth": "none",55  "requires": [],56  "config": {57    "currency": "CAD",58    "market": "CA",59    "seller": "Cardboard Memories",60    "location": "Moncton, NB, Canada",61    "collections": [62      {63        "handle": "hockey-cards",64        "categorySlug": "hockey_cards"65      },66      {67        "handle": "football-cards-1",68        "categorySlug": "football_cards"69      },70      {71        "handle": "baseball-cards",72        "categorySlug": "baseball_cards"73      },74      {75        "handle": "basketball-cards",76        "categorySlug": "basketball_cards"77      },78      {79        "handle": "sports-cards",80        "categorySlug": "sports_cards"81      },82      {83        "handle": "upper-deck-authenticated",84        "categorySlug": "sports_memorabilia",85        "brand": "Upper Deck Authenticated"86      },87      {88        "handle": "yu-gi-oh-singles",89        "categorySlug": "yugioh",90        "franchise": "Yu-Gi-Oh!"91      },92      {93        "handle": "pokemon",94        "categorySlug": "pokemon",95        "franchise": "Pokémon"96      },97      {98        "handle": "pokemon-booster-boxes",99        "categorySlug": "pokemon",100        "franchise": "Pokémon"101      },102      {103        "handle": "magic-the-gathering",104        "categorySlug": "magic_the_gathering",105        "franchise": "Magic: The Gathering"106      },107      {108        "handle": "magic-the-gathering-boxes",109        "categorySlug": "magic_the_gathering",110        "franchise": "Magic: The Gathering"111      },112      {113        "handle": "funko-pop",114        "categorySlug": "funko",115        "brand": "Funko"116      },117      {118        "handle": "comic-books",119        "categorySlug": "comics"120      },121      {122        "handle": "dc-comics",123        "categorySlug": "dc_comics",124        "franchise": "DC"125      }126    ],127    "rules": [128      {129        "match": "^(?=[\\s\\S]*\\bhockey\\b)[\\s\\S]*\\| sports-cards$",130        "categorySlug": "hockey_cards"131      },132      {133        "match": "^(?=[\\s\\S]*\\bbaseball\\b)[\\s\\S]*\\| sports-cards$",134        "categorySlug": "baseball_cards"135      },136      {137        "match": "^(?=[\\s\\S]*\\bbasketball\\b)[\\s\\S]*\\| sports-cards$",138        "categorySlug": "basketball_cards"139      },140      {141        "match": "^(?=[\\s\\S]*\\bfootball\\b)[\\s\\S]*\\| sports-cards$",142        "categorySlug": "football_cards"143      },144      {145        "match": "^(?=[\\s\\S]*\\b(soccer|premier league|uefa|fifa)\\b)[\\s\\S]*\\| sports-cards$",146        "categorySlug": "soccer_cards"147      },148      {149        "match": "^(?=[\\s\\S]*\\b(formula 1|formula one|\\bf1\\b)\\b)[\\s\\S]*\\| sports-cards$",150        "categorySlug": "f1_cards"151      },152      {153        "match": "^(?=[\\s\\S]*\\b(marvel|spider-?man|x-men|avengers|wolverine|hulk|deadpool|iron man|captain america|fantastic four|daredevil|venom|punisher)\\b)[\\s\\S]*\\| (comic-books)$",154        "categorySlug": "marvel_comics",155        "franchise": "Marvel"156      },157      {158        "match": "^(?=[\\s\\S]*\\b(dc comics|batman|superman|wonder woman|justice league|the flash|green lantern|aquaman|detective comics|action comics|harley quinn|joker|nightwing|swamp thing)\\b)[\\s\\S]*\\| (comic-books)$",159        "categorySlug": "dc_comics",160        "franchise": "DC"161      }162    ],163    "defaultCategory": null,164    "exclude": "gift card|sleeves?|deck box|binder|playmat|toploader|top loader|storage box|dice|tokens? only|bundle of|mystery|buylist|submission|event ticket|\\bentry\\b|tournament|store credit|pre-?release event|supplies|card savers?|\\brepack|bulk lot|\\blot of\\b|\\bpaints?\\b|primer|brushes|online (pack|code)|digital code|code card|unused digital|ptcgo|ptcg live|bags? (and|&) boards|\\bmylar|comic bags|backing boards|magnetic holder|one-touch|\\bpaint",165    "keepOutOfStock": true,166    "fetchBarcodes": false,167    "wholeShop": false,168    "pageSize": 250169  }170}171