mirror of
https://github.com/simon987/imhashdb.git
synced 2025-04-18 01:26:43 +00:00
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package imhashdb
|
|
|
|
import (
|
|
"go.uber.org/zap"
|
|
"regexp"
|
|
"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 handleImgurLink(link string, meta *[]Meta) []string {
|
|
|
|
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 546c25a59c58ad7"},
|
|
)
|
|
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 546c25a59c58ad7"},
|
|
)
|
|
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
|
|
}
|