Files
worldcup/app/data/openfootball/1986/worldcup.json
T
valknar 5dcd22ad22 feat: replace Kaggle CSV with Wikipedia scraper for historical match data
Add scripts/scrape-wikipedia.ts that fetches all 22 World Cups (1930–2022)
from English Wikipedia via MediaWiki API, handles group sub-pages, AET/penalty
detection, and goal parsing, writing openfootball-format JSON to app/data/openfootball/.

Rewrite scripts/seed.ts to read these local JSON files instead of the Kaggle
CSV, producing 965 matches and 2716 goals with per-group assignments for all
historical tournaments (enabling group standings on tournament pages).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 11:39:53 +02:00

1484 lines
27 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"matches": [
{
"round": "Round of 16",
"date": "1986-06-15",
"time": "12:00",
"team1": "Mexico",
"team2": "Bulgaria",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Negrete",
"minute": 34
},
{
"name": "Servín",
"minute": 61
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Round of 16",
"date": "1986-06-15",
"time": "16:00",
"team1": "Soviet Union",
"team2": "Belgium",
"score": {
"ft": [
2,
2
],
"et": [
3,
4
]
},
"goals1": [
{
"name": "Belanov",
"minute": 27
},
{
"name": "Belanov",
"minute": 70
},
{
"name": "Belanov",
"minute": 111,
"penalty": true
}
],
"goals2": [
{
"name": "Scifo",
"minute": 56
},
{
"name": "Ceulemans",
"minute": 77
},
{
"name": "Demol",
"minute": 102
},
{
"name": "Claesen",
"minute": 110
}
],
"ground": "Estadio Nou Camp, León"
},
{
"round": "Round of 16",
"date": "1986-06-16",
"time": "12:00",
"team1": "Brazil",
"team2": "Poland",
"score": {
"ft": [
4,
0
]
},
"goals1": [
{
"name": "Sócrates",
"minute": 30,
"penalty": true
},
{
"name": "Josimar",
"minute": 55
},
{
"name": "Edinho",
"minute": 79
},
{
"name": "Careca",
"minute": 83,
"penalty": true
}
],
"ground": "Estadio Jalisco, Guadalajara"
},
{
"round": "Round of 16",
"date": "1986-06-16",
"time": "16:00",
"team1": "Argentina",
"team2": "Uruguay",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Pasculli",
"minute": 42
}
],
"ground": "Estadio Cuauhtémoc, Puebla"
},
{
"round": "Round of 16",
"date": "1986-06-17",
"time": "12:00",
"team1": "Italy",
"team2": "France",
"score": {
"ft": [
0,
2
]
},
"goals2": [
{
"name": "Platini",
"minute": 15
},
{
"name": "Stopyra",
"minute": 57
}
],
"ground": "Estadio Olímpico Universitario, Mexico City"
},
{
"round": "Round of 16",
"date": "1986-06-17",
"time": "16:00",
"team1": "Morocco",
"team2": "West Germany",
"score": {
"ft": [
0,
1
]
},
"goals2": [
{
"name": "Matthäus",
"minute": 88
}
],
"ground": "Estadio Universitario, San Nicolás de los Garza"
},
{
"round": "Round of 16",
"date": "1986-06-18",
"time": "12:00",
"team1": "England",
"team2": "Paraguay",
"score": {
"ft": [
3,
0
]
},
"goals1": [
{
"name": "Lineker",
"minute": 31
},
{
"name": "Lineker",
"minute": 73
},
{
"name": "Beardsley",
"minute": 56
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Round of 16",
"date": "1986-06-18",
"time": "16:00",
"team1": "Denmark",
"team2": "Spain",
"score": {
"ft": [
1,
5
]
},
"goals1": [
{
"name": "J. Olsen",
"minute": 33,
"penalty": true
}
],
"goals2": [
{
"name": "Butragueño",
"minute": 43
},
{
"name": "Butragueño",
"minute": 56
},
{
"name": "Butragueño",
"minute": 80
},
{
"name": "Butragueño",
"minute": 88,
"penalty": true
},
{
"name": "Goikoetxea",
"minute": 68,
"penalty": true
}
],
"ground": "Estadio La Corregidora, Querétaro"
},
{
"round": "Quarter-finals",
"date": "1986-06-21",
"time": "12:00",
"team1": "Brazil",
"team2": "France",
"score": {
"ft": [
1,
1
],
"et": [
1,
1
],
"p": [
3,
4
]
},
"goals1": [
{
"name": "Careca",
"minute": 17
}
],
"goals2": [
{
"name": "Platini",
"minute": 40
}
],
"ground": "Estadio Jalisco, Guadalajara"
},
{
"round": "Quarter-finals",
"date": "1986-06-21",
"time": "16:00",
"team1": "West Germany",
"team2": "Mexico",
"score": {
"ft": [
0,
0
],
"et": [
0,
0
],
"p": [
4,
1
]
},
"ground": "Estadio Universitario, San Nicolás de los Garza"
},
{
"round": "Quarter-finals",
"date": "1986-06-22",
"time": "12:00",
"team1": "Argentina",
"team2": "England",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Maradona",
"minute": 51
},
{
"name": "Maradona",
"minute": 55
}
],
"goals2": [
{
"name": "Lineker",
"minute": 81
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Quarter-finals",
"date": "1986-06-22",
"time": "16:00",
"team1": "Spain",
"team2": "Belgium",
"score": {
"ft": [
1,
1
],
"et": [
1,
1
],
"p": [
4,
5
]
},
"goals1": [
{
"name": "Señor",
"minute": 85
}
],
"goals2": [
{
"name": "Ceulemans",
"minute": 35
}
],
"ground": "Estadio Cuauhtémoc, Puebla"
},
{
"round": "Semi-finals",
"date": "1986-06-25",
"time": "12:00",
"team1": "France",
"team2": "West Germany",
"score": {
"ft": [
0,
2
]
},
"goals2": [
{
"name": "Brehme",
"minute": 9
},
{
"name": "Völler",
"minute": 90
}
],
"ground": "Estadio Jalisco, Guadalajara"
},
{
"round": "Semi-finals",
"date": "1986-06-25",
"time": "16:00",
"team1": "Argentina",
"team2": "Belgium",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Maradona",
"minute": 51
},
{
"name": "Maradona",
"minute": 63
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Third-place match",
"date": "1986-06-28",
"time": "12:00",
"team1": "Belgium",
"team2": "France",
"score": {
"ft": [
2,
2
],
"et": [
2,
4
]
},
"goals1": [
{
"name": "Ceulemans",
"minute": 11
},
{
"name": "Claesen",
"minute": 73
}
],
"goals2": [
{
"name": "Ferreri",
"minute": 27
},
{
"name": "Papin",
"minute": 43
},
{
"name": "Genghini",
"minute": 104
},
{
"name": "Amoros",
"minute": 111,
"penalty": true
}
],
"ground": "Estadio Cuauhtémoc, Puebla"
},
{
"round": "Final",
"date": "1986-06-29",
"time": "12:00",
"team1": "Argentina",
"team2": "West Germany",
"score": {
"ft": [
3,
2
]
},
"goals1": [
{
"name": "Brown",
"minute": 23
},
{
"name": "Valdano",
"minute": 56
},
{
"name": "Burruchaga",
"minute": 84
}
],
"goals2": [
{
"name": "Rummenigge",
"minute": 74
},
{
"name": "Völler",
"minute": 81
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Group stage",
"group": "Group A",
"date": "1986-05-31",
"time": "12:00",
"team1": "Bulgaria",
"team2": "Italy",
"score": {
"ft": [
1,
1
]
},
"goals1": [
{
"name": "Sirakov",
"minute": 85
}
],
"goals2": [
{
"name": "Altobelli",
"minute": 44
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Group stage",
"group": "Group A",
"date": "1986-06-02",
"time": "12:00",
"team1": "Argentina",
"team2": "South Korea",
"score": {
"ft": [
3,
1
]
},
"goals1": [
{
"name": "Valdano",
"minute": 6
},
{
"name": "Valdano",
"minute": 46
},
{
"name": "Ruggeri",
"minute": 18
}
],
"goals2": [
{
"name": "Park Chang-Sun",
"minute": 73
}
],
"ground": "Estadio Olímpico Universitario, Mexico City"
},
{
"round": "Group stage",
"group": "Group A",
"date": "1986-06-05",
"time": "12:00",
"team1": "Italy",
"team2": "Argentina",
"score": {
"ft": [
1,
1
]
},
"goals1": [
{
"name": "Altobelli",
"minute": 6,
"penalty": true
}
],
"goals2": [
{
"name": "Maradona",
"minute": 34
}
],
"ground": "Estadio Cuauhtémoc, Puebla"
},
{
"round": "Group stage",
"group": "Group A",
"date": "1986-06-05",
"time": "16:00",
"team1": "South Korea",
"team2": "Bulgaria",
"score": {
"ft": [
1,
1
]
},
"goals1": [
{
"name": "Kim Jong-Boo",
"minute": 70
}
],
"goals2": [
{
"name": "Getov",
"minute": 11
}
],
"ground": "Estadio Olímpico Universitario, Mexico City"
},
{
"round": "Group stage",
"group": "Group A",
"date": "1986-06-10",
"time": "12:00",
"team1": "South Korea",
"team2": "Italy",
"score": {
"ft": [
2,
3
]
},
"goals1": [
{
"name": "Choi Soon-Ho",
"minute": 62
},
{
"name": "Huh Jung-Moo",
"minute": 89
}
],
"goals2": [
{
"name": "Altobelli",
"minute": 17
},
{
"name": "Altobelli",
"minute": 73
},
{
"name": "Cho Kwang-Rae",
"minute": 82,
"owngoal": true
}
],
"ground": "Estadio Cuauhtémoc, Puebla"
},
{
"round": "Group stage",
"group": "Group A",
"date": "1986-06-10",
"time": "12:00",
"team1": "Argentina",
"team2": "Bulgaria",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Valdano",
"minute": 4
},
{
"name": "Burruchaga",
"minute": 77
}
],
"ground": "Estadio Olímpico Universitario, Mexico City"
},
{
"round": "Group stage",
"group": "Group B",
"date": "1986-06-03",
"time": "12:00",
"team1": "Belgium",
"team2": "Mexico",
"score": {
"ft": [
1,
2
]
},
"goals1": [
{
"name": "Vandenbergh",
"minute": 45
}
],
"goals2": [
{
"name": "Quirarte",
"minute": 23
},
{
"name": "Sánchez",
"minute": 39
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Group stage",
"group": "Group B",
"date": "1986-06-04",
"time": "12:00",
"team1": "Paraguay",
"team2": "Iraq",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Romero",
"minute": 35
}
],
"ground": "Estadio Toluca 7086, Toluca"
},
{
"round": "Group stage",
"group": "Group B",
"date": "1986-06-07",
"time": "12:00",
"team1": "Mexico",
"team2": "Paraguay",
"score": {
"ft": [
1,
1
]
},
"goals1": [
{
"name": "Flores",
"minute": 3
}
],
"goals2": [
{
"name": "Romero",
"minute": 85
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Group stage",
"group": "Group B",
"date": "1986-06-08",
"time": "12:00",
"team1": "Iraq",
"team2": "Belgium",
"score": {
"ft": [
1,
2
]
},
"goals1": [
{
"name": "Radhi",
"minute": 59
}
],
"goals2": [
{
"name": "Scifo",
"minute": 16
},
{
"name": "Claesen",
"minute": 21,
"penalty": true
}
],
"ground": "Estadio Toluca 7086, Toluca"
},
{
"round": "Group stage",
"group": "Group B",
"date": "1986-06-11",
"time": "12:00",
"team1": "Paraguay",
"team2": "Belgium",
"score": {
"ft": [
2,
2
]
},
"goals1": [
{
"name": "Cabañas",
"minute": 50
},
{
"name": "Cabañas",
"minute": 76
}
],
"goals2": [
{
"name": "Vercauteren",
"minute": 30
},
{
"name": "Veyt",
"minute": 59
}
],
"ground": "Estadio Toluca 7086, Toluca"
},
{
"round": "Group stage",
"group": "Group B",
"date": "1986-06-11",
"time": "12:00",
"team1": "Iraq",
"team2": "Mexico",
"score": {
"ft": [
0,
1
]
},
"goals2": [
{
"name": "Quirarte",
"minute": 54
}
],
"ground": "Estadio Azteca, Mexico City"
},
{
"round": "Group stage",
"group": "Group C",
"date": "1986-06-01",
"time": "16:00",
"team1": "Canada",
"team2": "France",
"score": {
"ft": [
0,
1
]
},
"goals2": [
{
"name": "Papin",
"minute": 79
}
],
"ground": "Estadio Nou Camp, León"
},
{
"round": "Group stage",
"group": "Group C",
"date": "1986-06-02",
"time": "12:00",
"team1": "Soviet Union",
"team2": "Hungary",
"score": {
"ft": [
6,
0
]
},
"goals1": [
{
"name": "Yakovenko",
"minute": 2
},
{
"name": "Aleinikov",
"minute": 4
},
{
"name": "Belanov",
"minute": 24,
"penalty": true
},
{
"name": "Yaremchuk",
"minute": 66
},
{
"name": "Dajka",
"minute": 73,
"owngoal": true
},
{
"name": "Rodionov",
"minute": 80
}
],
"ground": "Estadio Sergio León Chavez, Irapuato"
},
{
"round": "Group stage",
"group": "Group C",
"date": "1986-06-05",
"time": "12:00",
"team1": "France",
"team2": "Soviet Union",
"score": {
"ft": [
1,
1
]
},
"goals1": [
{
"name": "Fernández",
"minute": 62
}
],
"goals2": [
{
"name": "Rats",
"minute": 53
}
],
"ground": "Estadio Nou Camp, León"
},
{
"round": "Group stage",
"group": "Group C",
"date": "1986-06-06",
"time": "12:00",
"team1": "Hungary",
"team2": "Canada",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Esterházy",
"minute": 2
},
{
"name": "Détári",
"minute": 75
}
],
"ground": "Estadio Sergio León Chavez, Irapuato"
},
{
"round": "Group stage",
"group": "Group C",
"date": "1986-06-09",
"time": "12:00",
"team1": "Hungary",
"team2": "France",
"score": {
"ft": [
0,
3
]
},
"goals2": [
{
"name": "Stopyra",
"minute": 29
},
{
"name": "Tigana",
"minute": 62
},
{
"name": "Rocheteau",
"minute": 84
}
],
"ground": "Estadio Nou Camp, León"
},
{
"round": "Group stage",
"group": "Group C",
"date": "1986-06-09",
"time": "12:00",
"team1": "Soviet Union",
"team2": "Canada",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "Blokhin",
"minute": 58
},
{
"name": "Zavarov",
"minute": 74
}
],
"ground": "Estadio Sergio León Chavez, Irapuato"
},
{
"round": "Group stage",
"group": "Group D",
"date": "1986-06-01",
"time": "12:00",
"team1": "Spain",
"team2": "Brazil",
"score": {
"ft": [
0,
1
]
},
"goals2": [
{
"name": "Sócrates",
"minute": 62
}
],
"ground": "Estadio Jalisco, Guadalajara"
},
{
"round": "Group stage",
"group": "Group D",
"date": "1986-06-03",
"time": "12:00",
"team1": "Algeria",
"team2": "Northern Ireland",
"score": {
"ft": [
1,
1
]
},
"goals1": [
{
"name": "Zidane",
"minute": 59
}
],
"goals2": [
{
"name": "Whiteside",
"minute": 6
}
],
"ground": "Estadio Tres de Marzo, Zapopan"
},
{
"round": "Group stage",
"group": "Group D",
"date": "1986-06-06",
"time": "12:00",
"team1": "Brazil",
"team2": "Algeria",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Careca",
"minute": 66
}
],
"ground": "Estadio Jalisco, Guadalajara"
},
{
"round": "Group stage",
"group": "Group D",
"date": "1986-06-07",
"time": "12:00",
"team1": "Northern Ireland",
"team2": "Spain",
"score": {
"ft": [
1,
2
]
},
"goals1": [
{
"name": "Clarke",
"minute": 46
}
],
"goals2": [
{
"name": "Butragueño",
"minute": 1
},
{
"name": "Salinas",
"minute": 18
}
],
"ground": "Estadio Tres de Marzo, Zapopan"
},
{
"round": "Group stage",
"group": "Group D",
"date": "1986-06-12",
"time": "12:00",
"team1": "Northern Ireland",
"team2": "Brazil",
"score": {
"ft": [
0,
3
]
},
"goals2": [
{
"name": "Careca",
"minute": 15
},
{
"name": "Careca",
"minute": 87
},
{
"name": "Josimar",
"minute": 42
}
],
"ground": "Estadio Jalisco, Guadalajara"
},
{
"round": "Group stage",
"group": "Group D",
"date": "1986-06-12",
"time": "12:00",
"team1": "Algeria",
"team2": "Spain",
"score": {
"ft": [
0,
3
]
},
"goals2": [
{
"name": "Calderé",
"minute": 15
},
{
"name": "Calderé",
"minute": 68
},
{
"name": "Eloy",
"minute": 70
}
],
"ground": "Estadio Tecnológico, Monterrey"
},
{
"round": "Group stage",
"group": "Group E",
"date": "1986-06-04",
"time": "12:00",
"team1": "Uruguay",
"team2": "West Germany",
"score": {
"ft": [
1,
1
]
},
"goals1": [
{
"name": "Alzamendi",
"minute": 4
}
],
"goals2": [
{
"name": "Allofs",
"minute": 84
}
],
"ground": "Estadio La Corregidora, Querétaro"
},
{
"round": "Group stage",
"group": "Group E",
"date": "1986-06-04",
"time": "16:00",
"team1": "Scotland",
"team2": "Denmark",
"score": {
"ft": [
0,
1
]
},
"goals2": [
{
"name": "Elkjær",
"minute": 57
}
],
"ground": "Estadio Neza 86, Nezahualcóyotl"
},
{
"round": "Group stage",
"group": "Group E",
"date": "1986-06-08",
"time": "12:00",
"team1": "West Germany",
"team2": "Scotland",
"score": {
"ft": [
2,
1
]
},
"goals1": [
{
"name": "Völler",
"minute": 23
},
{
"name": "Allofs",
"minute": 49
}
],
"goals2": [
{
"name": "Strachan",
"minute": 18
}
],
"ground": "Estadio La Corregidora, Querétaro"
},
{
"round": "Group stage",
"group": "Group E",
"date": "1986-06-08",
"time": "16:00",
"team1": "Denmark",
"team2": "Uruguay",
"score": {
"ft": [
6,
1
]
},
"goals1": [
{
"name": "Elkjær",
"minute": 11
},
{
"name": "Elkjær",
"minute": 67
},
{
"name": "Elkjær",
"minute": 80
},
{
"name": "Lerby",
"minute": 41
},
{
"name": "Laudrup",
"minute": 52
},
{
"name": "J. Olsen",
"minute": 88
}
],
"goals2": [
{
"name": "Francescoli",
"minute": 45,
"penalty": true
}
],
"ground": "Estadio Neza 86, Nezahualcóyotl"
},
{
"round": "Group stage",
"group": "Group E",
"date": "1986-06-13",
"time": "12:00",
"team1": "Denmark",
"team2": "West Germany",
"score": {
"ft": [
2,
0
]
},
"goals1": [
{
"name": "J. Olsen",
"minute": 43,
"penalty": true
},
{
"name": "Eriksen",
"minute": 62
}
],
"ground": "Estadio La Corregidora, Querétaro"
},
{
"round": "Group stage",
"group": "Group E",
"date": "1986-06-13",
"time": "12:00",
"team1": "Scotland",
"team2": "Uruguay",
"score": {
"ft": [
0,
0
]
},
"ground": "Estadio Neza 86, Nezahualcóyotl"
},
{
"round": "Group stage",
"group": "Group F",
"date": "1986-06-02",
"time": "16:00",
"team1": "Morocco",
"team2": "Poland",
"score": {
"ft": [
0,
0
]
},
"ground": "Estadio Universitario, San Nicolás de los Garza"
},
{
"round": "Group stage",
"group": "Group F",
"date": "1986-06-03",
"time": "16:00",
"team1": "Portugal",
"team2": "England",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Carlos Manuel",
"minute": 75
}
],
"ground": "Estadio Tecnológico, Monterrey"
},
{
"round": "Group stage",
"group": "Group F",
"date": "1986-06-06",
"time": "16:00",
"team1": "England",
"team2": "Morocco",
"score": {
"ft": [
0,
0
]
},
"ground": "Estadio Tecnológico, Monterrey"
},
{
"round": "Group stage",
"group": "Group F",
"date": "1986-06-07",
"time": "16:00",
"team1": "Poland",
"team2": "Portugal",
"score": {
"ft": [
1,
0
]
},
"goals1": [
{
"name": "Smolarek",
"minute": 68
}
],
"ground": "Estadio Universitario, San Nicolás de los Garza"
},
{
"round": "Group stage",
"group": "Group F",
"date": "1986-06-11",
"time": "16:00",
"team1": "England",
"team2": "Poland",
"score": {
"ft": [
3,
0
]
},
"goals1": [
{
"name": "Lineker",
"minute": 8
},
{
"name": "Lineker",
"minute": 14
},
{
"name": "Lineker",
"minute": 36
}
],
"ground": "Estadio Universitario, San Nicolás de los Garza"
},
{
"round": "Group stage",
"group": "Group F",
"date": "1986-06-11",
"time": "16:00",
"team1": "Portugal",
"team2": "Morocco",
"score": {
"ft": [
1,
3
]
},
"goals1": [
{
"name": "Diamantino",
"minute": 80
}
],
"goals2": [
{
"name": "Khairi",
"minute": 19
},
{
"name": "Khairi",
"minute": 27
},
{
"name": "A. Merry",
"minute": 62
}
],
"ground": "Estadio Tres de Marzo, Zapopan"
}
]
}