User:Habst/matchWdTfrrs.js

// 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;

}

}

})();