diff --git a/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java b/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java index 0b4cae287..bd5394316 100644 --- a/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java +++ b/src/main/java/com/omertron/themoviedbapi/TheMovieDbApi.java @@ -72,26 +72,15 @@ import com.omertron.themoviedbapi.model.Translation; import com.omertron.themoviedbapi.model.Video; import com.omertron.themoviedbapi.results.TmdbResultsList; import com.omertron.themoviedbapi.results.TmdbResultsMap; -import com.omertron.themoviedbapi.tools.ApiUrl; import com.omertron.themoviedbapi.tools.HttpTools; import com.omertron.themoviedbapi.tools.MethodBase; import com.omertron.themoviedbapi.tools.MethodSub; -import com.omertron.themoviedbapi.tools.Param; -import com.omertron.themoviedbapi.tools.TmdbParameters; -import com.omertron.themoviedbapi.wrapper.WrapperCollection; -import com.omertron.themoviedbapi.wrapper.WrapperCompany; -import com.omertron.themoviedbapi.wrapper.WrapperKeywords; -import com.omertron.themoviedbapi.wrapper.WrapperMovie; -import com.omertron.themoviedbapi.wrapper.WrapperMovieList; -import com.omertron.themoviedbapi.wrapper.WrapperPerson; -import java.io.IOException; import java.net.URL; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.apache.http.impl.client.CloseableHttpClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.yamj.api.common.exception.ApiExceptionType; import org.yamj.api.common.http.SimpleHttpClientBuilder; /** @@ -279,188 +268,6 @@ public class TheMovieDbApi { return StringUtils.isNotBlank(year) && !"UNKNOWN".equals(year); } - /** - * Search Movies This is a good starting point to start finding movies on TMDb. - * - * @param movieName - * @param searchYear Limit the search to the provided year. Zero (0) will get all years - * @param language The language to include. Can be blank/null. - * @param includeAdult true or false to include adult titles in the search - * @param page The page of results to return. 0 to get the default (first page) - * @return - * @throws MovieDbException - */ - public TmdbResultsList searchMovie(String movieName, int searchYear, String language, boolean includeAdult, int page) throws MovieDbException { - TmdbParameters parameters = new TmdbParameters(); - parameters.add(Param.QUERY, movieName); - parameters.add(Param.YEAR, searchYear); - parameters.add(Param.LANGUAGE, language); - parameters.add(Param.ADULT, includeAdult); - parameters.add(Param.PAGE, page); - - URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.MOVIE).buildUrl(parameters); - String webpage = httpTools.getRequest(url); - - try { - WrapperMovie wrapper = MAPPER.readValue(webpage, WrapperMovie.class); - TmdbResultsList results = new TmdbResultsList(wrapper.getMovies()); - results.copyWrapper(wrapper); - return results; - } catch (IOException ex) { - LOG.warn("Failed to find movie: {}", ex.getMessage(), ex); - throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, webpage, url, ex); - } - - } - - /** - * Search for collections by name. - * - * @param query - * @param language - * @param page - * @return - * @throws MovieDbException - */ - public TmdbResultsList searchCollection(String query, String language, int page) throws MovieDbException { - TmdbParameters parameters = new TmdbParameters(); - parameters.add(Param.QUERY, query); - parameters.add(Param.LANGUAGE, language); - parameters.add(Param.PAGE, page); - - URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.COLLECTION).buildUrl(parameters); - String webpage = httpTools.getRequest(url); - - try { - WrapperCollection wrapper = MAPPER.readValue(webpage, WrapperCollection.class); - TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); - results.copyWrapper(wrapper); - return results; - } catch (IOException ex) { - LOG.warn("Failed to find collection: {}", ex.getMessage(), ex); - throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, webpage, url, ex); - } - } - - /** - * This is a good starting point to start finding people on TMDb. - * - * The idea is to be a quick and light method so you can iterate through people quickly. - * - * @param personName - * @param includeAdult - * @param page - * @return - * @throws MovieDbException - */ - public TmdbResultsList searchPeople(String personName, boolean includeAdult, int page) throws MovieDbException { - TmdbParameters parameters = new TmdbParameters(); - parameters.add(Param.QUERY, personName); - parameters.add(Param.ADULT, includeAdult); - parameters.add(Param.PAGE, page); - - URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.PERSON).buildUrl(parameters); - String webpage = httpTools.getRequest(url); - - try { - WrapperPerson wrapper = MAPPER.readValue(webpage, WrapperPerson.class); - TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); - results.copyWrapper(wrapper); - return results; - } catch (IOException ex) { - LOG.warn("Failed to find person: {}", ex.getMessage(), ex); - throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, webpage, url, ex); - } - } - - /** - * Search for lists by name and description. - * - * @param query - * @param language - * @param page - * @return - * @throws MovieDbException - */ - public TmdbResultsList searchList(String query, String language, int page) throws MovieDbException { - TmdbParameters parameters = new TmdbParameters(); - parameters.add(Param.QUERY, query); - parameters.add(Param.LANGUAGE, language); - parameters.add(Param.PAGE, page); - - URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.LIST).buildUrl(parameters); - String webpage = httpTools.getRequest(url); - - try { - WrapperMovieList wrapper = MAPPER.readValue(webpage, WrapperMovieList.class); - TmdbResultsList results = new TmdbResultsList(wrapper.getMovieList()); - results.copyWrapper(wrapper); - return results; - } catch (IOException ex) { - LOG.warn("Failed to find list: {}", ex.getMessage(), ex); - throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, webpage, url, ex); - } - } - - /** - * Search Companies. - * - * You can use this method to search for production companies that are part of TMDb. The company IDs will map to those returned - * on movie calls. - * - * http://help.themoviedb.org/kb/api/search-companies - * - * @param companyName - * @param page - * @return - * @throws MovieDbException - */ - public TmdbResultsList searchCompanies(String companyName, int page) throws MovieDbException { - TmdbParameters parameters = new TmdbParameters(); - parameters.add(Param.QUERY, companyName); - parameters.add(Param.PAGE, page); - - URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.COMPANY).buildUrl(parameters); - String webpage = httpTools.getRequest(url); - - try { - WrapperCompany wrapper = MAPPER.readValue(webpage, WrapperCompany.class); - TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); - results.copyWrapper(wrapper); - return results; - } catch (IOException ex) { - LOG.warn("Failed to find company: {}", ex.getMessage(), ex); - throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, webpage, url, ex); - } - } - - /** - * Search for keywords by name - * - * @param query - * @param page - * @return - * @throws MovieDbException - */ - public TmdbResultsList searchKeyword(String query, int page) throws MovieDbException { - TmdbParameters parameters = new TmdbParameters(); - parameters.add(Param.QUERY, query); - parameters.add(Param.PAGE, page); - - URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.KEYWORD).buildUrl(parameters); - String webpage = httpTools.getRequest(url); - - try { - WrapperKeywords wrapper = MAPPER.readValue(webpage, WrapperKeywords.class); - TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); - results.copyWrapper(wrapper); - return results; - } catch (IOException ex) { - LOG.warn("Failed to find keyword: {}", ex.getMessage(), ex); - throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, webpage, url, ex); - } - } - // /** * Get the basic information for an account. You will need to have a valid session id. @@ -1460,6 +1267,90 @@ public class TheMovieDbApi { // // + /** + * Search Movies This is a good starting point to start finding movies on TMDb. + * + * @param movieName + * @param searchYear Limit the search to the provided year. Zero (0) will get all years + * @param language The language to include. Can be blank/null. + * @param includeAdult true or false to include adult titles in the search + * @param page The page of results to return. 0 to get the default (first page) + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchMovie(String movieName, int searchYear, String language, boolean includeAdult, int page) throws MovieDbException { + return tmdbSearch.searchMovie(movieName, searchYear, language, includeAdult, page); + } + + /** + * Search for collections by name. + * + * @param query + * @param language + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchCollection(String query, String language, int page) throws MovieDbException { + return tmdbSearch.searchCollection(query, language, page); + } + + /** + * This is a good starting point to start finding people on TMDb. + * + * The idea is to be a quick and light method so you can iterate through people quickly. + * + * @param personName + * @param includeAdult + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchPeople(String personName, boolean includeAdult, int page) throws MovieDbException { + return tmdbSearch.searchPeople(personName, includeAdult, page); + } + + /** + * Search for lists by name and description. + * + * @param query + * @param language + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchList(String query, String language, int page) throws MovieDbException { + return tmdbSearch.searchList(query, language, page); + } + + /** + * Search Companies. + * + * You can use this method to search for production companies that are part of TMDb. The company IDs will map to those returned + * on movie calls. + * + * http://help.themoviedb.org/kb/api/search-companies + * + * @param companyName + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchCompanies(String companyName, int page) throws MovieDbException { + return tmdbSearch.searchCompanies(companyName, page); + } + + /** + * Search for keywords by name + * + * @param query + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchKeyword(String query, int page) throws MovieDbException { + return tmdbSearch.searchKeyword(query, page); + } // // diff --git a/src/main/java/com/omertron/themoviedbapi/methods/TmdbSearch.java b/src/main/java/com/omertron/themoviedbapi/methods/TmdbSearch.java index 991063667..58e71d248 100644 --- a/src/main/java/com/omertron/themoviedbapi/methods/TmdbSearch.java +++ b/src/main/java/com/omertron/themoviedbapi/methods/TmdbSearch.java @@ -19,7 +19,29 @@ */ package com.omertron.themoviedbapi.methods; +import com.omertron.themoviedbapi.MovieDbException; +import com.omertron.themoviedbapi.model.Collection; +import com.omertron.themoviedbapi.model.Company; +import com.omertron.themoviedbapi.model.Keyword; +import com.omertron.themoviedbapi.model.MovieDb; +import com.omertron.themoviedbapi.model.MovieList; +import com.omertron.themoviedbapi.model.Person; +import com.omertron.themoviedbapi.results.TmdbResultsList; +import com.omertron.themoviedbapi.tools.ApiUrl; import com.omertron.themoviedbapi.tools.HttpTools; +import com.omertron.themoviedbapi.tools.MethodBase; +import com.omertron.themoviedbapi.tools.MethodSub; +import com.omertron.themoviedbapi.tools.Param; +import com.omertron.themoviedbapi.tools.TmdbParameters; +import com.omertron.themoviedbapi.wrapper.WrapperCollection; +import com.omertron.themoviedbapi.wrapper.WrapperCompany; +import com.omertron.themoviedbapi.wrapper.WrapperKeywords; +import com.omertron.themoviedbapi.wrapper.WrapperMovie; +import com.omertron.themoviedbapi.wrapper.WrapperMovieList; +import com.omertron.themoviedbapi.wrapper.WrapperPerson; +import java.io.IOException; +import java.net.URL; +import org.yamj.api.common.exception.ApiExceptionType; /** * Class to hold the Search Methods @@ -37,4 +59,181 @@ public class TmdbSearch extends AbstractMethod { public TmdbSearch(String apiKey, HttpTools httpTools) { super(apiKey, httpTools); } + + /** + * Search Movies This is a good starting point to start finding movies on TMDb. + * + * @param movieName + * @param searchYear Limit the search to the provided year. Zero (0) will get all years + * @param language The language to include. Can be blank/null. + * @param includeAdult true or false to include adult titles in the search + * @param page The page of results to return. 0 to get the default (first page) + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchMovie(String movieName, int searchYear, String language, boolean includeAdult, int page) throws MovieDbException { + TmdbParameters parameters = new TmdbParameters(); + parameters.add(Param.QUERY, movieName); + parameters.add(Param.YEAR, searchYear); + parameters.add(Param.LANGUAGE, language); + parameters.add(Param.ADULT, includeAdult); + parameters.add(Param.PAGE, page); + + URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.MOVIE).buildUrl(parameters); + String webpage = httpTools.getRequest(url); + + try { + WrapperMovie wrapper = MAPPER.readValue(webpage, WrapperMovie.class); + TmdbResultsList results = new TmdbResultsList(wrapper.getMovies()); + results.copyWrapper(wrapper); + return results; + } catch (IOException ex) { + throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to find movie", url, ex); + } + + } + + /** + * Search for collections by name. + * + * @param query + * @param language + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchCollection(String query, String language, int page) throws MovieDbException { + TmdbParameters parameters = new TmdbParameters(); + parameters.add(Param.QUERY, query); + parameters.add(Param.LANGUAGE, language); + parameters.add(Param.PAGE, page); + + URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.COLLECTION).buildUrl(parameters); + String webpage = httpTools.getRequest(url); + + try { + WrapperCollection wrapper = MAPPER.readValue(webpage, WrapperCollection.class); + TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); + results.copyWrapper(wrapper); + return results; + } catch (IOException ex) { + throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to find collection", url, ex); + } + } + + /** + * This is a good starting point to start finding people on TMDb. + * + * The idea is to be a quick and light method so you can iterate through people quickly. + * + * @param personName + * @param includeAdult + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchPeople(String personName, boolean includeAdult, int page) throws MovieDbException { + TmdbParameters parameters = new TmdbParameters(); + parameters.add(Param.QUERY, personName); + parameters.add(Param.ADULT, includeAdult); + parameters.add(Param.PAGE, page); + + URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.PERSON).buildUrl(parameters); + String webpage = httpTools.getRequest(url); + + try { + WrapperPerson wrapper = MAPPER.readValue(webpage, WrapperPerson.class); + TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); + results.copyWrapper(wrapper); + return results; + } catch (IOException ex) { + throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to find person", url, ex); + } + } + + /** + * Search for lists by name and description. + * + * @param query + * @param language + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchList(String query, String language, int page) throws MovieDbException { + TmdbParameters parameters = new TmdbParameters(); + parameters.add(Param.QUERY, query); + parameters.add(Param.LANGUAGE, language); + parameters.add(Param.PAGE, page); + + URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.LIST).buildUrl(parameters); + String webpage = httpTools.getRequest(url); + + try { + WrapperMovieList wrapper = MAPPER.readValue(webpage, WrapperMovieList.class); + TmdbResultsList results = new TmdbResultsList(wrapper.getMovieList()); + results.copyWrapper(wrapper); + return results; + } catch (IOException ex) { + throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to find list", url, ex); + } + } + + /** + * Search Companies. + * + * You can use this method to search for production companies that are part of TMDb. The company IDs will map to those returned + * on movie calls. + * + * http://help.themoviedb.org/kb/api/search-companies + * + * @param companyName + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchCompanies(String companyName, int page) throws MovieDbException { + TmdbParameters parameters = new TmdbParameters(); + parameters.add(Param.QUERY, companyName); + parameters.add(Param.PAGE, page); + + URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.COMPANY).buildUrl(parameters); + String webpage = httpTools.getRequest(url); + + try { + WrapperCompany wrapper = MAPPER.readValue(webpage, WrapperCompany.class); + TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); + results.copyWrapper(wrapper); + return results; + } catch (IOException ex) { + throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to find company", url, ex); + } + } + + /** + * Search for keywords by name + * + * @param query + * @param page + * @return + * @throws MovieDbException + */ + public TmdbResultsList searchKeyword(String query, int page) throws MovieDbException { + TmdbParameters parameters = new TmdbParameters(); + parameters.add(Param.QUERY, query); + parameters.add(Param.PAGE, page); + + URL url = new ApiUrl(apiKey, MethodBase.SEARCH).setSubMethod(MethodSub.KEYWORD).buildUrl(parameters); + String webpage = httpTools.getRequest(url); + + try { + WrapperKeywords wrapper = MAPPER.readValue(webpage, WrapperKeywords.class); + TmdbResultsList results = new TmdbResultsList(wrapper.getResults()); + results.copyWrapper(wrapper); + return results; + } catch (IOException ex) { + throw new MovieDbException(ApiExceptionType.MAPPING_FAILED, "Failed to find keyword", url, ex); + } + } + }