Commit | Line | Data |
---|---|---|
bd7c6d1e JC |
1 | package graph |
2 | ||
3 | import ( | |
4 | "git.jacobcasper.com/brackets/env" | |
5 | "github.com/zmb3/spotify" | |
6 | "log" | |
7 | "net/http" | |
8 | "net/url" | |
9 | "time" | |
10 | ) | |
11 | ||
12 | func Scrape(env *env.Env) { | |
13 | infinite: | |
14 | for { | |
15 | time.Sleep(time.Second * 5) | |
16 | rows, err := env.Db.Db.Query(` | |
17 | SELECT ID | |
18 | FROM ARTIST | |
19 | WHERE ID NOT IN ( | |
20 | SELECT ARTIST_ID | |
21 | FROM SCRAPED_ARTIST | |
22 | WHERE SCRAPED == 1 | |
23 | )`) | |
24 | if err != nil { | |
25 | log.Print(err) | |
26 | continue infinite | |
27 | } | |
28 | defer rows.Close() | |
29 | ||
30 | var artistId string | |
31 | for rows.Next() { | |
32 | if err := rows.Scan(&artistId); err != nil { | |
33 | log.Print(err) | |
34 | continue infinite | |
35 | } | |
36 | ||
37 | artists, err := env.C.GetRelatedArtists(spotify.ID(artistId)) | |
38 | if err != nil { | |
39 | log.Print(err) | |
40 | continue infinite | |
41 | } | |
42 | ||
43 | success := true | |
44 | postArtists: | |
45 | for _, artist := range artists { | |
46 | resp, err := http.PostForm("http://localhost:8080/artist/add", url.Values{"id": {string(artist.ID)}}) | |
47 | if err != nil { | |
48 | log.Print(err) | |
49 | success = false | |
50 | continue postArtists | |
51 | } | |
52 | if resp.StatusCode != http.StatusCreated { | |
53 | success = false | |
54 | } | |
55 | } | |
56 | ||
57 | if success { | |
58 | env.Db.Mu.Lock() | |
59 | env.Db.Db.Exec(` | |
60 | REPLACE INTO SCRAPED_ARTIST (ARTIST_ID, SCRAPED) | |
61 | VALUES (?, 1)`, | |
62 | string(artistId)) | |
63 | env.Db.Mu.Unlock() | |
64 | } | |
65 | } | |
66 | } | |
67 | } |