@@ -5,7 +5,7 @@ import type { CheerioAPI } from 'cheerio'
55import * as cheerio from 'cheerio'
66import fetch from 'node-fetch'
77import { expansions as allExpansions } from '../frontend/src/lib/CardsDB'
8- import { type Card , type CardType , cardTypes , type ExpansionId , type Rarity } from '../frontend/src/types'
8+ import { type Card , type CardType , cardTypes , type Expansion , type ExpansionId , type Rarity } from '../frontend/src/types'
99import { encode } from './encoder'
1010
1111const BASE_URL = 'https://pocket.limitlesstcg.com'
@@ -14,8 +14,6 @@ const targetDir = 'frontend/assets/'
1414const imagesDir = 'frontend/public/images/en-US/'
1515const imagesPath = '/images/en-US/'
1616
17- const expansions = allExpansions . map ( ( e ) => e . id )
18-
1917const packs = [
2018 'pikachupack' ,
2119 'charizardpack' ,
@@ -229,13 +227,13 @@ function urlToCardId(url: string): { expansion: string; cardNr: number; cardId:
229227 }
230228}
231229
232- async function extractCardInfo ( $ : CheerioAPI , cardUrl : string , expansion : string ) {
230+ async function extractCardInfo ( $ : CheerioAPI , cardUrl : string , expansion : Expansion ) {
233231 const inPackId = Number . parseInt ( cardUrl . split ( '/' ) . pop ( ) , 10 )
234232 if ( ! inPackId ) {
235233 throw new Error ( `Faied to parse card id from url: ${ cardUrl } ` )
236234 }
237235
238- const card_id = `${ expansion } -${ inPackId } `
236+ const card_id = `${ expansion . id } -${ inPackId } `
239237
240238 const imageUrl = $ ( 'img.card' ) . attr ( 'src' )
241239 if ( ! imageUrl ) {
@@ -313,7 +311,7 @@ async function extractCardInfo($: CheerioAPI, cardUrl: string, expansion: string
313311
314312 const raritySection = $ ( 'table.card-prints-versions tr.current' )
315313 let rarity = ( cardUrl . toString ( ) . includes ( 'P-A' ) ? 'P' : raritySection . find ( 'td:last-child' ) . text ( ) . trim ( ) || 'P' ) as Rarity
316- for ( const { rarity : rarityOverride , start, end } of rarityOverrides [ expansion ] ) {
314+ for ( const { rarity : rarityOverride , start, end } of rarityOverrides [ expansion . id ] ) {
317315 if ( start <= inPackId && inPackId <= end ) {
318316 rarity = rarityOverride
319317 }
@@ -328,9 +326,10 @@ async function extractCardInfo($: CheerioAPI, cardUrl: string, expansion: string
328326
329327 const alternate_versions : string [ ] = [ ]
330328 let linked = false
331- let baseExpansion = expansion
329+ let baseExpansion = expansion . id
332330 let baseCardNr = inPackId
333331 let foundMyself = false
332+ const containsLinkedCards = expansion . packStructure ?. containsLinkedCards
334333
335334 console . log ( 'processing alternates for' , card_id )
336335 $ ( 'table.card-prints-versions tr' ) . each ( ( _i , version ) => {
@@ -348,8 +347,8 @@ async function extractCardInfo($: CheerioAPI, cardUrl: string, expansion: string
348347 // the alternate cards are only available up to EX card rarity (at least for now). And since limitless doesn't properly set shiny cards, we have to check it like this.
349348 // Be aware that for higher rarities this would not work, as there are different fullart versions of the same card with the same rarity, eg. A2a-82 and A2a-91.
350349 if ( rarity . includes ( '◊' ) && alternate_card_rarity === rarity && ! foundMyself && ! linked ) {
351- baseExpansion = alternate_card_id ? urlToCardId ( alternate_card_id ) . expansion : expansion
352- baseCardNr = alternate_card_id ? urlToCardId ( alternate_card_id ) . cardNr : inPackId
350+ baseExpansion = alternate_card_id ? ( urlToCardId ( alternate_card_id ) . expansion as ExpansionId ) : expansion . id
351+ baseCardNr = alternate_card_id && containsLinkedCards ? urlToCardId ( alternate_card_id ) . cardNr : inPackId
353352 linked = ! ! alternate_card_id // just for reference to double-check
354353 console . log ( 'found alternate option' , alternate_card_id , baseExpansion , baseCardNr , linked )
355354 }
@@ -358,9 +357,9 @@ async function extractCardInfo($: CheerioAPI, cardUrl: string, expansion: string
358357 // We consider it a foil card if we already linked it, but still find the same rarity in the same set before the current card.
359358 if ( alternate_card_id && ! foundMyself ) {
360359 const alternateSetId = urlToCardId ( alternate_card_id ) . expansion
361- if ( alternateSetId === expansion && alternate_card_rarity === rarity ) {
360+ if ( alternateSetId === expansion . id && alternate_card_rarity === rarity ) {
362361 // same set, same rarity, means this one is an alternative art in the same set (can be foil), remove the link and treat like unique card.
363- baseExpansion = expansion // foils don't have linked cards (at least not yet!)
362+ baseExpansion = expansion . id // foils don't have linked cards (at least not yet!)
364363 baseCardNr = inPackId
365364 linked = false
366365 console . log ( 'disregarding alternate-->unique' , baseExpansion , baseCardNr , linked )
@@ -379,7 +378,7 @@ async function extractCardInfo($: CheerioAPI, cardUrl: string, expansion: string
379378
380379 console . log ( 'returning card info' , card_id )
381380 return {
382- expansion : expansion as ExpansionId ,
381+ expansion : expansion . id as ExpansionId ,
383382 card_id,
384383 image,
385384 hp,
@@ -402,11 +401,11 @@ async function extractCardInfo($: CheerioAPI, cardUrl: string, expansion: string
402401 }
403402}
404403
405- async function getCardDetails ( cardUrl : string , expansionId : string ) {
404+ async function getCardDetails ( cardUrl : string , expansion : Expansion ) {
406405 try {
407406 console . log ( `Fetching details for ${ cardUrl } ...` )
408407 const $ = await fetchHTML ( cardUrl )
409- return await extractCardInfo ( $ , cardUrl , expansionId )
408+ return await extractCardInfo ( $ , cardUrl , expansion )
410409 } catch ( error ) {
411410 console . error ( `Error fetching details for ${ cardUrl } :` , error )
412411 return null // Return null or a default object to continue the process for other cards
@@ -430,9 +429,9 @@ async function getCardLinks(mainUrl: string) {
430429const cards1 : Awaited < ReturnType < typeof getCardDetails > > [ ] = [ ]
431430
432431async function scrapeCards ( ) {
433- for ( const expansion of expansions ) {
432+ for ( const expansion of allExpansions ) {
434433 try {
435- const mainUrl = `${ BASE_URL } /cards/${ expansion } `
434+ const mainUrl = `${ BASE_URL } /cards/${ expansion . id } `
436435 const cardLinks = await getCardLinks ( mainUrl )
437436 console . log ( `Found ${ cardLinks . length } card links.` )
438437
0 commit comments