Skip to content

Commit 56506cc

Browse files
committed
Basic working version for JS room only
1 parent 164d820 commit 56506cc

File tree

1 file changed

+54
-2
lines changed

1 file changed

+54
-2
lines changed

benjamingr/main.go

+54-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,59 @@
11
package main
22

3-
import "fmt"
3+
import (
4+
"fmt"
5+
"github.com/PuerkitoBio/goquery"
6+
"strings"
7+
"strconv"
8+
)
9+
10+
func getNumPages() (int, error){
11+
doc, err := goquery.NewDocument("http://chat.stackoverflow.com/rooms/info/17/javascript/?tab=stars")
12+
if err != nil {
13+
return 0, err
14+
}
15+
text := doc.Find(".page-numbers.dots ~ * span.page-numbers").Text()
16+
numStr := strings.Split(text, " ")[0]
17+
numPagesStr := strings.TrimSpace(numStr)
18+
return strconv.Atoi(numPagesStr)
19+
}
20+
21+
func scrapePage(stars map[string]int, j int){
22+
doc, err := goquery.NewDocument("http://chat.stackoverflow.com/rooms/info/17/javascript/?tab=stars&page=" + strconv.Itoa(j))
23+
if err != nil {
24+
fmt.Println("Error in page", j, ": ", err)
25+
return
26+
}
27+
28+
doc.Find(".monologue").Each(func(i int, s *goquery.Selection){
29+
user := strings.TrimSpace(s.Find(".username").Text())
30+
starsText := strings.TrimSpace(s.Find(".times").Text())
31+
starsForPost, err := strconv.Atoi(starsText) // yolo
32+
if err != nil { // one star
33+
starsForPost = 1
34+
}
35+
stars[user] += starsForPost
36+
})
37+
38+
}
439

540
func main() {
6-
fmt.Println("Your code here, might want to use net/http and its friends")
41+
42+
pagesNum, err := getNumPages()
43+
if err != nil {
44+
fmt.Println("Failed to get page numbers: ", err)
45+
return
46+
}
47+
stars := make(map[string]int)
48+
fmt.Println("Going to scrape ", pagesNum, " pages")
49+
for i := 0; i < pagesNum ; i++ {
50+
fmt.Println("Scraping page ", i)
51+
scrapePage(stars, i)
52+
}
53+
54+
fmt.Println("Got here!")
55+
for key, value := range stars {
56+
fmt.Println("Key:", key, "Value:", value)
57+
}
58+
759
}

0 commit comments

Comments
 (0)