Jump to content

User:Habst/matchWdTfrrs.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// document.body.innerHTML = JSON.stringify(JSON.parse(document.body.innerText.split('\n').at(-1))['*'][0].a['*'].map(p => ({ title: p.title, q: p.q, id: p.id })));
clear()
window.ts ??= {};
window.cats ??= {};
normalize = s => s.replaceAll('_', ' ').replaceAll('-', ' ').replaceAll('  ', ' ').split('(')[0].normalize("NFD").replace(/\p{Diacritic}/gu, "").toLowerCase().trim();
t2wiki = (team, isMale) => {
  let pre = nicks[team];
  if (!pre) return null;
  if (Array.isArray(pre)) pre = pre[isMale ? 0 : 1];
  else pre += isMale ? ' men\'s' : ' women\'s';
  return `Category:${pre} track and field athletes`;
}
wikiJsonP = async (props) => {
  let wpResult;
  window.cb = res => wpResult = res;
  const script = Object.assign(document.createElement('script'), {
    src: 'https://en.wikipedia.org/w/api.php?' + new URLSearchParams({
      action: 'query',
      format: 'json',
      formatversion: '2',
      callback: 'cb',
      ...props,
    })
  });
  document.body.appendChild(script);
  await new Promise(res => script.addEventListener('load', res));
  return wpResult;
};
wdEdit = async (qid, prop, val, cmt, refs = [], rank = 'normal') => {
  return await (await fetch(`https://www.wikidata.org/w/rest.php/wikibase/v0/entities/items/${qid}/statements`, {
    headers: { 'Content-type': 'application/json' },
    method: 'POST',
    body: JSON.stringify({
      statement: {
        rank,
        property: { id: prop },
        value: { type: 'value', content: val },
        qualifiers: [], references: refs,
      },
      tags: [], bot: false,
      comment: cmt,
    }),
  })).json();
};
window.nicks = {
  Georgia: 'Georgia Bulldogs',
  Harvard: 'Harvard Crimson',
  Penn: 'Penn Quakers',
  UTSA: 'UTSA Roadrunners',
  Wis_Eau_Claire: 'Wisconsin–Eau Claire Blugolds',
  USC: 'USC Trojans',
  East_Tenn_St: 'East Tennessee State Buccaneers',
  Virginia: 'Virginia Cavaliers',
  Kansas: 'Kansas Jayhawks',
  Nebraska_Wesleyan: 'Nebraska Wesleyan Prairie Wolves',
  UC_Santa_Barbara: 'UC Santa Barbara Gauchos',
  Augustana_IL: 'Augustana (Illinois) Vikings',
  Duke: 'Duke Blue Devils',
  Bluffton: 'Bluffton Beavers',
  LIU_Post: 'LIU_Post_Pioneers',
  Miami_FL: 'Miami Hurricanes',
  Emporia_St: 'Emporia State Hornets',
  U_of_the_South: 'Sewanee Tigers',
  TAMU_Commerce: 'Texas A&M–Commerce Lions',
  Simpson: 'Simpson Storm',
  Lees_McRae: 'Lees–McRae Bobcats',
  UTEP: 'UTEP Miners',
  Western_Texas_College: 'Western Texas Westerners',
  Fairleigh_Dickinson_University: 'Fairleigh Dickinson Knights',
  Lincoln_MO: 'Lincoln Blue Tigers',
  Florida: 'Florida Gators',
  BYU: 'BYU Cougars',
  Louisville: 'Louisville Cardinals',
  Indiana_IN: 'Indiana Hoosiers',
  Virginia_Tech: 'Virginia Tech Hokies',
  Medaille: 'Medaille Mavericks',
  Washington: 'Washington Huskies',
  Carleton: 'Carleton Knights',
  Michigan_State: 'Michigan State Spartans',
  Michigan: 'Michigan Wolverines',
  LSU: ['LSU Tigers', 'LSU Lady Tigers'],
  Tennessee: 'Tennessee Volunteers',
  Concord: 'Concord Mountain Lions',
  Pomona_Pitzer: 'Pomona–Pitzer Sagehens',
  Akron: 'Akron Zips',
  Plymouth_State: 'Plymouth State Panthers',
  Williams: 'Williams Ephs',
  Wartburg: 'Wartburg Knights',
  Ohio_State: 'Ohio State Buckeyes',
  Trinity_Western: 'Trinity Western Spartans',
  Iona: 'Iona Gaels',
  Texas_Tech: 'Texas Tech Red Raiders',
  North_Carolina: 'North Carolina Tar Heels',
  Florida_Intl: 'FIU Panthers',
  Carson_Newman: 'Carson–Newman Eagles',
  Penn_State: 'Penn State Nittany Lions',
  Ramapo: 'Ramapo Roadrunners',
  Washington_State: 'Washington State Cougars',
  Oregon: 'Oregon Ducks',
  UCLA: 'UCLA Bruins',
  North_Carolina_St: 'NC State Wolfpack',
  Georgia_Tech: 'Georgia Tech Yellow Jackets',
  Arkansas: 'Arkansas Razorbacks',
  N_Carolina_AT: 'North Carolina A&T Aggies',
  Alabama: 'Alabama Crimson Tide',
  Pittsburg_St: 'Pittsburg State Gorillas',
  Cedarville: 'Cedarville Yellow Jackets',
  Eastern_Kentucky: 'Eastern Kentucky Colonels',
  Stanford: 'Stanford Cardinal',
  Arizona: 'Arizona Wildcats',
  Jacksonville_College: 'Jacksonville Jaguars',
  Rose_Hulman: 'Rose–Hulman Fightin\' Engineers',
  Minnesota: 'Minnesota Golden Gophers',
  Southern_Nazarene: 'Southern Nazarene Crimson Storm',
  Alfred_State: 'Alfred State Pioneers',
  Wis_Platteville: 'Wisconsin–Platteville Pioneers',
  Trine: 'Trine Thunder',
  Indiana_Wesleyan: 'Indiana Wesleyan Wildcats',
  Mount_Vernon_Nazarene: 'Mount Vernon Nazarene Cougars',
  Augustana_SD: 'Augustana (South Dakota) Vikings',
  St_Martins: 'Saint Martin\'s Saints',
  Mount_Marty: 'Mount Marty Lancers',
  Cal_Poly_Pomona: 'Cal Poly Pomona Broncos',
  High_Point: 'High Point Panthers',
  East_Carolina: 'East Carolina Pirates',
  Vanderbilt: 'Vanderbilt Commodores',
  Cornell: 'Cornell Big Red',
  Hawaii: ['Hawaii Rainbow Warriors', 'Hawaii Rainbow Wahine'],
  Fordham: 'Fordham Rams',
  Clemson: 'Clemson Tigers',
  McKendree: 'McKendree Bearcats',
  New_Mexico: 'New Mexico Lobos',
  Cincinnati: 'Cincinnati Bearcats',
  Wisconsin: 'Wisconsin Badgers',
  California_CA: 'California Golden Bears',
  Arizona_State: 'Arizona State Sun Devils',
  Oklahoma_State: ['Oklahoma State Cowboys', 'Oklahoma State Cowgirls'],
  Mississippi: 'Ole Miss Rebels',
  South_Plains: ['South Plains Texans', 'South Plains Lady Texans'],
  Maryland: 'Maryland Terrapins',
  South_Carolina: 'South Carolina Gamecocks',
  West_Virginia: 'West Virginia Mountaineers',
  East_Stroudsburg: 'East Stroudsburg Warriors',
  Baldwin_Wallace: 'Baldwin Wallace Yellow Jackets',
  Babson: 'Babson Beavers',
  Oklahoma: 'Oklahoma Sooners',
  Kentucky: 'Kentucky Wildcats',
  Purdue: 'Purdue Boilermakers',
  Villanova: 'Villanova Wildcats',
  Utah: 'Utah Utes',
  Nebraska: 'Nebraska Cornhuskers',
  Northern_Arizona: 'Northern Arizona Lumberjacks',
  Iowa_State: 'Iowa State Cyclones',
  Texas_AM: 'Texas A&M Aggies',
  Notre_Dame_IN: 'Notre Dame Fighting Irish',
  Florida_State: 'Florida State Seminoles',
  Charleston_Southern: 'Charleston Southern Buccaneers',
  Princeton: 'Princeton Tigers',
  Baylor: 'Baylor Bears',
  Mid_Tenn_State: 'Middle Tennessee Blue Raiders',
  Tennessee_St: ['Tennessee State Tigers', 'Tennessee State Lady Tigers'],
  Illinois_State: 'Illinois State Redbirds',
  Liberty: ['Liberty Flames', 'Liberty Lady Flames'],
  Iowa: 'Iowa Hawkeyes',
  San_Diego_State: 'San Diego State Aztecs',
  Marshall: 'Marshall Thundering Herd',
  Texas: 'Texas Longhorns',
  Iowa_Western_CC: 'Iowa Western Reivers',
  Montana_State: 'Montana State Bobcats',
  Furman: 'Furman Paladins',
  Mississippi_Valley: ['Mississippi Valley State Delta Devils', 'Mississippi Valley State Devilettes'],
  Barton_County_CC: 'Barton Cougars',
  Iowa_Central_CC: 'Iowa Central Tritons',
  Drake: 'Drake Bulldogs',
  Findlay: 'Findlay Oilers',
  Tulsa: 'Tulsa Golden Hurricane',
  Rio_Grande: 'Rio Grande RedStorm',
  Mississippi_St: 'Mississippi State Bulldogs',
  Colorado: 'Colorado Buffaloes',
  Dartmouth: 'Dartmouth Big Green',
  Coastal_Carolina: 'Coastal Carolina Chanticleers',
  Saint_Leo: 'Saint Leo Lions',
  Citadel: 'The Citadel Bulldogs',
  Utah_State: 'Utah State Aggies',
  TCU: 'TCU Horned Frogs',
  South_Florida: 'South Florida Bulls',
  Auburn: 'Auburn Tigers',
  UNLV: 'UNLV Rebels',
  Idaho: 'Idaho Vandals',
  Idaho_State: 'Idaho State Bengals',
  Memphis: 'Memphis Tigers',
  Indiana_State: 'Indiana State Sycamores',
  Eastern_Michigan: 'Eastern Michigan Eagles',
  Western_Colorado: 'Western Colorado Mountaineers',
  Kent_State: 'Kent State Golden Flashes',
  Brown: 'Brown Bears',
  Southern_Illinois: 'Southern Illinois Salukis',
  Maine_Maritime: 'Maine Maritime Mariners',
  San_Diego: 'San Diego Toreros',
  Central_Arizona: 'Central Arizona Vaqueros',
  Augusta: 'Augusta Jaguars',
  Northwestern_IA: 'Northwestern Red Raiders',
  Pittsburgh: 'Pittsburgh Panthers',
  Western_Kentucky: ['Western Kentucky Hilltoppers', 'Western Kentucky Lady Toppers'],
  Louisiana_Lafayette: 'Louisiana Ragin\' Cajuns',
  Illinois: 'Illinois Fighting Illini',
  Gardner_Webb: 'Gardner–Webb Runnin\' Bulldogs',
  Mississippi_College: 'Mississippi College Choctaws',
  Graceland: 'Graceland Yellowjackets',
  St_Josephs_IN: 'Saint Joseph\'s Pumas',
  Syracuse: 'Syracuse Orange',
  Houston: 'Houston Cougars',
  Texas_AM_CC: 'Texas A&M–Corpus Christi Islanders',
  Oklahoma_City: 'Oklahoma City Stars',
  Northwest_Kansas: 'Northwest Kansas Mavericks',
  Tabor: 'Tabor Bluejays',
  Texas_Arlington: 'UT Arlington Mavericks',
  Miami_OH: 'Miami RedHawks',
  Eastern_Nazarene: 'Eastern Nazarene Lions',
  Montevallo: 'Montevallo Falcons',
  Concordia_NE: 'Concordia Bulldogs',
  St_Michaels: 'Saint Michael\'s Purple Knights',
  Judson: 'Judson Eagles',
  Sam_Houston: 'Sam Houston Bearkats',
  William_Carey: 'William Carey Crusaders',
  Hanover: 'Hanover Panthers',
  Diablo_Valley: 'Diablo Valley Vikings',
  Mount_Mercy: 'Mount Mercy Mustangs',
  Coast_Guard: 'Coast Guard Bears',
  Dordt: 'Dordt Defenders',
  Lipscomb: 'Lipscomb Bisons',
  Mount_Union: 'Mount Union Purple Raiders',
  Adrian: 'Adrian Bulldogs',
  Ohio_Northern: 'Ohio Northern Polar Bears',
  Kennesaw_State: 'Kennesaw State Owls',
  Northern_Iowa: 'Northern Iowa Panthers',
  Florida_Atlantic: 'Florida Atlantic Owls',
  Georgetown_DC: 'Georgetown Hoyas',
  UMass_Boston: 'UMass–Boston Beacons',
  Otterbein: 'Otterbein Cardinals',
  Missouri: 'Missouri Tigers',
  Coffeyville_CC: 'Coffeyville Red Ravens',
  North_Dakota_St: 'North Dakota State Bison',
  Stevenson: 'Stevenson Mustangs',
  Luther: 'Luther Norse',
  Colorado_State: 'Colorado State Rams',
  Wichita_State: 'Wichita State Shockers',
  South_Dakota: 'South Dakota Coyotes',
  Kansas_State: 'Kansas State Wildcats',
  Academy_of_Art: 'Academy of Art Urban Knights',
  'UNT-Dallas': 'UNT Dallas Trailblazers',
  USC_Upstate: 'USC Upstate Spartans',
  Morgan_State: 'Morgan State Bears',
  Paine: 'Paine Lions',
  Bloomfield: 'Bloomfield Bears',
  Concordia_St_Paul: 'Concordia Golden Bears',
  Kentucky_Wesleyan: 'Kentucky Wesleyan Panthers',
  Elmhurst: 'Elmhurst Bluejays',
  Texas_State: 'Texas State Bobcats',
  William_Penn: 'William Penn Statesmen',
  Valparaiso: 'Valparaiso Beacons',
  Manhattan: 'Manhattan Jaspers',
  Rutgers: 'Rutgers Scarlet Knights',
  UNC_Greensboro: 'UNC Greensboro Spartans',
  Shorter: 'Shorter Hawks',
  Boise_State: 'Boise State Broncos',
  Rice: 'Rice Owls',
  Albany: 'Albany Great Danes',
  Columbia: 'Columbia Lions',
  Appalachian_State: 'Appalachian State Mountaineers',
  Wyoming: ['Wyoming Cowboys', 'Wyoming Cowgirls'],
  Yale: 'Yale Bulldogs',
  Central_Michigan: 'Central Michigan Chippewas',
  Coppin_State: 'Coppin State Eagles',
  Northeastern: 'Northeastern Huskies',
  Bethel_IN: 'Bethel Pilots',
  Assumption: 'Assumption Greyhounds',
  Charlotte: 'Charlotte 49ers',
  Winona_State: 'Winona State Warriors',
  Tarleton_State: 'Tarleton State Texans',
  Texas_Lutheran: 'Texas Lutheran Bulldogs',
  Haverford: 'Haverford Fords',
  William__Mary: 'William & Mary Tribe',
  Catholic: 'Catholic University Cardinals',
  UC_Irvine: 'UC Irvine Anteaters',
  Finger_Lakes_CC: 'Finger Lakes Lakers',
  Providence: 'Providence Friars',
  DePaul: 'DePaul Blue Demons',
  Portland_State: 'Portland State Vikings',
  Southern_Miss: 'Southern Miss Golden Eagles',
  Long_Beach_St: 'Long Beach State Beach',
  Cal_St_Fullerton: 'Cal State Fullerton Titans',
  Little_Rock: 'Little Rock Trojans',
  Greenville: 'Greenville Panthers',
  Oregon_State: 'Oregon State Beavers',
  Wis_Stout: 'Wisconsin–Stout Blue Devils',
  Davenport: 'Davenport Panthers',
  Lindsey_Wilson: 'Lindsey Wilson Blue Raiders',
  Hope: ['Hope Flying Dutchmen', 'Hope Flying Dutch'],
  George_Mason: 'George Mason Patriots',
  Central_Florida: 'UCF Knights',
  Arkansas_Pine_Bluff: 'Arkansas–Pine Bluff Golden Lions',
  Southern: ['Southern Jaguars', 'Southern Lady Jaguars'],
  Weber_State: 'Weber State Wildcats',
  San_Francisco: 'San Francisco Dons',
  Louisiana_Tech: ['Louisiana Tech Bulldogs', 'Louisiana Tech Lady Techsters'],
  Southern_Utah: 'Southern Utah Thunderbirds',
  Hampton: ['Hampton Pirates', 'Hampton Lady Pirates'],
  North_Texas: 'North Texas Mean Green',
  Oral_Roberts: 'Oral Roberts Golden Eagles',
  SMU: 'SMU Mustangs',
  Butler: 'Butler Bulldogs',
};

(async () => {
for (const p of ps.toReversed()) {
  const title = normalize(p.title);
  if (p.done) { continue; }
  console.log(p.title);
  cats[p.title] ??= await wikiJsonP({ titles: p.title, prop: 'categories', cllimit: '500' });
  const pCats = cats[p.title].query.pages[0].categories.map(c => c.title);
  const yob = +pCats.find(c => c.match(/^Category:\d\d\d\d births$/))?.split(':')[1].split(' ')[0];
  if (yob && yob < 1980) { console.log(`  ${yob} birth, skipping`); continue; }
  const teams = pCats.filter(c => c.split(' ').length > 5 && !c.includes(' male ') && !c.includes(' female ') && c.endsWith(' track and field athletes'));

  ts[title] ??= new DOMParser().parseFromString(await (await fetch("https://www.tfrrs.org/search.html", {
    headers: { "content-type": "application/x-www-form-urlencoded" },
    body: `athlete=${title}`,
    method: "POST",
  })).text(), 'text/html').querySelector('.panel-body').innerHTML;

  const body = new DOMParser().parseFromString(ts[title], 'text/html');
  const rows = [...body.querySelectorAll('tr.allRows')].map(row => {
    const tds = [...row.querySelectorAll('td')].map(td => td.querySelector('a'));
    if (!tds[1]) console.log('  *** no team in results');
    const id = tds[0].href.split('/')[4];
    const isMale = tds[1]?.href.split('_')[2] === 'm';
    const team = tds[0].href.split('/')[5];
    const name = normalize(tds[0].href.split('/')[6]?.split('.')[0] ?? '');
    return { id, isMale, team, name };
  });
  if (!rows.length) { console.log('  no search results'); continue; }
  let hasMisses = false;
  const matches = rows.filter(({ id, isMale, team, name }) => {
    if (!team) return false;
    const wikiTeam = t2wiki(team, isMale);
    if (!wikiTeam) { hasMisses = true; console.log('  miss', team, teams.join('\n')); return false; }
    // console.log(title, name, title === name, teams, wikiTeam);
    return title === name && teams.includes(wikiTeam);
  });
  if (hasMisses && matches.length < teams.length) {
    const allFound = teams.every(ct => {
      const t = ct.split(':')[1].replace(' track and field athletes', '').replace(' men\'s', '').replace(' women\'s', '');
      return Object.values(nicks).flat().includes(t);
    });
    if (!allFound) { console.log(rows.map(r=>r.team), teams); break; }
  }
  if (!matches.length) { console.log('  no matching team / name'); continue; }
  for (const match of matches) {
    const msg = `Adding TFRRS ID ${match.id} with matching name (${match.name}) and team (${match.team})`;
    console.log('  ' + msg);
    await wdEdit(p.q, 'P5120', match.id, msg);
    p.done = true;
  }
}
})();