Skip to content

Commit 754e863

Browse files
committed
support reddit again, add error handling for forum indexer
1 parent cb05ff0 commit 754e863

File tree

5 files changed

+546
-8
lines changed

5 files changed

+546
-8
lines changed

main.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ func main() {
2020
pflag.String("db", "./gggtracker.db", "the database file path")
2121
pflag.String("dynamodb-table", "", "if given, DynamoDB will be used instead of a database file")
2222
pflag.String("forumsession", "", "the POESESSID cookie for a forum session")
23+
pflag.String("reddit-auth", "", "the APPLICATION:SECRET to use as Reddit auth")
2324
viper.BindPFlags(pflag.CommandLine)
2425
pflag.Parse()
2526

@@ -43,13 +44,16 @@ func main() {
4344
}
4445
defer db.Close()
4546

46-
redditIndexer, err := server.NewRedditIndexer(server.RedditIndexerConfiguration{
47-
Database: db,
48-
})
49-
if err != nil {
50-
log.Fatal(err)
47+
if viper.GetString("reddit-auth") != "" {
48+
redditIndexer, err := server.NewRedditIndexer(server.RedditIndexerConfiguration{
49+
Database: db,
50+
Auth: viper.GetString("reddit-auth"),
51+
})
52+
if err != nil {
53+
log.Fatal(err)
54+
}
55+
defer redditIndexer.Close()
5156
}
52-
defer redditIndexer.Close()
5357

5458
if viper.GetString("forumsession") != "" {
5559
forumIndexer, err := server.NewForumIndexer(server.ForumIndexerConfiguration{

server/forum_indexer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ func ScrapeForumPosts(doc *goquery.Document, timezone *time.Location) ([]*ForumP
147147

148148
err := error(nil)
149149

150+
if doc.Find(".forumPostListTable").Length() == 0 {
151+
return nil, errors.New("forum post list not found")
152+
}
153+
150154
doc.Find(".forumPostListTable > tbody > tr").EachWithBreak(func(i int, sel *goquery.Selection) bool {
151155
post := &ForumPost{
152156
Poster: sel.Find(".post_by_account").Text(),

server/forum_indexer_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,22 @@ func TestScrapeForumPosts(t *testing.T) {
3535
assert.Equal(t, "Announcements", p.ForumName)
3636
assert.Equal(t, "we had a great ti<strong>m</strong>e too!", p.BodyHTML)
3737
assert.Equal(t, int64(1486332365), p.Time.Unix())
38+
39+
t.Run("LoggedOut", func(t *testing.T) {
40+
f, err := os.Open("testdata/forum-posts-logged-out.html")
41+
require.NoError(t, err)
42+
defer f.Close()
43+
44+
doc, err := goquery.NewDocumentFromReader(f)
45+
require.NoError(t, err)
46+
47+
tz, err := time.LoadLocation("America/Los_Angeles")
48+
require.NoError(t, err)
49+
50+
posts, err := ScrapeForumPosts(doc, tz)
51+
require.Error(t, err)
52+
assert.Equal(t, 0, len(posts))
53+
})
3854
}
3955

4056
func TestScrapeForumTimezone(t *testing.T) {

server/reddit_indexer.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
type RedditIndexerConfiguration struct {
1515
Database Database
16+
Auth string
1617
}
1718

1819
type RedditIndexer struct {
@@ -33,6 +34,8 @@ func (indexer *RedditIndexer) Close() {
3334
indexer.closeSignal <- true
3435
}
3536

37+
const redditRequestInterval = time.Second * 8
38+
3639
func (indexer *RedditIndexer) run() {
3740
log.Info("starting reddit indexer")
3841

@@ -58,7 +61,7 @@ func (indexer *RedditIndexer) run() {
5861
if next >= len(users) {
5962
next = 0
6063
}
61-
time.Sleep(time.Second * 3)
64+
time.Sleep(redditRequestInterval)
6265
}
6366
}
6467
}
@@ -136,6 +139,9 @@ func (indexer *RedditIndexer) redditActivity(user string, page string) ([]Activi
136139
return nil, "", err
137140
}
138141
req.Header.Add("User-Agent", "GGG Tracker (https://github.com/ccbrown/gggtracker) by /u/rz2yoj")
142+
if parts := strings.Split(indexer.configuration.Auth, ":"); len(parts) == 2 {
143+
req.SetBasicAuth(parts[0], parts[1])
144+
}
139145

140146
resp, err := client.Do(req)
141147
if err != nil {
@@ -184,7 +190,7 @@ func (indexer *RedditIndexer) index(user string) error {
184190
if done {
185191
break
186192
}
187-
time.Sleep(time.Second * 3)
193+
time.Sleep(redditRequestInterval)
188194
}
189195

190196
if len(activity) == 0 {

0 commit comments

Comments
 (0)