paddockpass/crawlers/driver.go

101 lines
2.1 KiB
Go
Raw Permalink Normal View History

2020-07-25 00:39:53 +02:00
package crawlers
import (
2020-07-25 00:52:24 +02:00
"context"
"encoding/json"
2020-07-28 00:01:06 +02:00
"fmt"
"io/ioutil"
2020-07-25 00:52:24 +02:00
"log"
"net/http"
2020-07-25 00:52:24 +02:00
"github.com/dgraph-io/dgo/v2"
"github.com/dgraph-io/dgo/v2/protos/api"
)
// GetDriversFromErgast gets the driver data from the API.
2020-07-25 00:52:24 +02:00
func GetDriversFromErgast(year string, client *dgo.Dgraph) {
2020-02-04 20:16:42 +01:00
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 {
2020-07-25 00:52:24 +02:00
ctx := context.Background()
2020-07-26 22:59:23 +02:00
model := Driver{
GivenName: driver.GivenName,
FamilyName: driver.FamilyName,
2020-02-04 20:16:42 +01:00
Nationality: driver.Nationality,
2020-07-26 22:59:23 +02:00
DateOfBirth: driver.DateOfBirth,
2020-07-25 00:52:24 +02:00
}
2020-07-28 00:01:06 +02:00
GetResultsFromErgast(year, driver.FamilyName, client)
2020-07-25 00:52:24 +02:00
pb, err := json.Marshal(model)
if err != nil {
log.Fatal(err)
}
2020-07-28 00:01:06 +02:00
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)
2020-07-25 00:52:24 +02:00
if err != nil {
log.Fatal(err)
}
2020-07-25 00:52:24 +02:00
log.Print(data)
}
2020-02-04 20:16:42 +01:00
}
// {
// "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"
// },