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" // },