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
+83 -83
View File
@@ -14,17 +14,17 @@
},
"goals1": [
{
"name": "L. Sánchez",
"name": "Leonel Sánchez",
"minute": 11
},
{
"name": "Rojas",
"name": "Eladio Rojas",
"minute": 29
}
],
"goals2": [
{
"name": "Chislenko",
"name": "Igor Chislenko",
"minute": 26
}
],
@@ -44,7 +44,7 @@
},
"goals1": [
{
"name": "Scherer",
"name": "Adolf Scherer",
"minute": 13
}
],
@@ -78,7 +78,7 @@
],
"goals2": [
{
"name": "Hitchens",
"name": "Gerry Hitchens",
"minute": 38
}
],
@@ -89,7 +89,7 @@
"date": "1962-06-10",
"time": "14:30",
"team1": "Yugoslavia",
"team2": "West Germany",
"team2": "Germany",
"score": {
"ft": [
1,
@@ -98,7 +98,7 @@
},
"goals1": [
{
"name": "Radaković",
"name": "Petar Radaković",
"minute": 85
}
],
@@ -118,22 +118,22 @@
},
"goals1": [
{
"name": "Kadraba",
"name": "Josef Kadraba",
"minute": 48
},
{
"name": "Scherer",
"name": "Adolf Scherer",
"minute": 80
},
{
"name": "Scherer",
"name": "Adolf Scherer",
"minute": 84,
"penalty": true
}
],
"goals2": [
{
"name": "Jerković",
"name": "Dražan Jerković",
"minute": 69
}
],
@@ -171,11 +171,11 @@
],
"goals2": [
{
"name": "Toro",
"name": "Jorge Toro",
"minute": 42
},
{
"name": "L. Sánchez",
"name": "Leonel Sánchez",
"minute": 61,
"penalty": true
}
@@ -196,7 +196,7 @@
},
"goals1": [
{
"name": "Rojas",
"name": "Eladio Rojas",
"minute": 90
}
],
@@ -216,7 +216,7 @@
},
"goals1": [
{
"name": "Amarildo",
"name": "Amarildo Tavares da Silveira",
"minute": 17
},
{
@@ -230,7 +230,7 @@
],
"goals2": [
{
"name": "Masopust",
"name": "Josef Masopust",
"minute": 15
}
],
@@ -251,17 +251,17 @@
},
"goals1": [
{
"name": "Cubilla",
"name": "Luis Cubilla",
"minute": 56
},
{
"name": "Sasía",
"name": "José Sasía",
"minute": 75
}
],
"goals2": [
{
"name": "Zuluaga",
"name": "Francisco Zuluaga",
"minute": 19,
"penalty": true
}
@@ -283,11 +283,11 @@
},
"goals1": [
{
"name": "Ivanov",
"name": "Valentin Kozmich Ivanov",
"minute": 51
},
{
"name": "Ponedelnik",
"name": "Viktor Ponedelnik",
"minute": 83
}
],
@@ -308,22 +308,22 @@
},
"goals1": [
{
"name": "Skoblar",
"name": "Josip Skoblar",
"minute": 25,
"penalty": true
},
{
"name": "Galić",
"name": "Milan Galić",
"minute": 29
},
{
"name": "Jerković",
"name": "Dražan Jerković",
"minute": 49
}
],
"goals2": [
{
"name": "Cabrera",
"name": "Ángel Cabrera",
"minute": 19
}
],
@@ -344,37 +344,37 @@
},
"goals1": [
{
"name": "Ivanov",
"name": "Valentin Kozmich Ivanov",
"minute": 8
},
{
"name": "Ivanov",
"name": "Valentin Kozmich Ivanov",
"minute": 11
},
{
"name": "Chislenko",
"name": "Igor Chislenko",
"minute": 10
},
{
"name": "Ponedelnik",
"name": "Viktor Ponedelnik",
"minute": 56
}
],
"goals2": [
{
"name": "Aceros",
"name": "Germán Aceros",
"minute": 21
},
{
"name": "Coll",
"name": "Marcos Coll",
"minute": 68
},
{
"name": "Rada",
"name": "Antonio Rada",
"minute": 72
},
{
"name": "Klinger",
"name": "Marino Klinger",
"minute": 86
}
],
@@ -395,17 +395,17 @@
},
"goals1": [
{
"name": "Mamykin",
"name": "Aleksei Mamykin",
"minute": 38
},
{
"name": "Ivanov",
"name": "Valentin Kozmich Ivanov",
"minute": 89
}
],
"goals2": [
{
"name": "Sasía",
"name": "José Sasía",
"minute": 54
}
],
@@ -426,23 +426,23 @@
},
"goals1": [
{
"name": "Galić",
"name": "Milan Galić",
"minute": 20
},
{
"name": "Galić",
"name": "Milan Galić",
"minute": 61
},
{
"name": "Jerković",
"name": "Dražan Jerković",
"minute": 25
},
{
"name": "Jerković",
"name": "Dražan Jerković",
"minute": 87
},
{
"name": "Melić",
"name": "Vojislav Melić",
"minute": 82
}
],
@@ -463,21 +463,21 @@
},
"goals1": [
{
"name": "L. Sánchez",
"name": "Leonel Sanchez",
"minute": 44
},
{
"name": "L. Sánchez",
"name": "Leonel Sanchez",
"minute": 55
},
{
"name": "Ramírez",
"name": "Jaime Ramírez",
"minute": 51
}
],
"goals2": [
{
"name": "Wüthrich",
"name": "Rolf Wüthrich",
"minute": 6
}
],
@@ -488,7 +488,7 @@
"group": "Group 2",
"date": "1962-05-31",
"time": "15:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Italy",
"score": {
"ft": [
@@ -513,11 +513,11 @@
},
"goals1": [
{
"name": "Ramírez",
"name": "Jaime Ramírez",
"minute": 73
},
{
"name": "Toro",
"name": "Jorge Toro",
"minute": 87
}
],
@@ -528,7 +528,7 @@
"group": "Group 2",
"date": "1962-06-03",
"time": "15:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Switzerland",
"score": {
"ft": [
@@ -538,17 +538,17 @@
},
"goals1": [
{
"name": "Brülls",
"name": "Albert Brülls",
"minute": 45
},
{
"name": "Seeler",
"name": "Uwe Seeler",
"minute": 59
}
],
"goals2": [
{
"name": "Schneiter",
"name": "Heinz Schneiter",
"minute": 73
}
],
@@ -559,7 +559,7 @@
"group": "Group 2",
"date": "1962-06-06",
"time": "15:00",
"team1": "West Germany",
"team1": "Germany",
"team2": "Chile",
"score": {
"ft": [
@@ -569,12 +569,12 @@
},
"goals1": [
{
"name": "Szymaniak",
"name": "Horst Szymaniak",
"minute": 21,
"penalty": true
},
{
"name": "Seeler",
"name": "Uwe Seeler",
"minute": 82
}
],
@@ -595,15 +595,15 @@
},
"goals1": [
{
"name": "Mora",
"name": "Bruno Mora",
"minute": 2
},
{
"name": "Bulgarelli",
"name": "Giacomo Bulgarelli",
"minute": 65
},
{
"name": "Bulgarelli",
"name": "Giacomo Bulgarelli",
"minute": 67
}
],
@@ -624,7 +624,7 @@
},
"goals1": [
{
"name": "Zagallo",
"name": "Mário Zagallo",
"minute": 56
},
{
@@ -649,7 +649,7 @@
},
"goals1": [
{
"name": "Štibrányi",
"name": "Jozef Štibrányi",
"minute": 80
}
],
@@ -685,7 +685,7 @@
},
"goals1": [
{
"name": "Peiró",
"name": "Joaquín Peiró",
"minute": 90
}
],
@@ -706,17 +706,17 @@
},
"goals1": [
{
"name": "Amarildo",
"name": "Amarildo Tavares da Silveira",
"minute": 72
},
{
"name": "Amarildo",
"name": "Amarildo Tavares da Silveira",
"minute": 86
}
],
"goals2": [
{
"name": "Adelardo",
"name": "Adelardo Rodríguez",
"minute": 35
}
],
@@ -737,22 +737,22 @@
},
"goals1": [
{
"name": "Díaz",
"name": "Isidoro Díaz",
"minute": 12
},
{
"name": "Del Águila",
"name": "Alfredo del Águila",
"minute": 29
},
{
"name": "Hernández",
"name": "Héctor Hernández",
"minute": 90,
"penalty": true
}
],
"goals2": [
{
"name": "Mašek",
"name": "Václav Mašek",
"minute": 1
}
],
@@ -773,7 +773,7 @@
},
"goals1": [
{
"name": "Facundo",
"name": "Héctor Facundo",
"minute": 4
}
],
@@ -794,17 +794,17 @@
},
"goals1": [
{
"name": "Tichy",
"name": "Lajos Tichy",
"minute": 17
},
{
"name": "Albert",
"name": "Flórián Albert",
"minute": 71
}
],
"goals2": [
{
"name": "Flowers",
"name": "Ron Flowers",
"minute": 60,
"penalty": true
}
@@ -826,22 +826,22 @@
},
"goals1": [
{
"name": "Flowers",
"name": "Ron Flowers",
"minute": 17,
"penalty": true
},
{
"name": "Charlton",
"name": "Bobby Charlton",
"minute": 42
},
{
"name": "Greaves",
"name": "Jimmy Greaves",
"minute": 67
}
],
"goals2": [
{
"name": "Sanfilippo",
"name": "José Sanfilippo",
"minute": 81
}
],
@@ -862,33 +862,33 @@
},
"goals1": [
{
"name": "Albert",
"name": "Flórián Albert",
"minute": 1
},
{
"name": "Albert",
"name": "Flórián Albert",
"minute": 6
},
{
"name": "Albert",
"name": "Flórián Albert",
"minute": 53
},
{
"name": "Tichy",
"name": "Lajos Tichy",
"minute": 8
},
{
"name": "Tichy",
"name": "Lajos Tichy",
"minute": 70
},
{
"name": "Solymosi",
"name": "Ernő Solymosi",
"minute": 12
}
],
"goals2": [
{
"name": "Sokolov",
"name": "Georgi Sokolov",
"minute": 64
}
],