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 * For any reuse or distribution, you must make clear to others the
* license terms of this work. * license terms of this work.
*/ */
package com.moviejukebox.themoviedb; package com.moviejukebox.themoviedb;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.logging.ConsoleHandler; import java.util.logging.ConsoleHandler;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -43,11 +44,19 @@ import com.moviejukebox.themoviedb.tools.WebBrowser;
public class TheMovieDb { public class TheMovieDb {
private String apiKey; 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 Logger logger;
private static LogFormatter tmdbFormatter = new LogFormatter(); private static LogFormatter tmdbFormatter = new LogFormatter();
private static ConsoleHandler tmdbConsoleHandler = new ConsoleHandler(); 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) { public TheMovieDb(String apiKey) {
setLogger(Logger.getLogger("TheMovieDB")); setLogger(Logger.getLogger("TheMovieDB"));
@ -103,7 +112,13 @@ public class TheMovieDb {
* @return The search URL * @return The search URL
*/ */
private String buildSearchUrl(String prefix, String searchTerm, String language) { 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); logger.finest("Search URL: " + searchUrl);
return searchUrl; return searchUrl;
} }
@ -127,7 +142,90 @@ public class TheMovieDb {
Document doc = null; Document doc = null;
try { 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); doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie"); NodeList nlMovies = doc.getElementsByTagName("movie");
if (nlMovies == null) { if (nlMovies == null) {
@ -168,7 +266,7 @@ public class TheMovieDb {
Document doc = null; Document doc = null;
try { try {
String searchUrl = buildSearchUrl("Movie.imdbLookup", imdbID, language); String searchUrl = buildSearchUrl(MOVIE_IMDB_LOOKUP, imdbID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie"); NodeList nlMovies = doc.getElementsByTagName("movie");
@ -215,19 +313,20 @@ public class TheMovieDb {
*/ */
public MovieDB moviedbGetInfo(String tmdbID, MovieDB movie, String language) { public MovieDB moviedbGetInfo(String tmdbID, MovieDB movie, String language) {
// If the tmdbID is invalid, then exit // If the tmdbID is invalid, then exit
if (!isValidString(tmdbID)) if (!isValidString(tmdbID)) {
return movie; return movie;
}
Document doc = null; Document doc = null;
try { try {
String searchUrl = buildSearchUrl("Movie.getInfo", tmdbID, language); String searchUrl = buildSearchUrl(MOVIE_GET_INFO, tmdbID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
if (doc == null && !language.equalsIgnoreCase(defaultLanguage)) { if (doc == null && !language.equalsIgnoreCase(defaultLanguage)) {
logger.fine("Trying to get the default version"); logger.fine("Trying to get the default version");
Thread.dumpStack(); Thread.dumpStack();
searchUrl = buildSearchUrl("Movie.getInfo", tmdbID, defaultLanguage); searchUrl = buildSearchUrl(MOVIE_GET_INFO, tmdbID, defaultLanguage);
} }
if (doc == null) { if (doc == null) {
@ -267,13 +366,14 @@ public class TheMovieDb {
*/ */
public MovieDB moviedbGetImages(String searchTerm, MovieDB movie, String language) { public MovieDB moviedbGetImages(String searchTerm, MovieDB movie, String language) {
// If the searchTerm is null, then exit // If the searchTerm is null, then exit
if (isValidString(searchTerm)) if (isValidString(searchTerm)) {
return movie; return movie;
}
Document doc = null; Document doc = null;
try { try {
String searchUrl = buildSearchUrl("Movie.getImages", searchTerm, language); String searchUrl = buildSearchUrl(MOVIE_GET_IMAGES, searchTerm, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie"); NodeList nlMovies = doc.getElementsByTagName("movie");
@ -313,7 +413,7 @@ public class TheMovieDb {
Document doc = null; Document doc = null;
try { try {
String searchUrl = buildSearchUrl("Person.search", personName, language); String searchUrl = buildSearchUrl(PERSON_SEARCH, personName, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonInfo(doc); person = DOMParser.parsePersonInfo(doc);
} catch (Exception error) { } catch (Exception error) {
@ -340,7 +440,7 @@ public class TheMovieDb {
Document doc = null; Document doc = null;
try { try {
String searchUrl = buildSearchUrl("Person.getInfo", personID, language); String searchUrl = buildSearchUrl(PERSON_GET_INFO, personID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonInfo(doc); person = DOMParser.parsePersonInfo(doc);
} catch (Exception error) { } catch (Exception error) {
@ -368,7 +468,7 @@ public class TheMovieDb {
Document doc = null; Document doc = null;
try { try {
String searchUrl = buildSearchUrl("Person.getVersion", personID, language); String searchUrl = buildSearchUrl(PERSON_GET_VERSION, personID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonGetVersion(doc); person = DOMParser.parsePersonGetVersion(doc);
} catch (Exception error) { } catch (Exception error) {
@ -383,7 +483,7 @@ public class TheMovieDb {
* @param testString The string to test * @param testString The string to test
* @return False if the string is empty, null or UNKNOWN, True otherwise * @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) { if (testString == null) {
return false; return false;
} }
@ -428,6 +528,10 @@ public class TheMovieDb {
* @return True if there is a match, False otherwise. * @return True if there is a match, False otherwise.
*/ */
public static boolean compareMovies(MovieDB moviedb, String title, String year) { public static boolean compareMovies(MovieDB moviedb, String title, String year) {
if (moviedb == null) {
return false;
}
if (!isValidString(title)) { if (!isValidString(title)) {
return false; return false;
} }

Loading…
Cancel
Save