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
+1 -1
View File
@@ -12,7 +12,7 @@
{
"name": "Group 2",
"teams": [
"West Germany",
"Germany",
"Turkey",
"Hungary",
"South Korea"
+139 -139
View File
@@ -52,7 +52,7 @@
},
"goals1": [
{
"name": "Milutinović",
"name": "Miloš Milutinović",
"minute": 15
}
],
@@ -83,7 +83,7 @@
],
"goals2": [
{
"name": "Zebec",
"name": "Branko Zebec",
"minute": 48
}
],
@@ -104,27 +104,27 @@
},
"goals1": [
{
"name": "Vincent",
"name": "Jean Vincent",
"minute": 19
},
{
"name": "Cárdenas",
"name": "Raúl Cárdenas",
"minute": 46,
"owngoal": true
},
{
"name": "Kopa",
"name": "Raymond Kopa",
"minute": 88,
"penalty": true
}
],
"goals2": [
{
"name": "Lamadrid",
"name": "José Luis Lamadrid",
"minute": 54
},
{
"name": "Balcázar",
"name": "Tomás Balcázar",
"minute": 85
}
],
@@ -135,7 +135,7 @@
"group": "Group 2",
"date": "1954-06-17",
"time": "18:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Turkey",
"score": {
"ft": [
@@ -145,25 +145,25 @@
},
"goals1": [
{
"name": "Schäfer",
"name": "Hans Schäfer",
"minute": 14
},
{
"name": "Klodt",
"name": "Bernhard Klodt",
"minute": 52
},
{
"name": "O. Walter",
"name": "Ottmar Walter",
"minute": 60
},
{
"name": "Morlock",
"name": "Max Morlock",
"minute": 84
}
],
"goals2": [
{
"name": "Mamat",
"name": "Suat Mamat",
"minute": 2
}
],
@@ -184,39 +184,39 @@
},
"goals1": [
{
"name": "Puskás",
"name": "Ferenc Puskás",
"minute": 12
},
{
"name": "Puskás",
"name": "Ferenc Puskás",
"minute": 89
},
{
"name": "Lantos",
"name": "Mihály Lantos",
"minute": 18
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 24
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 36
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 50
},
{
"name": "Czibor",
"name": "Zoltán Czibor",
"minute": 59
},
{
"name": "Palotás",
"name": "Péter Palotás",
"minute": 75
},
{
"name": "Palotás",
"name": "Péter Palotás",
"minute": 83
}
],
@@ -228,7 +228,7 @@
"date": "1954-06-20",
"time": "16:50",
"team1": "Hungary",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
8,
@@ -237,49 +237,49 @@
},
"goals1": [
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 3
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 21
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 69
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 78
},
{
"name": "Puskás",
"name": "Ferenc Puskás",
"minute": 17
},
{
"name": "Hidegkuti",
"name": "Nándor Hidegkuti",
"minute": 52
},
{
"name": "Hidegkuti",
"name": "Nándor Hidegkuti",
"minute": 54
},
{
"name": "J. Tóth",
"name": "József Tóth",
"minute": 75
}
],
"goals2": [
{
"name": "Pfaff",
"name": "Alfred Pfaff",
"minute": 25
},
{
"name": "Rahn",
"name": "Helmut Rahn",
"minute": 77
},
{
"name": "Herrmann",
"name": "Richard Herrmann",
"minute": 84
}
],
@@ -300,31 +300,31 @@
},
"goals1": [
{
"name": "Mamat",
"name": "Suat Mamat",
"minute": 10
},
{
"name": "Mamat",
"name": "Suat Mamat",
"minute": 30
},
{
"name": "Küçükandonyadis",
"name": "Lefter Küçükandonyadis",
"minute": 24
},
{
"name": "Sargun",
"name": "Burhan Sargun",
"minute": 37
},
{
"name": "Sargun",
"name": "Burhan Sargun",
"minute": 64
},
{
"name": "Sargun",
"name": "Burhan Sargun",
"minute": 70
},
{
"name": "Keskin",
"name": "Erol Keskin",
"minute": 76
}
],
@@ -335,7 +335,7 @@
"group": "Group 2",
"date": "1954-06-23",
"time": "18:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Turkey",
"score": {
"ft": [
@@ -345,41 +345,41 @@
},
"goals1": [
{
"name": "O. Walter",
"name": "Ottmar Walter",
"minute": 7
},
{
"name": "Schäfer",
"name": "Hans Schäfer",
"minute": 12
},
{
"name": "Schäfer",
"name": "Hans Schäfer",
"minute": 79
},
{
"name": "Morlock",
"name": "Max Morlock",
"minute": 30
},
{
"name": "Morlock",
"name": "Max Morlock",
"minute": 60
},
{
"name": "Morlock",
"name": "Max Morlock",
"minute": 77
},
{
"name": "F. Walter",
"name": "Fritz Walter",
"minute": 62
}
],
"goals2": [
{
"name": "Ertan",
"name": "Mustafa Ertan",
"minute": 21
},
{
"name": "Lefter",
"name": "Lefter Küçükandonyadis",
"minute": 82
}
],
@@ -400,11 +400,11 @@
},
"goals1": [
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 71
},
{
"name": "Schiaffino",
"name": "Juan Alberto Schiaffino",
"minute": 84
}
],
@@ -425,7 +425,7 @@
},
"goals1": [
{
"name": "Probst",
"name": "Erich Probst",
"minute": 33
}
],
@@ -446,31 +446,31 @@
},
"goals1": [
{
"name": "Borges",
"name": "Carlos Borges",
"minute": 17
},
{
"name": "Borges",
"name": "Carlos Borges",
"minute": 47
},
{
"name": "Borges",
"name": "Carlos Borges",
"minute": 57
},
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 30
},
{
"name": "Míguez",
"name": "Óscar Míguez",
"minute": 83
},
{
"name": "Abbadie",
"name": "Julio Abbadie",
"minute": 54
},
{
"name": "Abbadie",
"name": "Julio Abbadie",
"minute": 85
}
],
@@ -491,23 +491,23 @@
},
"goals1": [
{
"name": "Stojaspal",
"name": "Ernst Stojaspal",
"minute": 3
},
{
"name": "Stojaspal",
"name": "Ernst Stojaspal",
"minute": 65
},
{
"name": "Probst",
"name": "Erich Probst",
"minute": 4
},
{
"name": "Probst",
"name": "Erich Probst",
"minute": 21
},
{
"name": "Probst",
"name": "Erich Probst",
"minute": 24
}
],
@@ -528,17 +528,17 @@
},
"goals1": [
{
"name": "Ballaman",
"name": "Robert Ballaman",
"minute": 18
},
{
"name": "Hügi",
"name": "Josef Hügi",
"minute": 78
}
],
"goals2": [
{
"name": "Boniperti",
"name": "Giampiero Boniperti",
"minute": 44
}
],
@@ -563,37 +563,37 @@
},
"goals1": [
{
"name": "Broadis",
"name": "Ivor Broadis",
"minute": 26
},
{
"name": "Broadis",
"name": "Ivor Broadis",
"minute": 63
},
{
"name": "Lofthouse",
"name": "Nat Lofthouse",
"minute": 36
},
{
"name": "Lofthouse",
"name": "Nat Lofthouse",
"minute": 91
}
],
"goals2": [
{
"name": "Anoul",
"name": "Léopold Anoul",
"minute": 5
},
{
"name": "Anoul",
"name": "Léopold Anoul",
"minute": 71
},
{
"name": "Coppens",
"name": "Henri Coppens",
"minute": 67
},
{
"name": "Dickinson",
"name": "Jimmy Dickinson",
"minute": 94,
"owngoal": true
}
@@ -615,26 +615,26 @@
},
"goals1": [
{
"name": "Pandolfini",
"name": "Egisto Pandolfini",
"minute": 41,
"penalty": true
},
{
"name": "Galli",
"name": "Carlo Galli",
"minute": 48
},
{
"name": "Frignani",
"name": "Amleto Frignani",
"minute": 58
},
{
"name": "Lorenzi",
"name": "Benito Lorenzi",
"minute": 78
}
],
"goals2": [
{
"name": "Anoul",
"name": "Léopold Anoul",
"minute": 81
}
],
@@ -655,11 +655,11 @@
},
"goals1": [
{
"name": "Mullen",
"name": "Jimmy Mullen",
"minute": 43
},
{
"name": "Wilshaw",
"name": "Dennis Wilshaw",
"minute": 69
}
],
@@ -680,25 +680,25 @@
},
"goals1": [
{
"name": "Hügi",
"name": "Josef Hügi",
"minute": 14
},
{
"name": "Hügi",
"name": "Josef Hügi",
"minute": 85
},
{
"name": "Ballaman",
"name": "Robert Ballaman",
"minute": 48
},
{
"name": "Fatton",
"name": "Jacques Fatton",
"minute": 90
}
],
"goals2": [
{
"name": "Nesti",
"name": "Fulvio Nesti",
"minute": 67
}
],
@@ -718,53 +718,53 @@
},
"goals1": [
{
"name": "Wagner",
"name": "Theodor Wagner",
"minute": 25
},
{
"name": "Wagner",
"name": "Theodor Wagner",
"minute": 27
},
{
"name": "Wagner",
"name": "Theodor Wagner",
"minute": 53
},
{
"name": "A. Körner",
"name": "Alfred Körner",
"minute": 26
},
{
"name": "A. Körner",
"name": "Alfred Körner",
"minute": 34
},
{
"name": "Ocwirk",
"name": "Ernst Ocwirk",
"minute": 32
},
{
"name": "Probst",
"name": "Erich Probst",
"minute": 76
}
],
"goals2": [
{
"name": "Ballaman",
"name": "Robert Ballaman",
"minute": 16
},
{
"name": "Ballaman",
"name": "Robert Ballaman",
"minute": 39
},
{
"name": "Hügi",
"name": "Josef Hügi",
"minute": 17
},
{
"name": "Hügi",
"name": "Josef Hügi",
"minute": 19
},
{
"name": "Hügi",
"name": "Josef Hügi",
"minute": 60
}
],
@@ -784,29 +784,29 @@
},
"goals1": [
{
"name": "Borges",
"name": "Carlos Borges",
"minute": 5
},
{
"name": "Varela",
"name": "Obdulio Varela",
"minute": 39
},
{
"name": "Schiaffino",
"name": "Juan Alberto Schiaffino",
"minute": 46
},
{
"name": "Ambrois",
"name": "Javier Ambrois",
"minute": 78
}
],
"goals2": [
{
"name": "Lofthouse",
"name": "Nat Lofthouse",
"minute": 16
},
{
"name": "Finney",
"name": "Tom Finney",
"minute": 67
}
],
@@ -816,7 +816,7 @@
"round": "Quarter-finals",
"date": "1954-06-27",
"time": "17:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Yugoslavia",
"score": {
"ft": [
@@ -826,12 +826,12 @@
},
"goals1": [
{
"name": "Horvat",
"name": "Ivica Horvat",
"minute": 9,
"owngoal": true
},
{
"name": "Rahn",
"name": "Helmut Rahn",
"minute": 85
}
],
@@ -851,19 +851,19 @@
},
"goals1": [
{
"name": "Hidegkuti",
"name": "Nándor Hidegkuti",
"minute": 4
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 7
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 88
},
{
"name": "Lantos",
"name": "Mihály Lantos",
"minute": 60,
"penalty": true
}
@@ -875,7 +875,7 @@
"penalty": true
},
{
"name": "Julinho",
"name": "Júlio Botelho",
"minute": 65
}
],
@@ -885,7 +885,7 @@
"round": "Semi-finals",
"date": "1954-06-30",
"time": "18:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Austria",
"score": {
"ft": [
@@ -895,35 +895,35 @@
},
"goals1": [
{
"name": "Schäfer",
"name": "Hans Schäfer",
"minute": 31
},
{
"name": "Morlock",
"name": "Max Morlock",
"minute": 47
},
{
"name": "F. Walter",
"name": "Fritz Walter",
"minute": 54,
"penalty": true
},
{
"name": "F. Walter",
"name": "Fritz Walter",
"minute": 64,
"penalty": true
},
{
"name": "O. Walter",
"name": "Ottmar Walter",
"minute": 61
},
{
"name": "O. Walter",
"name": "Ottmar Walter",
"minute": 89
}
],
"goals2": [
{
"name": "Probst",
"name": "Erich Probst",
"minute": 51
}
],
@@ -947,29 +947,29 @@
},
"goals1": [
{
"name": "Czibor",
"name": "Zoltán Czibor",
"minute": 13
},
{
"name": "Hidegkuti",
"name": "Nándor Hidegkuti",
"minute": 46
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 111
},
{
"name": "Kocsis",
"name": "Sándor Kocsis",
"minute": 116
}
],
"goals2": [
{
"name": "Hohberg",
"name": "Juan Hohberg",
"minute": 75
},
{
"name": "Hohberg",
"name": "Juan Hohberg",
"minute": 86
}
],
@@ -989,23 +989,23 @@
},
"goals1": [
{
"name": "Stojaspal",
"name": "Ernst Stojaspal",
"minute": 16,
"penalty": true
},
{
"name": "Cruz",
"name": "Luis Cruz",
"minute": 59,
"owngoal": true
},
{
"name": "Ocwirk",
"name": "Ernst Ocwirk",
"minute": 89
}
],
"goals2": [
{
"name": "Hohberg",
"name": "Juan Hohberg",
"minute": 22
}
],
@@ -1015,7 +1015,7 @@
"round": "Final",
"date": "1954-07-04",
"time": "17:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Hungary",
"score": {
"ft": [
@@ -1025,25 +1025,25 @@
},
"goals1": [
{
"name": "Morlock",
"name": "Max Morlock",
"minute": 10
},
{
"name": "Rahn",
"name": "Helmut Rahn",
"minute": 18
},
{
"name": "Rahn",
"name": "Helmut Rahn",
"minute": 84
}
],
"goals2": [
{
"name": "Puskás",
"name": "Ferenc Puskás",
"minute": 6
},
{
"name": "Czibor",
"name": "Zoltán Czibor",
"minute": 8
}
],
+1 -1
View File
@@ -1,7 +1,7 @@
{
"host": "Switzerland",
"teams_count": 16,
"winner": "West Germany",
"winner": "Germany",
"runner_up": "Hungary",
"third_place": "Austria",
"fourth_place": "Uruguay"