94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package trakt
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
"github.com/l3uddz/nabarr/util"
|
|
"github.com/lucperkins/rek"
|
|
)
|
|
|
|
var (
|
|
ErrItemNotFound = errors.New("not found")
|
|
)
|
|
|
|
func (c *Client) GetShow(providerType string, providerId string) (*Show, error) {
|
|
// prepare request
|
|
reqUrl, err := util.URLWithQuery(util.JoinURL(c.apiURL, "search", providerType, providerId),
|
|
url.Values{
|
|
"type": []string{"show"},
|
|
"extended": []string{"full"}})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("generate lookup show request url: %w", err)
|
|
}
|
|
|
|
// send request
|
|
resp, err := rek.Get(reqUrl, rek.Client(c.http), rek.Headers(c.getAuthHeaders()))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("request show: %w", err)
|
|
}
|
|
defer resp.Body().Close()
|
|
|
|
// validate response
|
|
if resp.StatusCode() != 200 {
|
|
return nil, fmt.Errorf("validate show response: %s", resp.Status())
|
|
}
|
|
|
|
// decode response
|
|
b := new([]struct{ Show Show })
|
|
if err := json.NewDecoder(resp.Body()).Decode(b); err != nil {
|
|
return nil, fmt.Errorf("decode show response: %w", err)
|
|
}
|
|
|
|
if len(*b) < 1 {
|
|
return nil, ErrItemNotFound
|
|
}
|
|
|
|
// translate response
|
|
show := &(*b)[0].Show
|
|
show.Ids.Imdb = util.StripNonAlphaNumeric(show.Ids.Imdb)
|
|
|
|
return show, nil
|
|
}
|
|
|
|
func (c *Client) GetMovie(providerType string, providerId string) (*Movie, error) {
|
|
// prepare request
|
|
reqUrl, err := util.URLWithQuery(util.JoinURL(c.apiURL, "search", providerType, providerId),
|
|
url.Values{
|
|
"type": []string{"movie"},
|
|
"extended": []string{"full"}})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("generate lookup movie request url: %w", err)
|
|
}
|
|
|
|
// send request
|
|
resp, err := rek.Get(reqUrl, rek.Client(c.http), rek.Headers(c.getAuthHeaders()))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("request movie: %w", err)
|
|
}
|
|
defer resp.Body().Close()
|
|
|
|
// validate response
|
|
if resp.StatusCode() != 200 {
|
|
return nil, fmt.Errorf("validate movie response: %s", resp.Status())
|
|
}
|
|
|
|
// decode response
|
|
b := new([]struct{ Movie Movie })
|
|
if err := json.NewDecoder(resp.Body()).Decode(b); err != nil {
|
|
return nil, fmt.Errorf("decode movie response: %w", err)
|
|
}
|
|
|
|
if len(*b) < 1 {
|
|
return nil, ErrItemNotFound
|
|
}
|
|
|
|
// translate response
|
|
movie := &(*b)[0].Movie
|
|
movie.Ids.Imdb = util.StripNonAlphaNumeric(movie.Ids.Imdb)
|
|
|
|
return movie, nil
|
|
}
|