diff --git a/imdb.go b/imdb.go index 2e72371..3d1037e 100644 --- a/imdb.go +++ b/imdb.go @@ -20,15 +20,14 @@ import ( "encoding/json" "errors" "fmt" - //"log" "net/http" - "strings" + "net/url" ) //======================================================================= // Const //======================================================================= -const baseUrl string = "http://www.omdbapi.com/?" +const baseUrl string = "http://www.omdbapi.com" const plot string = "full" const tomatoes string = "true" @@ -108,7 +107,7 @@ func SearchMovies(title string, year string) (*SearchResponse, error) { r := new(SearchResponse) err = json.NewDecoder(resp.Body).Decode(r) - + if err != nil { return nil, err } @@ -129,7 +128,7 @@ func GetMovieByTitle(title string, year string) (*MovieResult, error) { r := new(MovieResult) err = json.NewDecoder(resp.Body).Decode(r) - + if err != nil { return nil, err } @@ -149,7 +148,7 @@ func GetMovieByImdbId(id string) (*MovieResult, error) { r := new(MovieResult) err = json.NewDecoder(resp.Body).Decode(r) - + if err != nil { return nil, err } @@ -165,20 +164,31 @@ func omdbApiRequest(s string, i string, t string, y string) (resp *http.Response //t = Title Parameter, if this is != nil then its a getMovieByTitle //y = Year Parameter, Optional data for s and t search //var res http.Response - var url string - if s != "" { - s = strings.Replace(s, " ", "%20", -1) - url = fmt.Sprintf(baseUrl+"s=%s&y=%s", s, y) - } else if i != "" { - url = fmt.Sprintf(baseUrl+"i=%s&plot=%s&tomatoes=%s", i, plot, tomatoes) - } else if t != "" { - t = strings.Replace(t, " ", "%20", -1) - url = fmt.Sprintf(baseUrl+"t=%s&plot=%s&tomatoes=%s&y=%s", t, plot, tomatoes, y) + var Url *url.URL + Url, err = url.Parse(baseUrl) + + if err != nil { + return nil, err + } + Url.Path += "/" + parameters := url.Values{} + if len(s) > 0 { + parameters.Add("s", s) + parameters.Add("y", y) + } else if len(i) > 0 { + parameters.Add("i", i) + parameters.Add("plot", plot) + parameters.Add("tomatoes", tomatoes) + } else if len(t) > 0 { + parameters.Add("t", t) + parameters.Add("plot", plot) + parameters.Add("tomatoes", tomatoes) + parameters.Add("y", y) } else { return nil, errors.New("Invalid Request") } - //log.Print(url) //DEBUG - res, err := http.Get(url) + Url.RawQuery = parameters.Encode() + res, err := http.Get(Url.String()) err = checkErrorStatus(res.StatusCode) if err != nil { return nil, err