101 lines
2.1 KiB
Go
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"
|
|
// },
|