package main import ( "encoding/csv" "fmt" "log" "net/http" "os" "strconv" "strings" "time" ) // Execute executes the job func Execute() error { if len(os.Args) != 2 { return fmt.Errorf("Missing mandatory .csv parameter") } csvFile, err := os.Open(os.Args[1]) if err != nil { return err } defer csvFile.Close() csvReader := csv.NewReader(csvFile) csvReader.Comma = ';' _, err = csvReader.Read() if err != nil { return err } errorFile, err := os.Create("errors.csv") if err != nil { return err } waitUntil := time.Now() for { waitUntil = waitUntil.Add(2 * time.Second) data, err := csvReader.Read() if err != nil { return err } a := Album{} // ID ID, err := strconv.ParseInt(data[0], 0, 64) if err != nil { return err } a.ID = uint64(ID) // ISBN a.ISBN = data[1] // Series a.Series = data[2] //Num if len(data[3]) == 0 { a.Num = -1 } else { Num, err := strconv.ParseInt(data[3], 0, 64) if err != nil { return err } a.Num = int(Num) } // NumA a.NumA = data[4] // Titre a.Title = data[5] URL := "http://www.bedetheque.com/" + a.GetBedethequeComURI() log.Printf("Contacting %s", URL) resp, err := http.Get(URL) if err != nil { return err } defer resp.Body.Close() log.Printf("Got %d", resp.StatusCode) if resp.StatusCode >= 400 { fmt.Fprintf(errorFile, "%s;%d", strings.Join(data, ";"), resp.StatusCode) } time.Sleep(waitUntil.Sub(time.Now())) } } func main() { if err := Execute(); err != nil { log.Printf("got unhandled error: %s", err) os.Exit(1) } }