mirror of
https://codeberg.org/video-prize-ranch/rimgo.git
synced 2025-12-13 11:45:18 +00:00
Move types to api
This commit is contained in:
28
api/tag.go
28
api/tag.go
@@ -7,23 +7,31 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"codeberg.org/video-prize-ranch/rimgo/types"
|
||||
"codeberg.org/video-prize-ranch/rimgo/utils"
|
||||
"github.com/patrickmn/go-cache"
|
||||
"github.com/tidwall/gjson"
|
||||
)
|
||||
|
||||
type Tag struct {
|
||||
Tag string
|
||||
Display string
|
||||
Sort string
|
||||
PostCount int64
|
||||
Posts []Submission
|
||||
Background string
|
||||
}
|
||||
|
||||
var tagCache = cache.New(15*time.Minute, 15*time.Minute)
|
||||
|
||||
func FetchTag(tag string, sort string, page string) (types.Tag, error) {
|
||||
func FetchTag(tag string, sort string, page string) (Tag, error) {
|
||||
cacheData, found := tagCache.Get(tag + sort + page)
|
||||
if found {
|
||||
return cacheData.(types.Tag), nil
|
||||
return cacheData.(Tag), nil
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("GET", "https://api.imgur.com/post/v1/posts/t/"+tag, nil)
|
||||
if err != nil {
|
||||
return types.Tag{}, err
|
||||
return Tag{}, err
|
||||
}
|
||||
|
||||
q := req.URL.Query()
|
||||
@@ -49,29 +57,29 @@ func FetchTag(tag string, sort string, page string) (types.Tag, error) {
|
||||
|
||||
res, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return types.Tag{}, err
|
||||
return Tag{}, err
|
||||
}
|
||||
|
||||
body, err := ioutil.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
return types.Tag{}, err
|
||||
return Tag{}, err
|
||||
}
|
||||
|
||||
data := gjson.Parse(string(body))
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
posts := make([]types.Submission, 0)
|
||||
posts := make([]Submission, 0)
|
||||
data.Get("posts").ForEach(
|
||||
func(key, value gjson.Result) bool {
|
||||
wg.Add(1)
|
||||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
posts = append(posts, types.Submission{
|
||||
posts = append(posts, Submission{
|
||||
Id: value.Get("id").String(),
|
||||
Title: value.Get("title").String(),
|
||||
Link: strings.ReplaceAll(value.Get("url").String(), "https://imgur.com", ""),
|
||||
Cover: types.Media{
|
||||
Cover: Media{
|
||||
Id: value.Get("cover_id").String(),
|
||||
Type: value.Get("cover.type").String(),
|
||||
Url: strings.ReplaceAll(value.Get("cover.url").String(), "https://i.imgur.com", ""),
|
||||
@@ -91,7 +99,7 @@ func FetchTag(tag string, sort string, page string) (types.Tag, error) {
|
||||
|
||||
wg.Wait()
|
||||
|
||||
tagData := types.Tag{
|
||||
tagData := Tag{
|
||||
Tag: tag,
|
||||
Display: data.Get("display").String(),
|
||||
Sort: sort,
|
||||
|
||||
Reference in New Issue
Block a user