mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 12:12:00 -06:00
55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package crunchyroll
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
// News returns the top and latest news from crunchyroll for the current locale within the given limits.
|
|
func (c *Crunchyroll) News(topLimit uint, latestLimit uint) (t []*News, l []*News, err error) {
|
|
newsFeedEndpoint := fmt.Sprintf("https://beta.crunchyroll.com/content/v1/news_feed?top_news_n=%d&latest_news_n=%d&locale=%s",
|
|
topLimit, latestLimit, c.Locale)
|
|
resp, err := c.request(newsFeedEndpoint, http.MethodGet)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
var jsonBody map[string]interface{}
|
|
if err = json.NewDecoder(resp.Body).Decode(&jsonBody); err != nil {
|
|
return nil, nil, fmt.Errorf("failed to parse 'news_feed' response: %w", err)
|
|
}
|
|
|
|
topNews := jsonBody["top_news"].(map[string]interface{})
|
|
for _, item := range topNews["items"].([]interface{}) {
|
|
topNews := &News{}
|
|
if err := decodeMapToStruct(item, topNews); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
t = append(t, topNews)
|
|
}
|
|
|
|
latestNews := jsonBody["latest_news"].(map[string]interface{})
|
|
for _, item := range latestNews["items"].([]interface{}) {
|
|
latestNews := &News{}
|
|
if err := decodeMapToStruct(item, latestNews); err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
l = append(l, latestNews)
|
|
}
|
|
|
|
return t, l, nil
|
|
}
|
|
|
|
// News contains all information about news.
|
|
type News struct {
|
|
Title string `json:"title"`
|
|
Link string `json:"link"`
|
|
Image string `json:"image"`
|
|
Creator string `json:"creator"`
|
|
PublishDate string `json:"publish_date"`
|
|
Description string `json:"description"`
|
|
}
|