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
+84 -84
View File
@@ -18,13 +18,13 @@
},
"goals1": [
{
"name": "Abegglen",
"name": "André Abegglen",
"minute": 43
}
],
"goals2": [
{
"name": "Gauchel",
"name": "Josef Gauchel",
"minute": 29
}
],
@@ -44,27 +44,27 @@
},
"goals1": [
{
"name": "Kohut",
"name": "Vilmos Kohut",
"minute": 13
},
{
"name": "Toldi",
"name": "Géza Toldi",
"minute": 15
},
{
"name": "G. Sárosi",
"name": "György Sárosi",
"minute": 25
},
{
"name": "G. Sárosi",
"name": "György Sárosi",
"minute": 89
},
{
"name": "Zsengellér",
"name": "Gyula Zsengellér",
"minute": 30
},
{
"name": "Zsengellér",
"name": "Gyula Zsengellér",
"minute": 76
}
],
@@ -95,29 +95,29 @@
},
"goals1": [
{
"name": "Socorro",
"name": "Héctor Socorro",
"minute": 44
},
{
"name": "Socorro",
"name": "Héctor Socorro",
"minute": 103
},
{
"name": "Magriñá",
"name": "José Magriñá",
"minute": 69
}
],
"goals2": [
{
"name": "Bindea",
"name": "Silviu Bindea",
"minute": 35
},
{
"name": "Barátky",
"name": "Iuliu Barátky",
"minute": 88
},
{
"name": "Dobay",
"name": "Ștefan Dobay",
"minute": 105
}
],
@@ -137,21 +137,21 @@
},
"goals1": [
{
"name": "Veinante",
"name": "Émile Veinante",
"minute": 1
},
{
"name": "Nicolas",
"name": "Jean Nicolas",
"minute": 16
},
{
"name": "Nicolas",
"name": "Jean Nicolas",
"minute": 69
}
],
"goals2": [
{
"name": "Isemborghs",
"name": "Hendrik Isemborghs",
"minute": 38
}
],
@@ -175,17 +175,17 @@
},
"goals1": [
{
"name": "Ferraris",
"name": "Pietro Ferraris",
"minute": 2
},
{
"name": "Piola",
"name": "Silvio Piola",
"minute": 94
}
],
"goals2": [
{
"name": "Brustad",
"name": "Arne Brustad",
"minute": 83
}
],
@@ -209,50 +209,50 @@
},
"goals1": [
{
"name": "Leônidas",
"name": "Leônidas da Silva",
"minute": 18
},
{
"name": "Leônidas",
"name": "Leônidas da Silva",
"minute": 93
},
{
"name": "Leônidas",
"name": "Leônidas da Silva",
"minute": 104
},
{
"name": "Romeu",
"name": "Romeu Pellicciari",
"minute": 25
},
{
"name": "Perácio",
"name": "José Perácio",
"minute": 44
},
{
"name": "Perácio",
"name": "José Perácio",
"minute": 71
}
],
"goals2": [
{
"name": "Scherfke",
"name": "Friedrich Scherfke",
"minute": 23,
"penalty": true
},
{
"name": "Wilimowski",
"name": "Ernst Wilimowski",
"minute": 53
},
{
"name": "Wilimowski",
"name": "Ernst Wilimowski",
"minute": 59
},
{
"name": "Wilimowski",
"name": "Ernst Wilimowski",
"minute": 89
},
{
"name": "Wilimowski",
"name": "Ernst Wilimowski",
"minute": 118
}
],
@@ -276,15 +276,15 @@
},
"goals1": [
{
"name": "Košťálek",
"name": "Josef Košťálek",
"minute": 96
},
{
"name": "Nejedlý",
"name": "Oldřich Nejedlý",
"minute": 111
},
{
"name": "Zeman",
"name": "Josef Zeman",
"minute": 118
}
],
@@ -304,29 +304,29 @@
},
"goals1": [
{
"name": "Walaschek",
"name": "Eugen Walaschek",
"minute": 42
},
{
"name": "Bickel",
"name": "Alfred Bickel",
"minute": 64
},
{
"name": "Abegglen",
"name": "André Abegglen",
"minute": 75
},
{
"name": "Abegglen",
"name": "André Abegglen",
"minute": 78
}
],
"goals2": [
{
"name": "Hahnemann",
"name": "Wilhelm Hahnemann",
"minute": 8
},
{
"name": "Lörtscher",
"name": "Ernst Lörtscher",
"minute": 22,
"owngoal": true
}
@@ -347,17 +347,17 @@
},
"goals1": [
{
"name": "Socorro",
"name": "Héctor Socorro",
"minute": 51
},
{
"name": "Fernández",
"name": "Tomás Fernández",
"minute": 57
}
],
"goals2": [
{
"name": "Dobay",
"name": "Ștefan Dobay",
"minute": 35
}
],
@@ -377,11 +377,11 @@
},
"goals1": [
{
"name": "G. Sárosi",
"name": "György Sárosi",
"minute": 40
},
{
"name": "Zsengellér",
"name": "Gyula Zsengellér",
"minute": 89
}
],
@@ -401,35 +401,35 @@
},
"goals1": [
{
"name": "H. Andersson",
"name": "Harry Andersson",
"minute": 9
},
{
"name": "H. Andersson",
"name": "Harry Andersson",
"minute": 81
},
{
"name": "H. Andersson",
"name": "Harry Andersson",
"minute": 89
},
{
"name": "Wetterström",
"name": "Gustav Wetterström",
"minute": 22
},
{
"name": "Wetterström",
"name": "Gustav Wetterström",
"minute": 37
},
{
"name": "Wetterström",
"name": "Gustav Wetterström",
"minute": 44
},
{
"name": "Keller",
"name": "Tore Keller",
"minute": 80
},
{
"name": "Nyberg",
"name": "Arne Nyberg",
"minute": 84
}
],
@@ -449,21 +449,21 @@
},
"goals1": [
{
"name": "Colaussi",
"name": "Gino Colaussi",
"minute": 9
},
{
"name": "Piola",
"name": "Silvio Piola",
"minute": 51
},
{
"name": "Piola",
"name": "Silvio Piola",
"minute": 72
}
],
"goals2": [
{
"name": "Heisserer",
"name": "Oscar Heisserer",
"minute": 10
}
],
@@ -487,13 +487,13 @@
},
"goals1": [
{
"name": "Leônidas",
"name": "Leônidas da Silva",
"minute": 30
}
],
"goals2": [
{
"name": "Nejedlý",
"name": "Oldřich Nejedlý",
"minute": 65,
"penalty": true
}
@@ -514,17 +514,17 @@
},
"goals1": [
{
"name": "Leônidas",
"name": "Leônidas da Silva",
"minute": 57
},
{
"name": "Roberto",
"name": "Roberto Emílio da Cunha",
"minute": 62
}
],
"goals2": [
{
"name": "Kopecký",
"name": "Vlastimil Kopecký",
"minute": 25
}
],
@@ -544,30 +544,30 @@
},
"goals1": [
{
"name": "Jacobsson",
"name": "Sven Jacobsson",
"minute": 19,
"owngoal": true
},
{
"name": "Titkos",
"name": "Pál Titkos",
"minute": 37
},
{
"name": "Zsengellér",
"name": "Gyula Zsengellér",
"minute": 39
},
{
"name": "Zsengellér",
"name": "Gyula Zsengellér",
"minute": 85
},
{
"name": "G. Sárosi",
"name": "György Sárosi",
"minute": 65
}
],
"goals2": [
{
"name": "Nyberg",
"name": "Arne Nyberg",
"minute": 1
}
],
@@ -587,18 +587,18 @@
},
"goals1": [
{
"name": "Colaussi",
"name": "Gino Colaussi",
"minute": 51
},
{
"name": "Meazza",
"name": "Giuseppe Meazza",
"minute": 60,
"penalty": true
}
],
"goals2": [
{
"name": "Romeu",
"name": "Romeu Pellicciari",
"minute": 87
}
],
@@ -618,29 +618,29 @@
},
"goals1": [
{
"name": "Romeu",
"name": "Romeu Pellicciari",
"minute": 44
},
{
"name": "Leônidas",
"name": "Leônidas da Silva",
"minute": 63
},
{
"name": "Leônidas",
"name": "Leônidas da Silva",
"minute": 74
},
{
"name": "Perácio",
"name": "José Perácio",
"minute": 80
}
],
"goals2": [
{
"name": "Jonasson",
"name": "Sven Jonasson",
"minute": 28
},
{
"name": "Nyberg",
"name": "Arne Nyberg",
"minute": 38
}
],
@@ -660,29 +660,29 @@
},
"goals1": [
{
"name": "Colaussi",
"name": "Gino Colaussi",
"minute": 6
},
{
"name": "Colaussi",
"name": "Gino Colaussi",
"minute": 35
},
{
"name": "Piola",
"name": "Silvio Piola",
"minute": 16
},
{
"name": "Piola",
"name": "Silvio Piola",
"minute": 82
}
],
"goals2": [
{
"name": "Titkos",
"name": "Pál Titkos",
"minute": 8
},
{
"name": "G. Sárosi",
"name": "György Sárosi",
"minute": 70
}
],