paddockpass/api/driver.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"
// },