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
+2 -2
View File
@@ -3,7 +3,7 @@
{
"name": "Group 1",
"teams": [
"West Germany",
"Germany",
"Chile",
"East Germany",
"Australia"
@@ -49,7 +49,7 @@
"name": "Group B",
"teams": [
"Yugoslavia",
"West Germany",
"Germany",
"Sweden",
"Poland"
]
+99 -99
View File
@@ -14,7 +14,7 @@
},
"goals2": [
{
"name": "Lato",
"name": "Grzegorz Lato",
"minute": 76
}
],
@@ -25,7 +25,7 @@
"date": "1974-07-07",
"time": "16:00",
"team1": "Netherlands",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
1,
@@ -34,19 +34,19 @@
},
"goals1": [
{
"name": "Neeskens",
"name": "Johan Neeskens",
"minute": 2,
"penalty": true
}
],
"goals2": [
{
"name": "Breitner",
"name": "Paul Breitner",
"minute": 25,
"penalty": true
},
{
"name": "Müller",
"name": "Gerd Müller",
"minute": 43
}
],
@@ -57,7 +57,7 @@
"group": "Group 1",
"date": "1974-06-14",
"time": "16:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Chile",
"score": {
"ft": [
@@ -67,7 +67,7 @@
},
"goals1": [
{
"name": "Breitner",
"name": "Paul Breitner",
"minute": 18
}
],
@@ -88,12 +88,12 @@
},
"goals1": [
{
"name": "Curran",
"name": "Colin Curran",
"minute": 58,
"owngoal": true
},
{
"name": "Streich",
"name": "Joachim Streich",
"minute": 72
}
],
@@ -105,7 +105,7 @@
"date": "1974-06-18",
"time": "16:00",
"team1": "Australia",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
0,
@@ -114,15 +114,15 @@
},
"goals2": [
{
"name": "Overath",
"name": "Wolfgang Overath",
"minute": 12
},
{
"name": "Cullmann",
"name": "Bernhard Cullmann",
"minute": 34
},
{
"name": "Müller",
"name": "Gerd Müller",
"minute": 53
}
],
@@ -143,13 +143,13 @@
},
"goals1": [
{
"name": "Ahumada",
"name": "Sergio Ahumada",
"minute": 69
}
],
"goals2": [
{
"name": "Hoffmann",
"name": "Martin Hoffmann",
"minute": 55
}
],
@@ -176,7 +176,7 @@
"date": "1974-06-22",
"time": "19:30",
"team1": "East Germany",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
1,
@@ -185,7 +185,7 @@
},
"goals1": [
{
"name": "Sparwasser",
"name": "Jürgen Sparwasser",
"minute": 77
}
],
@@ -221,11 +221,11 @@
},
"goals2": [
{
"name": "Lorimer",
"name": "Peter Lorimer",
"minute": 26
},
{
"name": "Jordan",
"name": "Joe Jordan",
"minute": 34
}
],
@@ -246,39 +246,39 @@
},
"goals1": [
{
"name": "Bajević",
"name": "Dušan Bajević",
"minute": 8
},
{
"name": "Bajević",
"name": "Dušan Bajević",
"minute": 30
},
{
"name": "Bajević",
"name": "Dušan Bajević",
"minute": 81
},
{
"name": "Džajić",
"name": "Dragan Džajić",
"minute": 14
},
{
"name": "Šurjak",
"name": "Ivica Šurjak",
"minute": 18
},
{
"name": "Katalinski",
"name": "Josip Katalinski",
"minute": 22
},
{
"name": "Bogićević",
"name": "Vladislav Bogićević",
"minute": 35
},
{
"name": "Oblak",
"name": "Branko Oblak",
"minute": 61
},
{
"name": "Petković",
"name": "Ilija Petković",
"minute": 65
}
],
@@ -314,13 +314,13 @@
},
"goals1": [
{
"name": "Jordan",
"name": "Joe Jordan",
"minute": 88
}
],
"goals2": [
{
"name": "Karasi",
"name": "Stanislav Karasi",
"minute": 81
}
],
@@ -349,7 +349,7 @@
"minute": 66
},
{
"name": "Valdomiro",
"name": "Valdomiro Vaz Franco",
"minute": 79
}
],
@@ -370,11 +370,11 @@
},
"goals2": [
{
"name": "Rep",
"name": "Johnny Rep",
"minute": 7
},
{
"name": "Rep",
"name": "Johnny Rep",
"minute": 86
}
],
@@ -410,13 +410,13 @@
},
"goals1": [
{
"name": "Bonev",
"name": "Hristo Bonev",
"minute": 75
}
],
"goals2": [
{
"name": "Pavoni",
"name": "Ricardo Pavoni",
"minute": 87
}
],
@@ -452,28 +452,28 @@
},
"goals1": [
{
"name": "Krol",
"name": "Ruud Krol",
"minute": 78,
"owngoal": true
}
],
"goals2": [
{
"name": "Neeskens",
"name": "Johan Neeskens",
"minute": 5,
"penalty": true
},
{
"name": "Neeskens",
"name": "Johan Neeskens",
"minute": 45,
"penalty": true
},
{
"name": "Rep",
"name": "Johnny Rep",
"minute": 71
},
{
"name": "De Jong",
"name": "Theo de Jong",
"minute": 88
}
],
@@ -494,15 +494,15 @@
},
"goals1": [
{
"name": "Edström",
"name": "Ralf Edström",
"minute": 46
},
{
"name": "Edström",
"name": "Ralf Edström",
"minute": 77
},
{
"name": "Sandberg",
"name": "Roland Sandberg",
"minute": 74
}
],
@@ -523,21 +523,21 @@
},
"goals1": [
{
"name": "Rivera",
"name": "Gianni Rivera",
"minute": 52
},
{
"name": "Benetti",
"name": "Romeo Benetti",
"minute": 66
},
{
"name": "Anastasi",
"name": "Pietro Anastasi",
"minute": 79
}
],
"goals2": [
{
"name": "Sanon",
"name": "Emmanuel Sanon",
"minute": 46
}
],
@@ -558,25 +558,25 @@
},
"goals1": [
{
"name": "Lato",
"name": "Grzegorz Lato",
"minute": 7
},
{
"name": "Lato",
"name": "Grzegorz Lato",
"minute": 62
},
{
"name": "Szarmach",
"name": "Andrzej Szarmach",
"minute": 8
}
],
"goals2": [
{
"name": "Heredia",
"name": "Ramón Heredia",
"minute": 60
},
{
"name": "Babington",
"name": "Carlos Babington",
"minute": 66
}
],
@@ -597,13 +597,13 @@
},
"goals1": [
{
"name": "Houseman",
"name": "René Houseman",
"minute": 20
}
],
"goals2": [
{
"name": "Perfumo",
"name": "Roberto Perfumo",
"minute": 35,
"owngoal": true
}
@@ -625,31 +625,31 @@
},
"goals2": [
{
"name": "Lato",
"name": "Grzegorz Lato",
"minute": 17
},
{
"name": "Lato",
"name": "Grzegorz Lato",
"minute": 87
},
{
"name": "Deyna",
"name": "Kazimierz Deyna",
"minute": 18
},
{
"name": "Szarmach",
"name": "Andrzej Szarmach",
"minute": 30
},
{
"name": "Szarmach",
"name": "Andrzej Szarmach",
"minute": 34
},
{
"name": "Szarmach",
"name": "Andrzej Szarmach",
"minute": 50
},
{
"name": "Gorgoń",
"name": "Jerzy Gorgoń",
"minute": 31
}
],
@@ -670,25 +670,25 @@
},
"goals1": [
{
"name": "Yazalde",
"name": "Héctor Yazalde",
"minute": 15
},
{
"name": "Yazalde",
"name": "Héctor Yazalde",
"minute": 68
},
{
"name": "Houseman",
"name": "René Houseman",
"minute": 18
},
{
"name": "Ayala",
"name": "Rubén Ayala",
"minute": 55
}
],
"goals2": [
{
"name": "Sanon",
"name": "Emmanuel Sanon",
"minute": 63
}
],
@@ -709,17 +709,17 @@
},
"goals1": [
{
"name": "Szarmach",
"name": "Andrzej Szarmach",
"minute": 38
},
{
"name": "Deyna",
"name": "Kazimierz Deyna",
"minute": 44
}
],
"goals2": [
{
"name": "Capello",
"name": "Fabio Capello",
"minute": 85
}
],
@@ -740,19 +740,19 @@
},
"goals1": [
{
"name": "Cruyff",
"name": "Johan Cruyff",
"minute": 11
},
{
"name": "Cruyff",
"name": "Johan Cruyff",
"minute": 90
},
{
"name": "Krol",
"name": "Ruud Krol",
"minute": 25
},
{
"name": "Rep",
"name": "Johnny Rep",
"minute": 73
}
],
@@ -794,7 +794,7 @@
},
"goals1": [
{
"name": "Brindisi",
"name": "Miguel Ángel Brindisi",
"minute": 35
}
],
@@ -825,11 +825,11 @@
},
"goals2": [
{
"name": "Neeskens",
"name": "Johan Neeskens",
"minute": 7
},
{
"name": "Rensenbrink",
"name": "Rob Rensenbrink",
"minute": 59
}
],
@@ -850,13 +850,13 @@
},
"goals1": [
{
"name": "Houseman",
"name": "René Houseman",
"minute": 20
}
],
"goals2": [
{
"name": "Streich",
"name": "Joachim Streich",
"minute": 14
}
],
@@ -877,11 +877,11 @@
},
"goals1": [
{
"name": "Neeskens",
"name": "Johan Neeskens",
"minute": 50
},
{
"name": "Cruyff",
"name": "Johan Cruyff",
"minute": 65
}
],
@@ -893,7 +893,7 @@
"date": "1974-06-26",
"time": "16:00",
"team1": "Yugoslavia",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
0,
@@ -902,11 +902,11 @@
},
"goals2": [
{
"name": "Breitner",
"name": "Paul Breitner",
"minute": 39
},
{
"name": "Müller",
"name": "Gerd Müller",
"minute": 82
}
],
@@ -927,7 +927,7 @@
},
"goals2": [
{
"name": "Lato",
"name": "Grzegorz Lato",
"minute": 43
}
],
@@ -948,18 +948,18 @@
},
"goals1": [
{
"name": "Deyna",
"name": "Kazimierz Deyna",
"minute": 24,
"penalty": true
},
{
"name": "Lato",
"name": "Grzegorz Lato",
"minute": 62
}
],
"goals2": [
{
"name": "Karasi",
"name": "Stanislav Karasi",
"minute": 43
}
],
@@ -970,7 +970,7 @@
"group": "Group B",
"date": "1974-06-30",
"time": "19:30",
"team1": "West Germany",
"team1": "Germany",
"team2": "Sweden",
"score": {
"ft": [
@@ -980,30 +980,30 @@
},
"goals1": [
{
"name": "Overath",
"name": "Wolfgang Overath",
"minute": 51
},
{
"name": "Bonhof",
"name": "Rainer Bonhof",
"minute": 52
},
{
"name": "Grabowski",
"name": "Jürgen Grabowski",
"minute": 76
},
{
"name": "Hoeneß",
"name": "Uli Hoeneß",
"minute": 89,
"penalty": true
}
],
"goals2": [
{
"name": "Edström",
"name": "Ralf Edström",
"minute": 24
},
{
"name": "Sandberg",
"name": "Roland Sandberg",
"minute": 53
}
],
@@ -1015,7 +1015,7 @@
"date": "1974-07-03",
"time": "16:35",
"team1": "Poland",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
0,
@@ -1024,7 +1024,7 @@
},
"goals2": [
{
"name": "Müller",
"name": "Gerd Müller",
"minute": 76
}
],
@@ -1045,17 +1045,17 @@
},
"goals1": [
{
"name": "Edström",
"name": "Ralf Edström",
"minute": 29
},
{
"name": "Torstensson",
"name": "Conny Torstensson",
"minute": 85
}
],
"goals2": [
{
"name": "Šurjak",
"name": "Ivica Šurjak",
"minute": 27
}
],
+1 -1
View File
@@ -1,7 +1,7 @@
{
"host": "West Germany",
"teams_count": 16,
"winner": "West Germany",
"winner": "Germany",
"runner_up": "Netherlands",
"third_place": "Poland",
"fourth_place": "Brazil"