Ranking otchłani

Pobieranie wszystkich stron

import {
    type PvpCharacter,
    getSeasonPvpCharacters
} from 'margonemski-harvester'
;(async () => {
    const ladder: PvpCharacter[] = []
    const successPages: number[] = []
    const errorPages: number[] = []

    const result = await getSeasonPvpCharacters(
        {
            serverName: 'tempest',
            season: 5,
            onPageSuccess({ currentPage, data }) {
                ladder.push(...data)
                successPages.push(currentPage)
            },
            onPageError({ errorData, currentPage }) {
                console.error(errorData)
                errorPages.push(currentPage)
            }
        },
        {
            delayBetweenPagesInMs: 150 // 429 Too Many Requests
        }
    )

    if (result.success) {
        console.log({
            totalPages: result.totalPages
        })
    } else {
        console.error({
            cause: result.cause,
            errorName: result.errorName
        })
    }
})()

Pobieranie jeden strony

import { getSeasonPvpCharactersPage } from 'margonemski-harvester'
;(async () => {
    const result = await getSeasonPvpCharactersPage({
        serverName: 'tempest',
        season: 5,
        page: 1
    })

    if (result.success) {
        console.log(result.data)
    } else {
        console.error(result.cause)
    }
})()

Walidacja i parsowanie

Pomyślna walidacja i parsowanie są wymagane do zwrócenia obiektu zawierającego pobrane dane, dlatego nie ma potrzeby ich ponownego wykonywania.

import {
    type PvpCharacter,
    pvpCharacterSchema,
    pvpCharactersSchema
} from 'margonemski-harvester'

const pvpCharacter: PvpCharacter = {
    rank: 1,
    name: 'Łowcomir Kazrek',
    level: 93,
    profession: 'Łowca',
    lastOnline: '2 dni temu',
    winRatio: 25.12,
    wpr: '23 / 11 / 0',
    rankingPoints: 3200,
    characterLink: '/profile/view,7218282#char_467968,tempest'
}

const ladder: PvpCharacter[] = [pvpCharacter, pvpCharacter, pvpCharacter]

const parsedPvpCharacter = pvpCharacterSchema.parse(pvpCharacter)

const parsedLadder = pvpCharactersSchema.parse(ladder)