package ytsclient import ( r "github.com/levigross/grequests" "strconv" ) type Client struct { url string list string get string suggestions string } const ( list = "/list_movies.json" get = "/movie_details.json" suggestions = "/movie_suggestions.json" ) func NewClient(url string) *Client { if url == "" { url = "https://yts.am/api/v2" } return &Client{url, url + list, url + get, url + suggestions} } func (y *Client) List(params *ListParams) ([]Movie, error) { if params == nil { params = &ListParams{} } res, err := r.Get(y.list, params.format()) if err != nil { return nil, err } var resp ListResponse if err := res.JSON(&resp); err != nil { return nil, err } return resp.Data.Movies, nil } func (y *Client) Search(search string, params *ListParams) ([]Movie, error) { if params == nil { params = &ListParams{} } params.QueryTerm = search res, err := r.Get(y.list, params.format()) if err != nil { return nil, err } var resp ListResponse if err := res.JSON(&resp); err != nil { return nil, err } return resp.Data.Movies, nil } func (y *Client) Get(id string, params *MovieParams) (Movie, error) { if params == nil { params = &MovieParams{} } p := params.format() p.Params["movie_id"] = id res, err := r.Get(y.get, p) if err != nil { return Movie{}, err } var resp MovieResponse if err := res.JSON(&resp); err != nil { return Movie{}, err } return resp.Data.Movie, nil } func (y *Client) Suggestions(id int) ([]Movie, error) { ro := &r.RequestOptions{ Params: map[string]string{"movie_id": strconv.Itoa(id)}, } res, err := r.Get(y.suggestions, ro) if err != nil { return nil, err } var resp ListResponse if err := res.JSON(&resp); err != nil { return nil, err } return resp.Data.Movies, nil }