Added Keyword and List functions

master
Omertron 13 years ago
parent f27f6f35fe
commit c275e71ab4

@ -21,50 +21,12 @@ package com.omertron.themoviedbapi;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.omertron.themoviedbapi.MovieDbException.MovieDbExceptionType; import com.omertron.themoviedbapi.MovieDbException.MovieDbExceptionType;
import com.omertron.themoviedbapi.model.AlternativeTitle; import com.omertron.themoviedbapi.model.*;
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.tools.ApiUrl; import com.omertron.themoviedbapi.tools.ApiUrl;
import static com.omertron.themoviedbapi.tools.ApiUrl.*; import static com.omertron.themoviedbapi.tools.ApiUrl.*;
import com.omertron.themoviedbapi.tools.FilteringLayout; import com.omertron.themoviedbapi.tools.FilteringLayout;
import com.omertron.themoviedbapi.tools.WebBrowser; import com.omertron.themoviedbapi.tools.WebBrowser;
import com.omertron.themoviedbapi.wrapper.WrapperAlternativeTitles; import com.omertron.themoviedbapi.wrapper.*;
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 java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
@ -74,9 +36,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
/** /**
* The MovieDb API * The MovieDb API <p> This is for version 3 of the API as specified here: http://help.themoviedb.org/kb/api/about-3
*<p>
* This is for version 3 of the API as specified here: http://help.themoviedb.org/kb/api/about-3
* *
* @author stuart.boston * @author stuart.boston
*/ */
@ -99,6 +59,8 @@ public class TheMovieDbApi {
private static final String BASE_COLLECTION = "collection/"; private static final String BASE_COLLECTION = "collection/";
// private static final String BASE_ACCOUNT = "account/"; // private static final String BASE_ACCOUNT = "account/";
private static final String BASE_SEARCH = "search/"; private static final String BASE_SEARCH = "search/";
private static final String BASE_LIST = "list/";
private static final String BASE_KEYWORD = "keyword/";
// Account // Account
/* /*
private final ApiUrl tmdbAccount = new ApiUrl(this, BASE_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. * 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 * 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
* a TMDb user account in the future. * 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 * There are also IP limits in place so you should always make sure it's the end user doing the guest session actions.
* actions.
* *
* If a guest session is not used for the first time within 24 hours, it will be automatically discarded. * 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. * 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 * These movies are returned in order of most recently released to oldest. The default response will return 20 movies per page.
* movies per page.
* *
* TODO: Implement more than 20 movies * TODO: Implement more than 20 movies
* *
@ -1399,8 +1359,8 @@ public class TheMovieDbApi {
/** /**
* Search Companies. * Search Companies.
* *
* You can use this method to search for production companies that are part of TMDb. The company IDs will map to * You can use this method to search for production companies that are part of TMDb. The company IDs will map to those returned
* those returned on movie calls. * on movie calls.
* *
* http://help.themoviedb.org/kb/api/search-companies * http://help.themoviedb.org/kb/api/search-companies
* *
@ -1458,6 +1418,93 @@ public class TheMovieDbApi {
} }
//</editor-fold> //</editor-fold>
// //
// List Functions //<editor-fold defaultstate="collapsed" desc="List Functions">
// Keywords 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.Keyword;
import com.omertron.themoviedbapi.model.MovieChanges; import com.omertron.themoviedbapi.model.MovieChanges;
import com.omertron.themoviedbapi.model.MovieDb; import com.omertron.themoviedbapi.model.MovieDb;
import com.omertron.themoviedbapi.model.MovieDbList;
import com.omertron.themoviedbapi.model.MovieList; import com.omertron.themoviedbapi.model.MovieList;
import com.omertron.themoviedbapi.model.Person; import com.omertron.themoviedbapi.model.Person;
import com.omertron.themoviedbapi.model.PersonCredit; import com.omertron.themoviedbapi.model.PersonCredit;
@ -66,6 +67,7 @@ public class TheMovieDbApiTest {
private static final int ID_COMPANY_LUCASFILM = 1; private static final int ID_COMPANY_LUCASFILM = 1;
private static final String COMPANY_NAME = "Marvel Studios"; private static final String COMPANY_NAME = "Marvel Studios";
private static final int ID_GENRE_ACTION = 28; private static final int ID_GENRE_ACTION = 28;
private static final String ID_KEYWORD = "1721";
public TheMovieDbApiTest() throws MovieDbException { public TheMovieDbApiTest() throws MovieDbException {
tmdb = new TheMovieDbApi(API_KEY); tmdb = new TheMovieDbApi(API_KEY);
@ -599,4 +601,66 @@ public class TheMovieDbApiTest {
assertFalse("No keywords found", result == null); assertFalse("No keywords found", result == null);
assertTrue("No keywords found", result.size() > 0); 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());
}
} }

Loading…
Cancel
Save