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:
@@ -4,7 +4,7 @@
|
||||
"name": "Group 1",
|
||||
"teams": [
|
||||
"Argentina",
|
||||
"West Germany",
|
||||
"Germany",
|
||||
"Northern Ireland",
|
||||
"Czechoslovakia"
|
||||
]
|
||||
|
||||
+119
-119
@@ -6,7 +6,7 @@
|
||||
"date": "1958-06-08",
|
||||
"time": "19:00",
|
||||
"team1": "Argentina",
|
||||
"team2": "West Germany",
|
||||
"team2": "Germany",
|
||||
"score": {
|
||||
"ft": [
|
||||
1,
|
||||
@@ -15,21 +15,21 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Corbatta",
|
||||
"name": "Omar Oreste Corbatta",
|
||||
"minute": 3
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Rahn",
|
||||
"name": "Helmut Rahn",
|
||||
"minute": 32
|
||||
},
|
||||
{
|
||||
"name": "Rahn",
|
||||
"name": "Helmut Rahn",
|
||||
"minute": 79
|
||||
},
|
||||
{
|
||||
"name": "Seeler",
|
||||
"name": "Uwe Seeler",
|
||||
"minute": 42
|
||||
}
|
||||
],
|
||||
@@ -50,7 +50,7 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Cush",
|
||||
"name": "Wilbur Cush",
|
||||
"minute": 21
|
||||
}
|
||||
],
|
||||
@@ -61,7 +61,7 @@
|
||||
"group": "Group 1",
|
||||
"date": "1958-06-11",
|
||||
"time": "19:00",
|
||||
"team1": "West Germany",
|
||||
"team1": "Germany",
|
||||
"team2": "Czechoslovakia",
|
||||
"score": {
|
||||
"ft": [
|
||||
@@ -71,22 +71,22 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Schäfer",
|
||||
"name": "Hans Schäfer",
|
||||
"minute": 60
|
||||
},
|
||||
{
|
||||
"name": "Rahn",
|
||||
"name": "Helmut Rahn",
|
||||
"minute": 71
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Dvořák",
|
||||
"name": "Milan Dvořák",
|
||||
"minute": 24,
|
||||
"penalty": true
|
||||
},
|
||||
{
|
||||
"name": "Zikán",
|
||||
"name": "Zdeněk Zikán",
|
||||
"minute": 42
|
||||
}
|
||||
],
|
||||
@@ -107,22 +107,22 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Corbatta",
|
||||
"name": "Omar Oreste Corbatta",
|
||||
"minute": 37,
|
||||
"penalty": true
|
||||
},
|
||||
{
|
||||
"name": "Menéndez",
|
||||
"name": "Norberto Menéndez",
|
||||
"minute": 56
|
||||
},
|
||||
{
|
||||
"name": "Avio",
|
||||
"name": "Ludovico Avio",
|
||||
"minute": 60
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "McParland",
|
||||
"name": "Peter McParland",
|
||||
"minute": 4
|
||||
}
|
||||
],
|
||||
@@ -133,7 +133,7 @@
|
||||
"group": "Group 1",
|
||||
"date": "1958-06-15",
|
||||
"time": "19:00",
|
||||
"team1": "West Germany",
|
||||
"team1": "Germany",
|
||||
"team2": "Northern Ireland",
|
||||
"score": {
|
||||
"ft": [
|
||||
@@ -143,21 +143,21 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Rahn",
|
||||
"name": "Helmut Rahn",
|
||||
"minute": 20
|
||||
},
|
||||
{
|
||||
"name": "Seeler",
|
||||
"name": "Uwe Seeler",
|
||||
"minute": 78
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "McParland",
|
||||
"name": "Peter McParland",
|
||||
"minute": 18
|
||||
},
|
||||
{
|
||||
"name": "McParland",
|
||||
"name": "Peter McParland",
|
||||
"minute": 60
|
||||
}
|
||||
],
|
||||
@@ -178,33 +178,33 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Dvořák",
|
||||
"name": "Milan Dvořák",
|
||||
"minute": 8
|
||||
},
|
||||
{
|
||||
"name": "Zikán",
|
||||
"name": "Zdeněk Zikán",
|
||||
"minute": 17
|
||||
},
|
||||
{
|
||||
"name": "Zikán",
|
||||
"name": "Zdeněk Zikán",
|
||||
"minute": 40
|
||||
},
|
||||
{
|
||||
"name": "Feureisl",
|
||||
"name": "Jiří Feureisl",
|
||||
"minute": 69
|
||||
},
|
||||
{
|
||||
"name": "Hovorka",
|
||||
"name": "Václav Hovorka",
|
||||
"minute": 82
|
||||
},
|
||||
{
|
||||
"name": "Hovorka",
|
||||
"name": "Václav Hovorka",
|
||||
"minute": 89
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Corbatta",
|
||||
"name": "Omar Oreste Corbatta",
|
||||
"minute": 65,
|
||||
"penalty": true
|
||||
}
|
||||
@@ -230,17 +230,17 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "McParland",
|
||||
"name": "Peter McParland",
|
||||
"minute": 44
|
||||
},
|
||||
{
|
||||
"name": "McParland",
|
||||
"name": "Peter McParland",
|
||||
"minute": 97
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Zikán",
|
||||
"name": "Zdeněk Zikán",
|
||||
"minute": 18
|
||||
}
|
||||
],
|
||||
@@ -261,46 +261,46 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 24
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 30
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 67
|
||||
},
|
||||
{
|
||||
"name": "Piantoni",
|
||||
"name": "Roger Piantoni",
|
||||
"minute": 52
|
||||
},
|
||||
{
|
||||
"name": "Wisnieski",
|
||||
"name": "Maryan Wisnieski",
|
||||
"minute": 61
|
||||
},
|
||||
{
|
||||
"name": "Kopa",
|
||||
"name": "Raymond Kopa",
|
||||
"minute": 70
|
||||
},
|
||||
{
|
||||
"name": "Vincent",
|
||||
"name": "Jean Vincent",
|
||||
"minute": 83
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Amarilla",
|
||||
"name": "Florencio Amarilla",
|
||||
"minute": 20
|
||||
},
|
||||
{
|
||||
"name": "Amarilla",
|
||||
"name": "Florencio Amarilla",
|
||||
"minute": 44,
|
||||
"penalty": true
|
||||
},
|
||||
{
|
||||
"name": "Romero",
|
||||
"name": "Jorge Lino Romero",
|
||||
"minute": 50
|
||||
}
|
||||
],
|
||||
@@ -321,13 +321,13 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Petaković",
|
||||
"name": "Aleksandar Petaković",
|
||||
"minute": 6
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Murray",
|
||||
"name": "Jimmy Murray",
|
||||
"minute": 49
|
||||
}
|
||||
],
|
||||
@@ -348,25 +348,25 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Petaković",
|
||||
"name": "Aleksandar Petaković",
|
||||
"minute": 16
|
||||
},
|
||||
{
|
||||
"name": "Veselinović",
|
||||
"name": "Todor Veselinović",
|
||||
"minute": 63
|
||||
},
|
||||
{
|
||||
"name": "Veselinović",
|
||||
"name": "Todor Veselinović",
|
||||
"minute": 88
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 4
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 85
|
||||
}
|
||||
],
|
||||
@@ -387,25 +387,25 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Agüero",
|
||||
"name": "Juan Bautista Agüero",
|
||||
"minute": 4
|
||||
},
|
||||
{
|
||||
"name": "Ré",
|
||||
"name": "Cayetano Ré",
|
||||
"minute": 45
|
||||
},
|
||||
{
|
||||
"name": "Parodi",
|
||||
"name": "José Parodi",
|
||||
"minute": 73
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Mudie",
|
||||
"name": "Jackie Mudie",
|
||||
"minute": 24
|
||||
},
|
||||
{
|
||||
"name": "Collins",
|
||||
"name": "Bobby Collins",
|
||||
"minute": 74
|
||||
}
|
||||
],
|
||||
@@ -426,17 +426,17 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Kopa",
|
||||
"name": "Raymond Kopa",
|
||||
"minute": 22
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 44
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Baird",
|
||||
"name": "Sammy Baird",
|
||||
"minute": 58
|
||||
}
|
||||
],
|
||||
@@ -457,29 +457,29 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Parodi",
|
||||
"name": "José Parodi",
|
||||
"minute": 20
|
||||
},
|
||||
{
|
||||
"name": "Agüero",
|
||||
"name": "Juan Bautista Agüero",
|
||||
"minute": 52
|
||||
},
|
||||
{
|
||||
"name": "Romero",
|
||||
"name": "Jorge Lino Romero",
|
||||
"minute": 80
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Ognjanović",
|
||||
"name": "Radivoje Ognjanović",
|
||||
"minute": 18
|
||||
},
|
||||
{
|
||||
"name": "Veselinović",
|
||||
"name": "Todor Veselinović",
|
||||
"minute": 21
|
||||
},
|
||||
{
|
||||
"name": "Rajkov",
|
||||
"name": "Zdravko Rajkov",
|
||||
"minute": 73
|
||||
}
|
||||
],
|
||||
@@ -500,15 +500,15 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Simonsson",
|
||||
"name": "Agne Simonsson",
|
||||
"minute": 17
|
||||
},
|
||||
{
|
||||
"name": "Simonsson",
|
||||
"name": "Agne Simonsson",
|
||||
"minute": 64
|
||||
},
|
||||
{
|
||||
"name": "Liedholm",
|
||||
"name": "Nils Liedholm",
|
||||
"minute": 57,
|
||||
"penalty": true
|
||||
}
|
||||
@@ -530,13 +530,13 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Bozsik",
|
||||
"name": "József Bozsik",
|
||||
"minute": 5
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "J. Charles",
|
||||
"name": "John Charles",
|
||||
"minute": 27
|
||||
}
|
||||
],
|
||||
@@ -557,13 +557,13 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Belmonte",
|
||||
"name": "Jaime Belmonte",
|
||||
"minute": 89
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "I. Allchurch",
|
||||
"name": "Ivor Allchurch",
|
||||
"minute": 32
|
||||
}
|
||||
],
|
||||
@@ -584,17 +584,17 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Hamrin",
|
||||
"name": "Kurt Hamrin",
|
||||
"minute": 34
|
||||
},
|
||||
{
|
||||
"name": "Hamrin",
|
||||
"name": "Kurt Hamrin",
|
||||
"minute": 55
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Tichy",
|
||||
"name": "Lajos Tichy",
|
||||
"minute": 77
|
||||
}
|
||||
],
|
||||
@@ -630,19 +630,19 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Tichy",
|
||||
"name": "Lajos Tichy",
|
||||
"minute": 19
|
||||
},
|
||||
{
|
||||
"name": "Tichy",
|
||||
"name": "Lajos Tichy",
|
||||
"minute": 46
|
||||
},
|
||||
{
|
||||
"name": "Sándor",
|
||||
"name": "Károly Sándor",
|
||||
"minute": 54
|
||||
},
|
||||
{
|
||||
"name": "Bencsics",
|
||||
"name": "József Bencsics",
|
||||
"minute": 69
|
||||
}
|
||||
],
|
||||
@@ -663,17 +663,17 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "I. Allchurch",
|
||||
"name": "Ivor Allchurch",
|
||||
"minute": 55
|
||||
},
|
||||
{
|
||||
"name": "Medwin",
|
||||
"name": "Terry Medwin",
|
||||
"minute": 76
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Tichy",
|
||||
"name": "Lajos Tichy",
|
||||
"minute": 33
|
||||
}
|
||||
],
|
||||
@@ -694,11 +694,11 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Altafini",
|
||||
"name": "José Altafini",
|
||||
"minute": 37
|
||||
},
|
||||
{
|
||||
"name": "Altafini",
|
||||
"name": "José Altafini",
|
||||
"minute": 85
|
||||
},
|
||||
{
|
||||
@@ -723,21 +723,21 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Simonyan",
|
||||
"name": "Nikita Simonyan",
|
||||
"minute": 13
|
||||
},
|
||||
{
|
||||
"name": "A. Ivanov",
|
||||
"name": "Aleksandr Ivanov",
|
||||
"minute": 56
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Kevan",
|
||||
"name": "Derek Kevan",
|
||||
"minute": 66
|
||||
},
|
||||
{
|
||||
"name": "Finney",
|
||||
"name": "Tom Finney",
|
||||
"minute": 85,
|
||||
"penalty": true
|
||||
}
|
||||
@@ -774,11 +774,11 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Ilyin",
|
||||
"name": "Anatoli Ilyin",
|
||||
"minute": 15
|
||||
},
|
||||
{
|
||||
"name": "V. Ivanov",
|
||||
"name": "Valentin Kozmich Ivanov",
|
||||
"minute": 62
|
||||
}
|
||||
],
|
||||
@@ -799,21 +799,21 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Haynes",
|
||||
"name": "Johnny Haynes",
|
||||
"minute": 56
|
||||
},
|
||||
{
|
||||
"name": "Kevan",
|
||||
"name": "Derek Kevan",
|
||||
"minute": 74
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Koller",
|
||||
"name": "Karl Koller",
|
||||
"minute": 15
|
||||
},
|
||||
{
|
||||
"name": "Körner",
|
||||
"name": "Alfred Körner",
|
||||
"minute": 71
|
||||
}
|
||||
],
|
||||
@@ -859,7 +859,7 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Ilyin",
|
||||
"name": "Anatoli Ilyin",
|
||||
"minute": 69
|
||||
}
|
||||
],
|
||||
@@ -899,19 +899,19 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Wisnieski",
|
||||
"name": "Maryan Wisnieski",
|
||||
"minute": 44
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 55
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 63
|
||||
},
|
||||
{
|
||||
"name": "Piantoni",
|
||||
"name": "Roger Piantoni",
|
||||
"minute": 68
|
||||
}
|
||||
],
|
||||
@@ -931,11 +931,11 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Hamrin",
|
||||
"name": "Kurt Hamrin",
|
||||
"minute": 49
|
||||
},
|
||||
{
|
||||
"name": "Simonsson",
|
||||
"name": "Agne Simonsson",
|
||||
"minute": 88
|
||||
}
|
||||
],
|
||||
@@ -945,7 +945,7 @@
|
||||
"round": "Quarter-finals",
|
||||
"date": "1958-06-19",
|
||||
"time": "19:00",
|
||||
"team1": "West Germany",
|
||||
"team1": "Germany",
|
||||
"team2": "Yugoslavia",
|
||||
"score": {
|
||||
"ft": [
|
||||
@@ -955,7 +955,7 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Rahn",
|
||||
"name": "Helmut Rahn",
|
||||
"minute": 12
|
||||
}
|
||||
],
|
||||
@@ -997,11 +997,11 @@
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 9
|
||||
},
|
||||
{
|
||||
"name": "Piantoni",
|
||||
"name": "Roger Piantoni",
|
||||
"minute": 83
|
||||
}
|
||||
],
|
||||
@@ -1012,7 +1012,7 @@
|
||||
"date": "1958-06-24",
|
||||
"time": "19:00",
|
||||
"team1": "Sweden",
|
||||
"team2": "West Germany",
|
||||
"team2": "Germany",
|
||||
"score": {
|
||||
"ft": [
|
||||
3,
|
||||
@@ -1021,21 +1021,21 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Skoglund",
|
||||
"name": "Lennart Skoglund",
|
||||
"minute": 32
|
||||
},
|
||||
{
|
||||
"name": "Gren",
|
||||
"name": "Gunnar Gren",
|
||||
"minute": 81
|
||||
},
|
||||
{
|
||||
"name": "Hamrin",
|
||||
"name": "Kurt Hamrin",
|
||||
"minute": 88
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Schäfer",
|
||||
"name": "Hans Schäfer",
|
||||
"minute": 24
|
||||
}
|
||||
],
|
||||
@@ -1046,7 +1046,7 @@
|
||||
"date": "1958-06-28",
|
||||
"time": "17:00",
|
||||
"team1": "France",
|
||||
"team2": "West Germany",
|
||||
"team2": "Germany",
|
||||
"score": {
|
||||
"ft": [
|
||||
6,
|
||||
@@ -1055,42 +1055,42 @@
|
||||
},
|
||||
"goals1": [
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 16
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 36
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 78
|
||||
},
|
||||
{
|
||||
"name": "Fontaine",
|
||||
"name": "Just Fontaine",
|
||||
"minute": 89
|
||||
},
|
||||
{
|
||||
"name": "Kopa",
|
||||
"name": "Raymond Kopa",
|
||||
"minute": 27,
|
||||
"penalty": true
|
||||
},
|
||||
{
|
||||
"name": "Douis",
|
||||
"name": "Yvon Douis",
|
||||
"minute": 50
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Cieslarczyk",
|
||||
"name": "Hans Cieslarczyk",
|
||||
"minute": 18
|
||||
},
|
||||
{
|
||||
"name": "Rahn",
|
||||
"name": "Helmut Rahn",
|
||||
"minute": 52
|
||||
},
|
||||
{
|
||||
"name": "Schäfer",
|
||||
"name": "Hans Schäfer",
|
||||
"minute": 84
|
||||
}
|
||||
],
|
||||
@@ -1126,17 +1126,17 @@
|
||||
"minute": 90
|
||||
},
|
||||
{
|
||||
"name": "Zagallo",
|
||||
"name": "Mário Zagallo",
|
||||
"minute": 68
|
||||
}
|
||||
],
|
||||
"goals2": [
|
||||
{
|
||||
"name": "Liedholm",
|
||||
"name": "Nils Liedholm",
|
||||
"minute": 4
|
||||
},
|
||||
{
|
||||
"name": "Simonsson",
|
||||
"name": "Agne Simonsson",
|
||||
"minute": 80
|
||||
}
|
||||
],
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
"winner": "Brazil",
|
||||
"runner_up": "Sweden",
|
||||
"third_place": "France",
|
||||
"fourth_place": "West Germany"
|
||||
"fourth_place": "Germany"
|
||||
}
|
||||
Reference in New Issue
Block a user