added moviedbBrowse in TheMovieDb

modified buildSearchUrl to handle Movie.browse specific url
added constants in TheMovieDb
made isValidString method private
made apiSite and defaultLanguage private
master
Mohammed Le Doze 15 years ago
parent 56213d09ad
commit a4009be32f

@ -10,13 +10,14 @@
* For any reuse or distribution, you must make clear to others the
* license terms of this work.
*/
package com.moviejukebox.themoviedb;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -43,11 +44,19 @@ import com.moviejukebox.themoviedb.tools.WebBrowser;
public class TheMovieDb {
private String apiKey;
private static String apiSite = "http://api.themoviedb.org/2.1/";
private static String defaultLanguage = "en-US";
private static Logger logger;
private static LogFormatter tmdbFormatter = new LogFormatter();
private static ConsoleHandler tmdbConsoleHandler = new ConsoleHandler();
private static final String apiSite = "http://api.themoviedb.org/2.1/";
private static final String defaultLanguage = "en-US";
private static final String MOVIE_SEARCH = "Movie.search";
private static final String MOVIE_BROWSE = "Movie.browse";
private static final String MOVIE_IMDB_LOOKUP = "Movie.imdbLookup";
private static final String MOVIE_GET_INFO = "Movie.getInfo";
private static final String MOVIE_GET_IMAGES = "Movie.getImages";
private static final String PERSON_GET_VERSION = "Person.getVersion";
private static final String PERSON_GET_INFO = "Person.getInfo";
private static final String PERSON_SEARCH = "Person.search";
public TheMovieDb(String apiKey) {
setLogger(Logger.getLogger("TheMovieDB"));
@ -103,7 +112,13 @@ public class TheMovieDb {
* @return The search URL
*/
private String buildSearchUrl(String prefix, String searchTerm, String language) {
String searchUrl = apiSite + prefix + "/" + language + "/xml/" + apiKey + "/" + searchTerm;
String searchUrl = apiSite + prefix + "/" + language + "/xml/" + apiKey;
if (prefix.equals(MOVIE_BROWSE)) {
searchUrl += "?";
} else {
searchUrl += "/";
}
searchUrl += searchTerm;
logger.finest("Search URL: " + searchUrl);
return searchUrl;
}
@ -127,7 +142,90 @@ public class TheMovieDb {
Document doc = null;
try {
String searchUrl = buildSearchUrl("Movie.search", URLEncoder.encode(movieTitle, "UTF-8"), language);
String searchUrl = buildSearchUrl(MOVIE_SEARCH, URLEncoder.encode(movieTitle, "UTF-8"), language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie");
if (nlMovies == null) {
return movieList;
}
for (int loop = 0; loop < nlMovies.getLength(); loop++) {
Node nMovie = nlMovies.item(loop);
if (nMovie.getNodeType() == Node.ELEMENT_NODE) {
Element eMovie = (Element) nMovie;
movie = DOMParser.parseMovieInfo(eMovie);
if (movie != null) {
movieList.add(movie);
}
}
}
} catch (Exception error) {
logger.severe("TheMovieDb Error: " + error.getMessage());
}
return movieList;
}
/**
* Browse the database using the default parameters.
* http://api.themoviedb.org/2.1/methods/Movie.browse
*
* @param orderBy either <code>rating</code>,
* <code>release</code> or <code>title</code>
* @param order how results are ordered. Either <code>asc</code> or
* <code>desc</code>
* @param language the two digit language code. E.g. en=English
* @return a list of MovieDB objects
*/
public List<MovieDB> moviedbBrowse(String orderBy, String order, String language) {
return this.moviedbBrowse(orderBy, order, new HashMap<String, String>(), language);
}
/**
* Browse the database using optional parameters.
* http://api.themoviedb.org/2.1/methods/Movie.browse
*
* @param orderBy either <code>rating</code>,
* <code>release</code> or <code>title</code>
* @param order how results are ordered. Either <code>asc</code> or
* <code>desc</code>
* @param parameters a Map of optional parameters. See the complete list
* in the url above.
* @param language the two digit language code. E.g. en=English
* @return a list of MovieDB objects
*/
public List<MovieDB> moviedbBrowse(String orderBy, String order,
Map<String, String> parameters, String language) {
List<String> validParameters = new ArrayList<String>();
validParameters.add("per_page");
validParameters.add("page");
validParameters.add("query");
validParameters.add("min_votes");
validParameters.add("rating_min");
validParameters.add("rating_max");
validParameters.add("genres");
validParameters.add("genres_selector");
validParameters.add("release_min");
validParameters.add("release_max");
validParameters.add("year");
validParameters.add("certifications");
validParameters.add("companies");
validParameters.add("countries");
String url = "order_by=" + orderBy + "&order=" + order;
for (String key : validParameters) {
if (parameters.containsKey(key)) {
url += "&" + key + "=" + parameters.get(key);
}
}
logger.finest("Browse URL : " + url);
MovieDB movie = null;
List<MovieDB> movieList = new ArrayList<MovieDB>();
Document doc = null;
try {
String searchUrl = buildSearchUrl(MOVIE_BROWSE, url, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie");
if (nlMovies == null) {
@ -168,7 +266,7 @@ public class TheMovieDb {
Document doc = null;
try {
String searchUrl = buildSearchUrl("Movie.imdbLookup", imdbID, language);
String searchUrl = buildSearchUrl(MOVIE_IMDB_LOOKUP, imdbID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie");
@ -215,19 +313,20 @@ public class TheMovieDb {
*/
public MovieDB moviedbGetInfo(String tmdbID, MovieDB movie, String language) {
// If the tmdbID is invalid, then exit
if (!isValidString(tmdbID))
if (!isValidString(tmdbID)) {
return movie;
}
Document doc = null;
try {
String searchUrl = buildSearchUrl("Movie.getInfo", tmdbID, language);
String searchUrl = buildSearchUrl(MOVIE_GET_INFO, tmdbID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
if (doc == null && !language.equalsIgnoreCase(defaultLanguage)) {
logger.fine("Trying to get the default version");
Thread.dumpStack();
searchUrl = buildSearchUrl("Movie.getInfo", tmdbID, defaultLanguage);
searchUrl = buildSearchUrl(MOVIE_GET_INFO, tmdbID, defaultLanguage);
}
if (doc == null) {
@ -267,13 +366,14 @@ public class TheMovieDb {
*/
public MovieDB moviedbGetImages(String searchTerm, MovieDB movie, String language) {
// If the searchTerm is null, then exit
if (isValidString(searchTerm))
if (isValidString(searchTerm)) {
return movie;
}
Document doc = null;
try {
String searchUrl = buildSearchUrl("Movie.getImages", searchTerm, language);
String searchUrl = buildSearchUrl(MOVIE_GET_IMAGES, searchTerm, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie");
@ -313,7 +413,7 @@ public class TheMovieDb {
Document doc = null;
try {
String searchUrl = buildSearchUrl("Person.search", personName, language);
String searchUrl = buildSearchUrl(PERSON_SEARCH, personName, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonInfo(doc);
} catch (Exception error) {
@ -340,7 +440,7 @@ public class TheMovieDb {
Document doc = null;
try {
String searchUrl = buildSearchUrl("Person.getInfo", personID, language);
String searchUrl = buildSearchUrl(PERSON_GET_INFO, personID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonInfo(doc);
} catch (Exception error) {
@ -368,7 +468,7 @@ public class TheMovieDb {
Document doc = null;
try {
String searchUrl = buildSearchUrl("Person.getVersion", personID, language);
String searchUrl = buildSearchUrl(PERSON_GET_VERSION, personID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonGetVersion(doc);
} catch (Exception error) {
@ -383,7 +483,7 @@ public class TheMovieDb {
* @param testString The string to test
* @return False if the string is empty, null or UNKNOWN, True otherwise
*/
public static boolean isValidString(String testString) {
private static boolean isValidString(String testString) {
if (testString == null) {
return false;
}
@ -428,6 +528,10 @@ public class TheMovieDb {
* @return True if there is a match, False otherwise.
*/
public static boolean compareMovies(MovieDB moviedb, String title, String year) {
if (moviedb == null) {
return false;
}
if (!isValidString(title)) {
return false;
}

Loading…
Cancel
Save