81 lines
1.7 KiB
Go
81 lines
1.7 KiB
Go
package crawlers
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"git.postblue.info/chris/paddockpass/db"
|
|
"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()
|
|
mu := &api.Mutation{
|
|
CommitNow: true,
|
|
}
|
|
model := db.Driver{
|
|
FirstName: driver.FirstName,
|
|
LastName: driver.LastName,
|
|
Nationality: driver.Nationality,
|
|
DoB: (driver.DateOfBirth).Format(time.RFC3339),
|
|
Type: "driver",
|
|
}
|
|
pb, err := json.Marshal(model)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
mu.SetJson = pb
|
|
data, err := client.NewTxn().Mutate(ctx, mu)
|
|
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"
|
|
// },
|