refactor: consolidate data/ into single root directory, fix historical player names

Merge data/wikipedia/{year}/ into data/{year}/ so there is a single
canonical location for World Cup JSON files. Update scrape and seed
scripts to use data/ instead of data/wikipedia/.

Re-scraped all 22 years (1930-2022) with fixed player name extraction
(full name from <a title="..."> rather than abbreviated display text)
so historical goals now show e.g. "Thomas Müller" not "Müller".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 18:27:35 +02:00
parent 9ce2a4e27c
commit d37ebe201e
48 changed files with 2488 additions and 3630 deletions
+84 -84
View File
@@ -15,15 +15,15 @@
},
"goals1": [
{
"name": "Ademir",
"name": "Ademir Marques de Menezes",
"minute": 30
},
{
"name": "Ademir",
"name": "Ademir Marques de Menezes",
"minute": 79
},
{
"name": "Jair",
"name": "Jair da Rosa Pinto",
"minute": 65
},
{
@@ -48,15 +48,15 @@
},
"goals1": [
{
"name": "Mitić",
"name": "Rajko Mitić",
"minute": 59
},
{
"name": "Tomašević",
"name": "Kosta Tomašević",
"minute": 70
},
{
"name": "Ognjanov",
"name": "Tihomir Ognjanov",
"minute": 84
}
],
@@ -77,7 +77,7 @@
},
"goals1": [
{
"name": "Alfredo",
"name": "Alfredo dos Santos",
"minute": 3
},
{
@@ -87,11 +87,11 @@
],
"goals2": [
{
"name": "Fatton",
"name": "Jacques Fatton",
"minute": 17
},
{
"name": "Fatton",
"name": "Jacques Fatton",
"minute": 88
}
],
@@ -112,25 +112,25 @@
},
"goals1": [
{
"name": "Bobek",
"name": "Stjepan Bobek",
"minute": 20
},
{
"name": . Čajkovski",
"name": eljko Čajkovski",
"minute": 23
},
{
"name": . Čajkovski",
"name": eljko Čajkovski",
"minute": 51
},
{
"name": "Tomašević",
"name": "Kosta Tomašević",
"minute": 81
}
],
"goals2": [
{
"name": "Ortiz",
"name": "Héctor Ortiz",
"minute": 89,
"penalty": true
}
@@ -152,11 +152,11 @@
},
"goals1": [
{
"name": "Ademir",
"name": "Ademir Marques de Menezes",
"minute": 4
},
{
"name": "Zizinho",
"name": "Thomaz Soares da Silva",
"minute": 69
}
],
@@ -177,17 +177,17 @@
},
"goals1": [
{
"name": "Bader",
"name": "René Bader",
"minute": 10
},
{
"name": "Antenen",
"name": "Charles Antenen",
"minute": 44
}
],
"goals2": [
{
"name": "Casarín",
"name": "Horacio Casarín",
"minute": 89
}
],
@@ -208,11 +208,11 @@
},
"goals1": [
{
"name": "Mortensen",
"name": "Stan Mortensen",
"minute": 39
},
{
"name": "Mannion",
"name": "Wilf Mannion",
"minute": 51
}
],
@@ -233,21 +233,21 @@
},
"goals1": [
{
"name": "Igoa",
"name": "Silvestre Igoa",
"minute": 81
},
{
"name": "Basora",
"name": "Estanislau Basora",
"minute": 83
},
{
"name": "Zarra",
"name": "Telmo Zarra",
"minute": 89
}
],
"goals2": [
{
"name": "Pariani",
"name": "Gino Pariani",
"minute": 17
}
],
@@ -268,11 +268,11 @@
},
"goals1": [
{
"name": "Basora",
"name": "Estanislau Basora",
"minute": 17
},
{
"name": "Zarra",
"name": "Telmo Zarra",
"minute": 30
}
],
@@ -293,7 +293,7 @@
},
"goals1": [
{
"name": "Gaetjens",
"name": "Joe Gaetjens",
"minute": 38
}
],
@@ -314,7 +314,7 @@
},
"goals1": [
{
"name": "Zarra",
"name": "Telmo Zarra",
"minute": 48
}
],
@@ -335,33 +335,33 @@
},
"goals1": [
{
"name": "Robledo",
"name": "George Robledo",
"minute": 16
},
{
"name": "Cremaschi",
"name": "Atilio Cremaschi",
"minute": 32
},
{
"name": "Cremaschi",
"name": "Atilio Cremaschi",
"minute": 60
},
{
"name": "Prieto",
"name": "Andrés Prieto",
"minute": 54
},
{
"name": "Riera",
"name": "Fernando Riera",
"minute": 82
}
],
"goals2": [
{
"name": "Wallace",
"name": "Frank Wallace",
"minute": 47
},
{
"name": "Maca",
"name": "Joe Maca",
"minute": 48,
"penalty": true
}
@@ -383,25 +383,25 @@
},
"goals1": [
{
"name": "Jeppson",
"name": "Hasse Jeppson",
"minute": 25
},
{
"name": "Jeppson",
"name": "Hasse Jeppson",
"minute": 68
},
{
"name": "Andersson",
"name": "Sune Andersson",
"minute": 33
}
],
"goals2": [
{
"name": "Carapellese",
"name": "Riccardo Carapellese",
"minute": 7
},
{
"name": "Muccinelli",
"name": "Ermes Muccinelli",
"minute": 75
}
],
@@ -422,21 +422,21 @@
},
"goals1": [
{
"name": "Sundqvist",
"name": "Stig Sundqvist",
"minute": 17
},
{
"name": "Palmér",
"name": "Karl-Erik Palmér",
"minute": 26
}
],
"goals2": [
{
"name": "López",
"name": "Atilio López",
"minute": 35
},
{
"name": "López Fretes",
"name": "César López Fretes",
"minute": 74
}
],
@@ -457,11 +457,11 @@
},
"goals1": [
{
"name": "Carapellese",
"name": "Riccardo Carapellese",
"minute": 12
},
{
"name": "Pandolfini",
"name": "Egisto Pandolfini",
"minute": 62
}
],
@@ -482,35 +482,35 @@
},
"goals1": [
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 14
},
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 40
},
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 51
},
{
"name": "Vidal",
"name": "Ernesto Vidal",
"minute": 18
},
{
"name": "Schiaffino",
"name": "Juan Alberto Schiaffino",
"minute": 23
},
{
"name": "Schiaffino",
"name": "Juan Alberto Schiaffino",
"minute": 54
},
{
"name": "Pérez",
"name": "Julio Pérez",
"minute": 83
},
{
"name": "Ghiggia",
"name": "Alcides Ghiggia",
"minute": 87
}
],
@@ -530,21 +530,21 @@
},
"goals1": [
{
"name": "Ghiggia",
"name": "Alcides Ghiggia",
"minute": 29
},
{
"name": "Varela",
"name": "Obdulio Varela",
"minute": 73
}
],
"goals2": [
{
"name": "Basora",
"name": "Estanislau Basora",
"minute": 37
},
{
"name": "Basora",
"name": "Estanislau Basora",
"minute": 39
}
],
@@ -564,27 +564,27 @@
},
"goals1": [
{
"name": "Ademir",
"name": "Ademir Marques de Menezes",
"minute": 17
},
{
"name": "Ademir",
"name": "Ademir Marques de Menezes",
"minute": 36
},
{
"name": "Ademir",
"name": "Ademir Marques de Menezes",
"minute": 52
},
{
"name": "Ademir",
"name": "Ademir Marques de Menezes",
"minute": 58
},
{
"name": "Chico",
"name": "Francisco Aramburu",
"minute": 39
},
{
"name": "Chico",
"name": "Francisco Aramburu",
"minute": 88
},
{
@@ -594,7 +594,7 @@
],
"goals2": [
{
"name": "Andersson",
"name": "Sune Andersson",
"minute": 67,
"penalty": true
}
@@ -615,33 +615,33 @@
},
"goals1": [
{
"name": "Ademir",
"name": "Ademir de Menezes",
"minute": 15
},
{
"name": "Ademir",
"name": "Ademir de Menezes",
"minute": 57
},
{
"name": "Jair",
"name": "Jair da Rosa Pinto",
"minute": 21
},
{
"name": "Chico",
"name": "Francisco Aramburu",
"minute": 31
},
{
"name": "Chico",
"name": "Francisco Aramburu",
"minute": 55
},
{
"name": "Zizinho",
"name": "Thomaz Soares da Silva",
"minute": 67
}
],
"goals2": [
{
"name": "Igoa",
"name": "Silvestre Igoa",
"minute": 71
}
],
@@ -661,25 +661,25 @@
},
"goals1": [
{
"name": "Ghiggia",
"name": "Alcides Ghiggia",
"minute": 39
},
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 77
},
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 85
}
],
"goals2": [
{
"name": "Palmér",
"name": "Karl-Erik Palmér",
"minute": 5
},
{
"name": "Sundqvist",
"name": "Stig Sundqvist",
"minute": 40
}
],
@@ -699,21 +699,21 @@
},
"goals1": [
{
"name": "Sundqvist",
"name": "Stig Sundqvist",
"minute": 15
},
{
"name": "Mellberg",
"name": "Bror Mellberg",
"minute": 33
},
{
"name": "Palmér",
"name": "Karl-Erik Palmér",
"minute": 80
}
],
"goals2": [
{
"name": "Zarra",
"name": "Telmo Zarra",
"minute": 82
}
],
@@ -733,11 +733,11 @@
},
"goals1": [
{
"name": "Schiaffino",
"name": "Juan Alberto Schiaffino",
"minute": 66
},
{
"name": "Ghiggia",
"name": "Alcides Ghiggia",
"minute": 79
}
],