85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
|
|
"framagit.org/pksl/paddockpass/db"
|
|
"github.com/jinzhu/gorm"
|
|
)
|
|
|
|
type Driver struct {
|
|
FirstName string `json:"givenName"`
|
|
LastName string `json:"familyName"`
|
|
DateOrBirth Date `json:"dateOfBirth"`
|
|
Nationality string `json:nationality`
|
|
}
|
|
|
|
type Drivers struct {
|
|
Drivers []Driver `json:"Drivers"`
|
|
}
|
|
|
|
type DriverTable struct {
|
|
DriverTable Drivers `json:"DriverTable"`
|
|
}
|
|
|
|
type MRDriverData struct {
|
|
MRData DriverTable `json:"MRData"`
|
|
}
|
|
|
|
// GetDriversFromErgast gets the driver data from the API.
|
|
func GetDriversFromErgast() {
|
|
resp, err := http.Get("http://ergast.com/api/f1/drivers.json")
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
var jsonData MRDriverData
|
|
err = json.Unmarshal(body, &jsonData)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
drivers := jsonData.MRData.DriverTable.Drivers
|
|
|
|
tx, err := gorm.Open("sqlite3", "test.db")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
defer tx.Close()
|
|
for _, driver := range drivers {
|
|
model := db.Driver{
|
|
FirstName: driver.FirstName,
|
|
LastName: driver.LastName,
|
|
}
|
|
tx.Assign(model).FirstOrCreate(&model)
|
|
}
|
|
}
|
|
|
|
// {
|
|
// "MRData": {
|
|
// "xmlns": "http://ergast.com/mrd/1.4",
|
|
// "series": "f1",
|
|
// "url": "http://ergast.com/api/f1/drivers.json",
|
|
// "limit": "30",
|
|
// "offset": "0",
|
|
// "total": "847",
|
|
// "DriverTable": {
|
|
// "Drivers": [
|
|
// {
|
|
// "driverId": "abate",
|
|
// "url": "http://en.wikipedia.org/wiki/Carlo_Mario_Abate",
|
|
// "givenName": "Carlo",
|
|
// "familyName": "Abate",
|
|
// "dateOfBirth": "1932-07-10",
|
|
// "nationality": "Italian"
|
|
// },
|