/
main.go
80 lines (65 loc) · 1.62 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package revelation
import (
"bytes"
"encoding/json"
"net/http"
"os"
"github.com/pkg/errors"
"github.com/shiimaxx/pocket"
)
var (
pocketKey = os.Getenv("POCKET_CONSUMER_KEY")
pocketToken = os.Getenv("POCKET_ACCESS_TOKEN")
slackURL = os.Getenv("SLACK_WEBHOOK_URL")
)
type PostItem struct {
Title string
URL string
}
type slackInput struct {
Text string `json:"text"`
}
func ToSlack(postItems []PostItem) error {
client := new(http.Client)
postText := "本日のキツネ様からのお告げです。\n\n"
for i := range postItems {
postText += postItems[i].Title + "\n" + postItems[i].URL + "\n\n"
}
jsonData, err := json.Marshal(&slackInput{Text: postText})
if err != nil {
return errors.Wrap(err, "failed to parse json")
}
req, err := http.NewRequest("POST", slackURL, bytes.NewReader(jsonData))
if err != nil {
return errors.Wrap(err, "failed to create http request")
}
req.Header.Set("Content-Type", "application/json")
_, err = client.Do(req)
if err != nil {
return errors.Wrap(err, "failed to http request")
}
return nil
}
func Random() ([]PostItem, error) {
client, err := pocket.NewClient(pocketKey, pocketToken)
if err != nil {
return nil, errors.Wrap(err, "failed to create pocket client")
}
items, err := client.Retrieve(&pocket.RetrieveOpts{
State: "unread",
})
if err != nil {
return nil, errors.Wrap(err, "failed to get items")
}
var PostItems []PostItem
counter := 0
for _, item := range items.List {
if counter < 5 {
PostItems = append(PostItems, PostItem{
Title: item.ResolvedTitle,
URL: item.ResolvedURL})
}
counter++
}
return PostItems, nil
}