-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlink.go
More file actions
102 lines (82 loc) · 2.17 KB
/
link.go
File metadata and controls
102 lines (82 loc) · 2.17 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package imhashdb
import (
"go.uber.org/zap"
"net/url"
"regexp"
"strings"
"time"
)
var ReImgurImg = regexp.MustCompile("(?:https?://)?(?:www\\.|[im]\\.)?imgur\\.com/(\\w{7}|\\w{5})[sbtmlh]?")
var ReImgurAlbum = regexp.MustCompile("(?:https?://)?(?:www\\.|[im]\\.)?imgur\\.com/a/(\\w{7}|\\w{5})")
type ImgurImgResp struct {
Data ImgurImg `json:"data"`
}
type ImgurImg struct {
Link string `json:"link"`
}
type ImgurAlbumResp struct {
Data struct {
Images []ImgurImg `json:"images"`
} `json:"data"`
}
func IsImageLink(link string) bool {
if strings.HasPrefix(link, "https://i.reddituploads.com") {
return true
}
u, err := url.Parse(link)
if err != nil {
return false
}
path := strings.ToLower(u.Path)
for _, suffix := range ImageSuffixes {
if strings.HasSuffix(path, suffix) {
return true
}
}
return false
}
func handleImgurLink(link string, meta *[]Meta) []string {
if strings.HasPrefix(link, "https://imgur.fun/") {
link = strings.Replace(link, "imgur.fun", "imgur.com", 1)
}
if ReImgurImg.MatchString(link) {
id := ReImgurImg.FindStringSubmatch(link)[1]
var img ImgurImgResp
var rawJson []byte
err := FetchJson(
"https://api.imgur.com/3/image/"+id,
&img, &rawJson,
[]string{"Authorization", "Client-Id " + Conf.ImgurClientId},
)
if err != nil {
return nil
}
Logger.Debug("Got ImgurImgResp", zap.String("id", id))
*meta = append(*meta, Meta{RetrievedAt: time.Now().Unix(), Id: "imgur.i." + id, Meta: rawJson})
return []string{img.Data.Link}
} else if ReImgurAlbum.MatchString(link) {
id := ReImgurAlbum.FindStringSubmatch(link)[1]
var album ImgurAlbumResp
var rawJson []byte
err := FetchJson(
"https://api.imgur.com/3/album/"+id,
&album, &rawJson,
[]string{"Authorization", "Client-Id " + Conf.ImgurClientId},
)
if err != nil {
return nil
}
Logger.Debug(
"Got ImgurAlbumResp",
zap.String("id", id),
zap.Int("count", len(album.Data.Images)),
)
*meta = append(*meta, Meta{RetrievedAt: time.Now().Unix(), Id: "imgur.a." + id, Meta: rawJson})
var links = make([]string, len(album.Data.Images))
for i, img := range album.Data.Images {
links[i] = img.Link
}
return links
}
return nil
}