Implements a stupid crawler
This commit is contained in:
90
main.go
90
main.go
@@ -1,11 +1,95 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/csv"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func Execute() error {
|
||||||
fmt.Fprintf(os.Stderr, "Not Yet Implemented")
|
if len(os.Args) != 2 {
|
||||||
os.Exit(1)
|
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()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if err := Execute(); err != nil {
|
||||||
|
log.Printf("got unhandled error: %s", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user