55 lines
1004 B
Go
55 lines
1004 B
Go
package reddit
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/cwpearson/reddit-images/rate_limit"
|
|
)
|
|
|
|
type GListing struct {
|
|
Data GListingData `json:"data"`
|
|
}
|
|
|
|
type GListingData struct {
|
|
Children []GListingDataChild `json:"children"`
|
|
}
|
|
|
|
type GListingDataChild struct {
|
|
Data GListingDataChildData `json:"data"`
|
|
}
|
|
|
|
type GListingDataChildData struct {
|
|
MediaMetadata map[string]Metadata `json:"media_metadata"`
|
|
}
|
|
|
|
type Metadata struct {
|
|
Id string `json:"id"`
|
|
Mimetype string `json:"m"`
|
|
}
|
|
|
|
func GalleryImageMetadata(rl *rate_limit.RateLimit, url string) ([]Metadata, error) {
|
|
jsonUrl := fmt.Sprintf("%s.json?raw_json=1", url)
|
|
log.Printf("gallery url: %s -> %s", url, jsonUrl)
|
|
|
|
content, err := rl.Get(jsonUrl, "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var data []GListing
|
|
err = json.Unmarshal(content, &data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
res := []Metadata{}
|
|
|
|
for _, val := range data[0].Data.Children[0].Data.MediaMetadata {
|
|
res = append(res, val)
|
|
}
|
|
|
|
return res, nil
|
|
}
|