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
+113 -113
View File
@@ -18,17 +18,17 @@
},
"goals1": [
{
"name": "Milla",
"name": "Roger Milla",
"minute": 106
},
{
"name": "Milla",
"name": "Roger Milla",
"minute": 108
}
],
"goals2": [
{
"name": "Redín",
"name": "Bernardo Redín",
"minute": 115
}
],
@@ -48,25 +48,25 @@
},
"goals1": [
{
"name": "Skuhravý",
"name": "Tomáš Skuhravý",
"minute": 12
},
{
"name": "Skuhravý",
"name": "Tomáš Skuhravý",
"minute": 63
},
{
"name": "Skuhravý",
"name": "Tomáš Skuhravý",
"minute": 82
},
{
"name": "Kubík",
"name": "Luboš Kubík",
"minute": 76
}
],
"goals2": [
{
"name": "González",
"name": "Rónald González Brenes",
"minute": 55
}
],
@@ -86,7 +86,7 @@
},
"goals2": [
{
"name": "Caniggia",
"name": "Claudio Caniggia",
"minute": 81
}
],
@@ -96,7 +96,7 @@
"round": "Round of 16",
"date": "1990-06-24",
"time": "21:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Netherlands",
"score": {
"ft": [
@@ -106,17 +106,17 @@
},
"goals1": [
{
"name": "Klinsmann",
"name": "Jürgen Klinsmann",
"minute": 51
},
{
"name": "Brehme",
"name": "Andreas Brehme",
"minute": 85
}
],
"goals2": [
{
"name": "R. Koeman",
"name": "Ronald Koeman",
"minute": 89,
"penalty": true
}
@@ -159,11 +159,11 @@
},
"goals1": [
{
"name": "Schillaci",
"name": "Salvatore Schillaci",
"minute": 65
},
{
"name": "Serena",
"name": "Aldo Serena",
"minute": 83
}
],
@@ -187,17 +187,17 @@
},
"goals1": [
{
"name": "Salinas",
"name": "Julio Salinas",
"minute": 84
}
],
"goals2": [
{
"name": "Stojković",
"name": "Dragan Stojković",
"minute": 78
},
{
"name": "Stojković",
"name": "Dragan Stojković",
"minute": 93
}
],
@@ -221,7 +221,7 @@
},
"goals1": [
{
"name": "Platt",
"name": "David Platt",
"minute": 119
}
],
@@ -263,7 +263,7 @@
},
"goals2": [
{
"name": "Schillaci",
"name": "Salvatore Schillaci",
"minute": 38
}
],
@@ -274,7 +274,7 @@
"date": "1990-07-01",
"time": "17:00",
"team1": "Czechoslovakia",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
0,
@@ -283,7 +283,7 @@
},
"goals2": [
{
"name": "Matthäus",
"name": "Lothar Matthäus",
"minute": 25,
"penalty": true
}
@@ -308,27 +308,27 @@
},
"goals1": [
{
"name": "Kundé",
"name": "Emmanuel Kundé",
"minute": 61,
"penalty": true
},
{
"name": "Ekéké",
"name": "Eugène Ekéké",
"minute": 65
}
],
"goals2": [
{
"name": "Platt",
"name": "David Platt",
"minute": 25
},
{
"name": "Lineker",
"name": "Gary Lineker",
"minute": 83,
"penalty": true
},
{
"name": "Lineker",
"name": "Gary Lineker",
"minute": 105,
"penalty": true
}
@@ -357,13 +357,13 @@
},
"goals1": [
{
"name": "Caniggia",
"name": "Claudio Caniggia",
"minute": 67
}
],
"goals2": [
{
"name": "Schillaci",
"name": "Salvatore Schillaci",
"minute": 17
}
],
@@ -373,7 +373,7 @@
"round": "Semi-finals",
"date": "1990-07-04",
"time": "20:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "England",
"score": {
"ft": [
@@ -391,13 +391,13 @@
},
"goals1": [
{
"name": "Brehme",
"name": "Andreas Brehme",
"minute": 60
}
],
"goals2": [
{
"name": "Lineker",
"name": "Gary Lineker",
"minute": 80
}
],
@@ -417,18 +417,18 @@
},
"goals1": [
{
"name": "Baggio",
"name": "Roberto Baggio",
"minute": 71
},
{
"name": "Schillaci",
"name": "Salvatore Schillaci",
"minute": 86,
"penalty": true
}
],
"goals2": [
{
"name": "Platt",
"name": "David Platt",
"minute": 81
}
],
@@ -438,7 +438,7 @@
"round": "Final",
"date": "1990-07-08",
"time": "20:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Argentina",
"score": {
"ft": [
@@ -448,7 +448,7 @@
},
"goals1": [
{
"name": "Brehme",
"name": "Andreas Brehme",
"minute": 85,
"penalty": true
}
@@ -470,7 +470,7 @@
},
"goals1": [
{
"name": "Schillaci",
"name": "Salvatore Schillaci",
"minute": 78
}
],
@@ -491,30 +491,30 @@
},
"goals1": [
{
"name": "Caligiuri",
"name": "Paul Caligiuri",
"minute": 60
}
],
"goals2": [
{
"name": "Skuhravý",
"name": "Tomáš Skuhravý",
"minute": 26
},
{
"name": "Skuhravý",
"name": "Tomáš Skuhravý",
"minute": 78
},
{
"name": "Bílek",
"name": "Michal Bílek",
"minute": 40,
"penalty": true
},
{
"name": "Hašek",
"name": "Ivan Hašek",
"minute": 50
},
{
"name": "Luhový",
"name": "Milan Luhový",
"minute": 90,
"offset": 3
}
@@ -536,7 +536,7 @@
},
"goals1": [
{
"name": "Giannini",
"name": "Giuseppe Giannini",
"minute": 11
}
],
@@ -557,7 +557,7 @@
},
"goals2": [
{
"name": "Bílek",
"name": "Michal Bílek",
"minute": 31,
"penalty": true
}
@@ -579,11 +579,11 @@
},
"goals1": [
{
"name": "Schillaci",
"name": "Salvatore Schillaci",
"minute": 9
},
{
"name": "Baggio",
"name": "Roberto Baggio",
"minute": 78
}
],
@@ -604,17 +604,17 @@
},
"goals1": [
{
"name": "Ogris",
"name": "Andreas Ogris",
"minute": 49
},
{
"name": "Rodax",
"name": "Gerhard Rodax",
"minute": 63
}
],
"goals2": [
{
"name": "Murray",
"name": "Bruce Murray",
"minute": 83
}
],
@@ -635,7 +635,7 @@
},
"goals2": [
{
"name": "Omam-Biyik",
"name": "François Omam-Biyik",
"minute": 67
}
],
@@ -656,11 +656,11 @@
},
"goals2": [
{
"name": "Lăcătuș",
"name": "Marius Lăcătuș",
"minute": 41
},
{
"name": "Lăcătuș",
"name": "Marius Lăcătuș",
"minute": 55,
"penalty": true
}
@@ -682,11 +682,11 @@
},
"goals1": [
{
"name": "Troglio",
"name": "Pedro Troglio",
"minute": 27
},
{
"name": "Burruchaga",
"name": "Jorge Burruchaga",
"minute": 79
}
],
@@ -707,17 +707,17 @@
},
"goals1": [
{
"name": "Milla",
"name": "Roger Milla",
"minute": 76
},
{
"name": "Milla",
"name": "Roger Milla",
"minute": 86
}
],
"goals2": [
{
"name": "Balint",
"name": "Gavril Balint",
"minute": 88
}
],
@@ -738,13 +738,13 @@
},
"goals1": [
{
"name": "Monzón",
"name": "Pedro Monzón",
"minute": 62
}
],
"goals2": [
{
"name": "Balint",
"name": "Gavril Balint",
"minute": 68
}
],
@@ -765,19 +765,19 @@
},
"goals2": [
{
"name": "Protasov",
"name": "Oleh Protasov",
"minute": 20
},
{
"name": "Zygmantovich",
"name": "Andrei Zygmantovich",
"minute": 29
},
{
"name": "Zavarov",
"name": "Oleksandr Zavarov",
"minute": 52
},
{
"name": "Dobrovolski",
"name": "Igor Dobrovolski",
"minute": 63
}
],
@@ -808,7 +808,7 @@
],
"goals2": [
{
"name": "Brolin",
"name": "Tomas Brolin",
"minute": 79
}
],
@@ -829,7 +829,7 @@
},
"goals1": [
{
"name": "Cayasso",
"name": "Juan Cayasso",
"minute": 49
}
],
@@ -871,17 +871,17 @@
},
"goals1": [
{
"name": "Strömberg",
"name": "Glenn Strömberg",
"minute": 85
}
],
"goals2": [
{
"name": "McCall",
"name": "Stuart McCall",
"minute": 11
},
{
"name": "Johnston",
"name": "Mo Johnston",
"minute": 81,
"penalty": true
}
@@ -924,17 +924,17 @@
},
"goals1": [
{
"name": "Ekström",
"name": "Johnny Ekström",
"minute": 32
}
],
"goals2": [
{
"name": "Flores",
"name": "Róger Flores",
"minute": 75
},
{
"name": "Medford",
"name": "Hernán Medford",
"minute": 87
}
],
@@ -955,11 +955,11 @@
},
"goals2": [
{
"name": "Redín",
"name": "Bernardo Redín",
"minute": 50
},
{
"name": "Valderrama",
"name": "Carlos Valderrama",
"minute": 85
}
],
@@ -970,7 +970,7 @@
"group": "Group D",
"date": "1990-06-10",
"time": "21:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Yugoslavia",
"score": {
"ft": [
@@ -980,25 +980,25 @@
},
"goals1": [
{
"name": "Matthäus",
"name": "Lothar Matthäus",
"minute": 28
},
{
"name": "Matthäus",
"name": "Lothar Matthäus",
"minute": 64
},
{
"name": "Klinsmann",
"name": "Jürgen Klinsmann",
"minute": 39
},
{
"name": "Völler",
"name": "Rudi Völler",
"minute": 70
}
],
"goals2": [
{
"name": "Jozić",
"name": "Davor Jozić",
"minute": 55
}
],
@@ -1019,7 +1019,7 @@
},
"goals1": [
{
"name": "Jozić",
"name": "Davor Jozić",
"minute": 75
}
],
@@ -1030,7 +1030,7 @@
"group": "Group D",
"date": "1990-06-15",
"time": "21:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "United Arab Emirates",
"score": {
"ft": [
@@ -1040,29 +1040,29 @@
},
"goals1": [
{
"name": "Völler",
"name": "Rudi Völler",
"minute": 35
},
{
"name": "Völler",
"name": "Rudi Völler",
"minute": 75
},
{
"name": "Klinsmann",
"name": "Jürgen Klinsmann",
"minute": 37
},
{
"name": "Matthäus",
"name": "Lothar Matthäus",
"minute": 47
},
{
"name": "Bein",
"name": "Uwe Bein",
"minute": 58
}
],
"goals2": [
{
"name": "Ismaïl",
"name": "Khalid Ismaïl",
"minute": 46
}
],
@@ -1073,7 +1073,7 @@
"group": "Group D",
"date": "1990-06-19",
"time": "17:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Colombia",
"score": {
"ft": [
@@ -1083,13 +1083,13 @@
},
"goals1": [
{
"name": "Littbarski",
"name": "Pierre Littbarski",
"minute": 88
}
],
"goals2": [
{
"name": "Rincón",
"name": "Freddy Rincón",
"minute": 90,
"offset": 3
}
@@ -1111,26 +1111,26 @@
},
"goals1": [
{
"name": "Sušić",
"name": "Safet Sušić",
"minute": 5
},
{
"name": "Pančev",
"name": "Darko Pančev",
"minute": 9
},
{
"name": "Pančev",
"name": "Darko Pančev",
"minute": 46
},
{
"name": "Prosinečki",
"name": "Robert Prosinečki",
"minute": 90,
"offset": 3
}
],
"goals2": [
{
"name": "Thani",
"name": "Ali Thani Jumaa",
"minute": 22
}
],
@@ -1151,11 +1151,11 @@
},
"goals1": [
{
"name": "Degryse",
"name": "Marc Degryse",
"minute": 53
},
{
"name": "De Wolf",
"name": "Michel De Wolf",
"minute": 64
}
],
@@ -1191,21 +1191,21 @@
},
"goals1": [
{
"name": "Clijsters",
"name": "Lei Clijsters",
"minute": 15
},
{
"name": "Scifo",
"name": "Enzo Scifo",
"minute": 22
},
{
"name": "Ceulemans",
"name": "Jan Ceulemans",
"minute": 46
}
],
"goals2": [
{
"name": "Bengoechea",
"name": "Pablo Bengoechea",
"minute": 72
}
],
@@ -1261,7 +1261,7 @@
},
"goals1": [
{
"name": "Vervoort",
"name": "Patrick Vervoort",
"minute": 29
}
],
@@ -1272,7 +1272,7 @@
"penalty": true
},
{
"name": "Górriz",
"name": "Alberto Górriz",
"minute": 38
}
],
@@ -1293,7 +1293,7 @@
},
"goals2": [
{
"name": "Fonseca",
"name": "Daniel Fonseca",
"minute": 90,
"offset": 1
}
@@ -1315,13 +1315,13 @@
},
"goals1": [
{
"name": "Lineker",
"name": "Gary Lineker",
"minute": 9
}
],
"goals2": [
{
"name": "Sheedy",
"name": "Kevin Sheedy",
"minute": 73
}
],
@@ -1342,13 +1342,13 @@
},
"goals1": [
{
"name": "Kieft",
"name": "Wim Kieft",
"minute": 58
}
],
"goals2": [
{
"name": "Abdelghani",
"name": "Magdi Abdelghani",
"minute": 83,
"penalty": true
}
@@ -1400,7 +1400,7 @@
},
"goals1": [
{
"name": "Wright",
"name": "Mark Wright",
"minute": 58
}
],
@@ -1421,13 +1421,13 @@
},
"goals1": [
{
"name": "Quinn",
"name": "Niall Quinn",
"minute": 71
}
],
"goals2": [
{
"name": "Gullit",
"name": "Ruud Gullit",
"minute": 11
}
],