User:Habst/matchWdTfrrs.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | Documentation for this user script can be added at User:Habst/matchWdTfrrs. |
// 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;
}
}
})();