paddockpass/crawlers/driver.go
2020-07-28 00:01:06 +02:00

101 lines
2.1 KiB
Go

package crawlers
import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"github.com/dgraph-io/dgo/v2"
"github.com/dgraph-io/dgo/v2/protos/api"
)
// GetDriversFromErgast gets the driver data from the API.
func GetDriversFromErgast(year string, client *dgo.Dgraph) {
resp, err := http.Get("http://ergast.com/api/f1/" + year + "/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
for _, driver := range drivers {
ctx := context.Background()
model := Driver{
GivenName: driver.GivenName,
FamilyName: driver.FamilyName,
Nationality: driver.Nationality,
DateOfBirth: driver.DateOfBirth,
}
GetResultsFromErgast(year, driver.FamilyName, client)
pb, err := json.Marshal(model)
if err != nil {
log.Fatal(err)
}
mu := &api.Mutation{
SetJson: pb,
Cond: `@if(eq(len(driver), 0))`,
}
if driver.FamilyName == "Pérez" {
driver.FamilyName = "Perez"
}
if driver.FamilyName == "Räikkönen" {
driver.FamilyName = "Raikkonen"
}
query := fmt.Sprintf(`query {
driver as var(func: eq(familyName, %s))
}`, driver.FamilyName)
req := &api.Request{
Query: query,
Mutations: []*api.Mutation{mu},
CommitNow: true,
}
data, err := client.NewTxn().Do(ctx, req)
if err != nil {
log.Fatal(err)
}
log.Print(data)
}
}
// {
// "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"
// },