Added Keyword and List functions
This commit is contained in:
@@ -21,50 +21,12 @@ package com.omertron.themoviedbapi;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.omertron.themoviedbapi.MovieDbException.MovieDbExceptionType;
|
||||
import com.omertron.themoviedbapi.model.AlternativeTitle;
|
||||
import com.omertron.themoviedbapi.model.Artwork;
|
||||
import com.omertron.themoviedbapi.model.ArtworkType;
|
||||
import com.omertron.themoviedbapi.model.Collection;
|
||||
import com.omertron.themoviedbapi.model.CollectionInfo;
|
||||
import com.omertron.themoviedbapi.model.Company;
|
||||
import com.omertron.themoviedbapi.model.Genre;
|
||||
import com.omertron.themoviedbapi.model.Keyword;
|
||||
import com.omertron.themoviedbapi.model.MovieChanges;
|
||||
import com.omertron.themoviedbapi.model.MovieDb;
|
||||
import com.omertron.themoviedbapi.model.MovieList;
|
||||
import com.omertron.themoviedbapi.model.Person;
|
||||
import com.omertron.themoviedbapi.model.PersonCast;
|
||||
import com.omertron.themoviedbapi.model.PersonCredit;
|
||||
import com.omertron.themoviedbapi.model.PersonCrew;
|
||||
import com.omertron.themoviedbapi.model.PersonType;
|
||||
import com.omertron.themoviedbapi.model.ReleaseInfo;
|
||||
import com.omertron.themoviedbapi.model.TmdbConfiguration;
|
||||
import com.omertron.themoviedbapi.model.TokenAuthorisation;
|
||||
import com.omertron.themoviedbapi.model.TokenSession;
|
||||
import com.omertron.themoviedbapi.model.Trailer;
|
||||
import com.omertron.themoviedbapi.model.Translation;
|
||||
import com.omertron.themoviedbapi.model.*;
|
||||
import com.omertron.themoviedbapi.tools.ApiUrl;
|
||||
import static com.omertron.themoviedbapi.tools.ApiUrl.*;
|
||||
import com.omertron.themoviedbapi.tools.FilteringLayout;
|
||||
import com.omertron.themoviedbapi.tools.WebBrowser;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperAlternativeTitles;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperChanges;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperCollection;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperCompany;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperCompanyMovies;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperConfig;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperGenres;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperImages;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperKeywords;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperMovie;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperMovieCasts;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperMovieKeywords;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperMovieList;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperPerson;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperPersonCredits;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperReleaseInfo;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperTrailers;
|
||||
import com.omertron.themoviedbapi.wrapper.WrapperTranslations;
|
||||
import com.omertron.themoviedbapi.wrapper.*;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
@@ -74,9 +36,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* The MovieDb API
|
||||
*<p>
|
||||
* This is for version 3 of the API as specified here: http://help.themoviedb.org/kb/api/about-3
|
||||
* The MovieDb API <p> This is for version 3 of the API as specified here: http://help.themoviedb.org/kb/api/about-3
|
||||
*
|
||||
* @author stuart.boston
|
||||
*/
|
||||
@@ -99,6 +59,8 @@ public class TheMovieDbApi {
|
||||
private static final String BASE_COLLECTION = "collection/";
|
||||
// private static final String BASE_ACCOUNT = "account/";
|
||||
private static final String BASE_SEARCH = "search/";
|
||||
private static final String BASE_LIST = "list/";
|
||||
private static final String BASE_KEYWORD = "keyword/";
|
||||
// Account
|
||||
/*
|
||||
private final ApiUrl tmdbAccount = new ApiUrl(this, BASE_ACCOUNT);
|
||||
@@ -332,11 +294,10 @@ public class TheMovieDbApi {
|
||||
*
|
||||
* A guest session can be used to rate movies without having a registered TMDb user account.
|
||||
*
|
||||
* You should only generate a single guest session per user (or device) as you will be able to attach the ratings to
|
||||
* a TMDb user account in the future.
|
||||
* You should only generate a single guest session per user (or device) as you will be able to attach the ratings to a TMDb user
|
||||
* account in the future.
|
||||
*
|
||||
* There are also IP limits in place so you should always make sure it's the end user doing the guest session
|
||||
* actions.
|
||||
* There are also IP limits in place so you should always make sure it's the end user doing the guest session actions.
|
||||
*
|
||||
* If a guest session is not used for the first time within 24 hours, it will be automatically discarded.
|
||||
*
|
||||
@@ -1153,8 +1114,7 @@ public class TheMovieDbApi {
|
||||
/**
|
||||
* This method is used to retrieve the movies associated with a company.
|
||||
*
|
||||
* These movies are returned in order of most recently released to oldest. The default response will return 20
|
||||
* movies per page.
|
||||
* These movies are returned in order of most recently released to oldest. The default response will return 20 movies per page.
|
||||
*
|
||||
* TODO: Implement more than 20 movies
|
||||
*
|
||||
@@ -1399,8 +1359,8 @@ public class TheMovieDbApi {
|
||||
/**
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
@@ -1458,6 +1418,93 @@ public class TheMovieDbApi {
|
||||
}
|
||||
//</editor-fold>
|
||||
//
|
||||
// List Functions
|
||||
// Keywords Functions
|
||||
//<editor-fold defaultstate="collapsed" desc="List Functions">
|
||||
|
||||
/**
|
||||
* Get a list by its ID
|
||||
*
|
||||
* @param listId
|
||||
* @return The list and its items
|
||||
* @throws MovieDbException
|
||||
*/
|
||||
public MovieDbList getList(String listId) throws MovieDbException {
|
||||
ApiUrl apiUrl = new ApiUrl(this, BASE_LIST);
|
||||
apiUrl.addArgument(PARAM_ID, listId);
|
||||
|
||||
URL url = apiUrl.buildUrl();
|
||||
String webpage = WebBrowser.request(url);
|
||||
|
||||
try {
|
||||
MovieDbList movieDbList = mapper.readValue(webpage, MovieDbList.class);
|
||||
return movieDbList;
|
||||
} catch (IOException ex) {
|
||||
logger.warn("Failed to get list: " + ex.getMessage());
|
||||
throw new MovieDbException(MovieDbExceptionType.MAPPING_FAILED, webpage, ex);
|
||||
}
|
||||
}
|
||||
//</editor-fold>
|
||||
//
|
||||
//<editor-fold defaultstate="collapsed" desc="Keyword Functions">
|
||||
|
||||
/**
|
||||
* Get the basic information for a specific keyword id.
|
||||
*
|
||||
* @param keywordId
|
||||
* @return
|
||||
* @throws MovieDbException
|
||||
*/
|
||||
public Keyword getKeyword(String keywordId) throws MovieDbException {
|
||||
ApiUrl apiUrl = new ApiUrl(this, BASE_KEYWORD);
|
||||
apiUrl.addArgument(PARAM_ID, keywordId);
|
||||
|
||||
URL url = apiUrl.buildUrl();
|
||||
String webpage = WebBrowser.request(url);
|
||||
|
||||
try {
|
||||
Keyword keyword = mapper.readValue(webpage, Keyword.class);
|
||||
return keyword;
|
||||
} catch (IOException ex) {
|
||||
logger.warn("Failed to get keyword: " + ex.getMessage());
|
||||
throw new MovieDbException(MovieDbExceptionType.MAPPING_FAILED, webpage, ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of movies for a particular keyword by id.
|
||||
*
|
||||
* @param keywordId
|
||||
* @param language
|
||||
* @param page
|
||||
* @return List of movies with the keyword
|
||||
* @throws MovieDbException
|
||||
*/
|
||||
public List<MovieList> getKeywordMovies(String keywordId, String language, int page) throws MovieDbException {
|
||||
ApiUrl apiUrl = new ApiUrl(this, BASE_KEYWORD, "/movies");
|
||||
apiUrl.addArgument(PARAM_ID, keywordId);
|
||||
|
||||
if (StringUtils.isNotBlank(language)) {
|
||||
apiUrl.addArgument(PARAM_LANGUAGE, language);
|
||||
}
|
||||
|
||||
if (page > 0) {
|
||||
apiUrl.addArgument(PARAM_PAGE, page);
|
||||
}
|
||||
|
||||
URL url = apiUrl.buildUrl();
|
||||
String webpage = WebBrowser.request(url);
|
||||
|
||||
try {
|
||||
WrapperMovieList wrapper = mapper.readValue(webpage, WrapperMovieList.class);
|
||||
return wrapper.getMovieList();
|
||||
} catch (IOException ex) {
|
||||
logger.warn("Failed to get top rated movies: " + ex.getMessage());
|
||||
throw new MovieDbException(MovieDbExceptionType.MAPPING_FAILED, webpage, ex);
|
||||
}
|
||||
|
||||
}
|
||||
//</editor-fold>
|
||||
//
|
||||
//<editor-fold defaultstate="collapsed" desc="Changes Functions">
|
||||
//</editor-fold>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2013 Stuart Boston
|
||||
*
|
||||
* This file is part of TheMovieDB API.
|
||||
*
|
||||
* TheMovieDB API is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* TheMovieDB API is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with TheMovieDB API. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.omertron.themoviedbapi.model;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonAnySetter;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
/**
|
||||
* Wrapper for the MovieDbList function
|
||||
* @author stuart.boston
|
||||
*/
|
||||
public class MovieDbList {
|
||||
/*
|
||||
* Logger
|
||||
*/
|
||||
|
||||
private static final Logger logger = Logger.getLogger(MovieDbList.class);
|
||||
/*
|
||||
* Properties
|
||||
*/
|
||||
@JsonProperty("id")
|
||||
private String id;
|
||||
@JsonProperty("created_by")
|
||||
private String createdBy;
|
||||
@JsonProperty("description")
|
||||
private String description;
|
||||
@JsonProperty("favorite_count")
|
||||
private int favoriteCount;
|
||||
@JsonProperty("items")
|
||||
private List<MovieDb> items = Collections.EMPTY_LIST;
|
||||
@JsonProperty("item_count")
|
||||
private int itemCount;
|
||||
@JsonProperty("iso_639_1")
|
||||
private String language;
|
||||
@JsonProperty("name")
|
||||
private String name;
|
||||
@JsonProperty("poster_path")
|
||||
private String posterPath;
|
||||
|
||||
//<editor-fold defaultstate="collapsed" desc="Getter Methods">
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getCreatedBy() {
|
||||
return createdBy;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public int getFavoriteCount() {
|
||||
return favoriteCount;
|
||||
}
|
||||
|
||||
public List<MovieDb> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
public int getItemCount() {
|
||||
return itemCount;
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
return language;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getPosterPath() {
|
||||
return posterPath;
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
//<editor-fold defaultstate="collapsed" desc="Setter Methods">
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public void setCreatedBy(String createdBy) {
|
||||
this.createdBy = createdBy;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public void setFavoriteCount(int favoriteCount) {
|
||||
this.favoriteCount = favoriteCount;
|
||||
}
|
||||
|
||||
public void setItems(List<MovieDb> items) {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
public void setItemCount(int itemCount) {
|
||||
this.itemCount = itemCount;
|
||||
}
|
||||
|
||||
public void setLanguage(String language) {
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setPosterPath(String posterPath) {
|
||||
this.posterPath = posterPath;
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
/**
|
||||
* Handle unknown properties and print a message
|
||||
*
|
||||
* @param key
|
||||
* @param value
|
||||
*/
|
||||
@JsonAnySetter
|
||||
public void handleUnknown(String key, Object value) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Unknown property: '").append(key);
|
||||
sb.append("' value: '").append(value).append("'");
|
||||
logger.trace(sb.toString());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -28,6 +28,7 @@ import com.omertron.themoviedbapi.model.Genre;
|
||||
import com.omertron.themoviedbapi.model.Keyword;
|
||||
import com.omertron.themoviedbapi.model.MovieChanges;
|
||||
import com.omertron.themoviedbapi.model.MovieDb;
|
||||
import com.omertron.themoviedbapi.model.MovieDbList;
|
||||
import com.omertron.themoviedbapi.model.MovieList;
|
||||
import com.omertron.themoviedbapi.model.Person;
|
||||
import com.omertron.themoviedbapi.model.PersonCredit;
|
||||
@@ -66,6 +67,7 @@ public class TheMovieDbApiTest {
|
||||
private static final int ID_COMPANY_LUCASFILM = 1;
|
||||
private static final String COMPANY_NAME = "Marvel Studios";
|
||||
private static final int ID_GENRE_ACTION = 28;
|
||||
private static final String ID_KEYWORD = "1721";
|
||||
|
||||
public TheMovieDbApiTest() throws MovieDbException {
|
||||
tmdb = new TheMovieDbApi(API_KEY);
|
||||
@@ -599,4 +601,66 @@ public class TheMovieDbApiTest {
|
||||
assertFalse("No keywords found", result == null);
|
||||
assertTrue("No keywords found", result.size() > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of postMovieRating method, of class TheMovieDbApi.
|
||||
*/
|
||||
@Test
|
||||
public void testPostMovieRating() throws Exception {
|
||||
logger.info("postMovieRating");
|
||||
String sessionId = "";
|
||||
String rating = "";
|
||||
boolean expResult = false;
|
||||
boolean result = tmdb.postMovieRating(sessionId, rating);
|
||||
assertEquals(expResult, result);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getPersonChanges method, of class TheMovieDbApi.
|
||||
*/
|
||||
@Test
|
||||
public void testGetPersonChanges() throws Exception {
|
||||
logger.info("getPersonChanges");
|
||||
int personId = 0;
|
||||
String startDate = "";
|
||||
String endDate = "";
|
||||
tmdb.getPersonChanges(personId, startDate, endDate);
|
||||
// TODO review the generated test code and remove the default call to fail.
|
||||
fail("The test case is a prototype.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getList method, of class TheMovieDbApi.
|
||||
*/
|
||||
@Test
|
||||
public void testGetList() throws Exception {
|
||||
logger.info("getList");
|
||||
String listId = "509ec17b19c2950a0600050d";
|
||||
MovieDbList result = tmdb.getList(listId);
|
||||
assertFalse("List not found", result.getItems().isEmpty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getKeyword method, of class TheMovieDbApi.
|
||||
*/
|
||||
@Test
|
||||
public void testGetKeyword() throws Exception {
|
||||
logger.info("getKeyword");
|
||||
Keyword result = tmdb.getKeyword(ID_KEYWORD);
|
||||
assertEquals("fight", result.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test of getKeywordMovies method, of class TheMovieDbApi.
|
||||
*/
|
||||
@Test
|
||||
public void testGetKeywordMovies() throws Exception {
|
||||
logger.info("getKeywordMovies");
|
||||
String language = "";
|
||||
int page = 0;
|
||||
List<MovieList> result = tmdb.getKeywordMovies(ID_KEYWORD, language, page);
|
||||
assertFalse("No keyword movies found", result.isEmpty());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user