User:Habst/getWaTour.js

// tourType = 'continental-tour'; year = '2024'; ids = { 'cross-country-tour': { '2023/24': {id: 3664, Gold: 3983, Silver: 3984, Bronze: 3985}, }, 'label-road-races': { 2024: {id:3775,Platinum:3722,Gold:3659,Elite:3944,Label:3947}, }, 'combined-events-tour': { '2023/24': {id:3767,Gold:3987,Silver:3988,Bronze:3989}, }, 'race-walking-tour': { '2023/24': {id:3692,Gold:3991,Silver:3992,Bronze:3993}, }, 'continental-tour': { 2024: {id:3773,Gold:3781,Silver:3782,Bronze:3783,Challenger:4049}, }, } meets = await (await fetch("https://tppcjbjqljd4tj7my77t466hn4.appsync-api.eu-west-1.amazonaws.com/graphql", { "credentials": "omit", "headers": { "x-api-key": "da2-fulcgci74bbslidixnmkcr6sxu", },   "body": JSON.stringify({	"operationName": "getMinisiteCalendarEvents",	"query": `query getMinisiteCalendarEvents($competitionGroupId: Int, $competitionSubgroupId: Int, $season: String) {  getMinisiteCalendarEvents(competitionGroupId: $competitionGroupId, competitionSubgroupId: $competitionSubgroupId, season: $season) {    options {      seasons {        id        name        __typename      }      competitionSubgroups {        id        name        count        __typename      }      __typename    }    parameters {      season      competitionGroupId      competitionSubgroupId      __typename    }    results {      id      iaafId      hasResults      hasStartlist      hasApiResults      disciplines      rankingCategory      competitionSubgroup      undeterminedCompetitionPeriod {        status        label        remark        __typename      }      name      venue      country startDate endDate dateRange __typename }   __typename } }`,	"variables": { "competitionGroupId": ids[tourType][year].id, "competitionSubgroupId": 0, "season": year, }   }),    "method": "POST", })).json; console.log(Object.keys(ids[tourType][year]).filter(k => k !== 'id').map(tier => {  const mtgs = meets.data.getMinisiteCalendarEvents.results.filter(m => m.competitionSubgroup === tier);  return `| colspan="4" align="center" bgcolor="${{  Challenger:'white',  Label:'white',  Elite:'silver',  Platinum:'blue',  }[tier] ?? tier.toLowerCase}" | ${tier} (${mtgs.length}) \n|-\n` + mtgs.map(m => { const words = m.name.split(' ').filter((w, i) => {   if (+w === new Date(m.startDate).getFullYear) return false;    if (w.match(/^[0-9]+(st|nd|rd|th)$/)) return false;    if (w.match(/^[0-9]+(\.|°|º|\.º)$/)) return false;    if (w.match(/^[0-9]+ème$/)) return false;    if (i === 0 && w.match(/^[IVXL]+$/)) return false;    return true;  }); // if (words.join(' ') === 'Meeting de Paris') words.push('Indoor'); let name = words.join(' '); name = { Tallinn: 'Combined Events Tour Tallinn', ISTAF: 'ISTAF Berlin', 'The Hero': 'The Hero!', 'Capital Classic': 'Team Ledger Harcourts Capital Classic', "Sky's the Limit": "Sky's the Limit Meeting", 'Gouden Spike': 'Gouden Spike Meeting', 'Cork City Sports': 'Cork City Sports International Athletics', }[name] ?? name; let city = m.venue.split(', ').slice(1).join(', ').split(' (')[0]; if (!city || (m.country === 'USA' && city.split(' ').length <= 1)) city = m.venue.split(' (')[0]; city = { Montreuil: 'Montreuil, Seine-Saint-Denis', Halle: 'Halle (Saale)', Duszniki: 'Duszniki, Greater Poland Voivodeship', Cork: 'Cork (city)', Windsor: 'Windsor, Ontario', }[city] ?? city; return `| ${m.startDate} || ${['Gold', 'Silver', 'Bronze', 'Challenger', 'Platinum', 'Elite', 'Label'].includes(tier) ? `${name}` : name} || ${city} || ` }).join('\n|-\n') }).join('\n|-\n')); //