7a319241689e8bd196d12b0b507cf95dbe6b30bf
[brackets.git] / scrape / graph / graph.go
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 }