Moved all parsing code into the MovieDbParser class

master
Omertron 15 years ago
parent a04060b96b
commit 5144d99f3a

@ -13,6 +13,8 @@
package com.moviejukebox.themoviedb; package com.moviejukebox.themoviedb;
import com.moviejukebox.themoviedb.model.Category; import com.moviejukebox.themoviedb.model.Category;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -23,12 +25,9 @@ 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;
import org.w3c.dom.Document;
import com.moviejukebox.themoviedb.model.MovieDB; import com.moviejukebox.themoviedb.model.MovieDB;
import com.moviejukebox.themoviedb.model.Person; import com.moviejukebox.themoviedb.model.Person;
import com.moviejukebox.themoviedb.tools.DOMHelper; import com.moviejukebox.themoviedb.tools.MovieDbParser;
import com.moviejukebox.themoviedb.tools.DOMParser;
import com.moviejukebox.themoviedb.tools.LogFormatter; import com.moviejukebox.themoviedb.tools.LogFormatter;
import com.moviejukebox.themoviedb.tools.WebBrowser; import com.moviejukebox.themoviedb.tools.WebBrowser;
import java.util.Arrays; import java.util.Arrays;
@ -122,16 +121,8 @@ public class TheMovieDb {
return movies; return movies;
} }
Document doc = null; String searchUrl = buildUrl(MOVIE_SEARCH, movieTitle, language);
return MovieDbParser.parseMovies(searchUrl);
try {
String searchUrl = buildUrl(MOVIE_SEARCH, URLEncoder.encode(movieTitle, "UTF-8"), language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
movies = DOMParser.parseMovies(doc);
} catch (Exception error) {
logger.severe("TheMovieDb Error: " + error.getMessage());
}
return movies;
} }
/** /**
@ -193,16 +184,9 @@ public class TheMovieDb {
} }
} }
Document doc = null;
String searchUrl = buildUrl(MOVIE_BROWSE, url, language); String searchUrl = buildUrl(MOVIE_BROWSE, url, language);
try { return MovieDbParser.parseMovies(searchUrl);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
} catch (Exception error) {
logger.severe("Browse error: " + error.getMessage());
}
movies = DOMParser.parseMovies(doc);
return movies;
} }
/** /**
@ -220,17 +204,8 @@ public class TheMovieDb {
return movie; return movie;
} }
Document doc = null; String searchUrl = buildUrl(MOVIE_IMDB_LOOKUP, imdbID, language);
return MovieDbParser.parseMovie(searchUrl);
try {
String searchUrl = buildUrl(MOVIE_IMDB_LOOKUP, imdbID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
movie = DOMParser.parseMovie(doc);
} catch (Exception error) {
logger.severe("ImdbLookup error: " + error.getMessage());
}
return movie;
} }
/** /**
@ -262,27 +237,16 @@ public class TheMovieDb {
if (!isValidString(tmdbID)) { if (!isValidString(tmdbID)) {
return movie; return movie;
} }
Document doc = null; String searchUrl = buildUrl(MOVIE_GET_INFO, tmdbID, language);
movie = MovieDbParser.parseMovie(searchUrl);
try {
String searchUrl = buildUrl(MOVIE_GET_INFO, tmdbID, language); if (movie == null && !language.equalsIgnoreCase(defaultLanguage)) {
logger.fine("Trying to get the '" + defaultLanguage + "' version");
doc = DOMHelper.getEventDocFromUrl(searchUrl); searchUrl = buildUrl(MOVIE_GET_INFO, tmdbID, defaultLanguage);
if (doc == null && !language.equalsIgnoreCase(defaultLanguage)) { movie = MovieDbParser.parseMovie(searchUrl);
logger.fine("Trying to get the '" + defaultLanguage + "' version");
searchUrl = buildUrl(MOVIE_GET_INFO, tmdbID, defaultLanguage);
}
if (doc == null) {
return movie;
}
movie = DOMParser.parseMovie(doc);
} catch (Exception error) {
logger.severe("GetInfo error: " + error.getMessage());
error.printStackTrace();
} }
return movie; return movie;
} }
@ -296,16 +260,8 @@ public class TheMovieDb {
* @return * @return
*/ */
public MovieDB moviedbGetLatest(String language) { public MovieDB moviedbGetLatest(String language) {
Document doc = null; String url = buildUrl(MOVIE_GET_LATEST, "", language);
MovieDB movie = new MovieDB(); return MovieDbParser.parseLatestMovie(url);
try {
String url = buildUrl(MOVIE_GET_LATEST, "", language);
doc = DOMHelper.getEventDocFromUrl(url);
movie = DOMParser.parseLatestMovie(doc);
} catch (Exception error) {
logger.severe("GetLatest error: " + error.getMessage());
}
return movie;
} }
public MovieDB moviedbGetImages(String searchTerm, String language) { public MovieDB moviedbGetImages(String searchTerm, String language) {
@ -325,19 +281,8 @@ public class TheMovieDb {
return movie; return movie;
} }
Document doc = null; String searchUrl = buildUrl(MOVIE_GET_IMAGES, searchTerm, language);
return MovieDbParser.parseMovie(searchUrl);
try {
String searchUrl = buildUrl(MOVIE_GET_IMAGES, searchTerm, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
movie = DOMParser.parseMovie(doc);
} catch (Exception error) {
logger.severe("GetImages Error: " + error.getMessage());
}
return movie;
} }
/** /**
@ -349,22 +294,12 @@ public class TheMovieDb {
* @return * @return
*/ */
public Person personSearch(String personName, String language) { public Person personSearch(String personName, String language) {
Person person = new Person();
if (!isValidString(personName)) { if (!isValidString(personName)) {
return person; return new Person();
}
Document doc = null;
try {
String searchUrl = buildUrl(PERSON_SEARCH, personName, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonInfo(doc);
} catch (Exception error) {
logger.severe("PersonSearch error: " + error.getMessage());
} }
return person; String searchUrl = buildUrl(PERSON_SEARCH, personName, language);
return MovieDbParser.parsePersonInfo(searchUrl);
} }
/** /**
@ -381,17 +316,8 @@ public class TheMovieDb {
return person; return person;
} }
Document doc = null; String searchUrl = buildUrl(PERSON_GET_INFO, personID, language);
return MovieDbParser.parsePersonInfo(searchUrl);
try {
String searchUrl = buildUrl(PERSON_GET_INFO, personID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
person = DOMParser.parsePersonInfo(doc);
} catch (Exception error) {
logger.severe("PersonGetInfo error: " + error.getMessage());
}
return person;
} }
/** /**
@ -434,17 +360,8 @@ public class TheMovieDb {
ids += "," + personIDs.get(i); ids += "," + personIDs.get(i);
} }
Document doc = null; String searchUrl = buildUrl(PERSON_GET_VERSION, ids, language);
return MovieDbParser.parsePersonGetVersion(searchUrl);
try {
String searchUrl = buildUrl(PERSON_GET_VERSION, ids, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl);
people = DOMParser.parsePersonGetVersion(doc);
} catch (Exception error) {
logger.severe("PersonGetVersion error: " + error.getMessage());
}
return people;
} }
/** /**
@ -453,18 +370,8 @@ public class TheMovieDb {
* @return * @return
*/ */
public List<Category> getCategories(String language) { public List<Category> getCategories(String language) {
List<Category> categories = new ArrayList<Category>(); String searchUrl = this.buildUrl(GENRES_GET_LIST, "", language);
Document doc = null; return MovieDbParser.parseCategories(searchUrl);
String url = this.buildUrl(GENRES_GET_LIST, "", language);
try {
doc = DOMHelper.getEventDocFromUrl(url);
categories = DOMParser.parseCategories(doc);
} catch (Exception error) {
logger.severe("Get categories error: " + error.getMessage());
}
return categories;
} }
/** /**
@ -547,15 +454,27 @@ public class TheMovieDb {
*/ */
private String buildUrl(String prefix, String searchTerm, String language) { private String buildUrl(String prefix, String searchTerm, String language) {
String url = apiSite + prefix + "/" + language + "/xml/" + apiKey; String url = apiSite + prefix + "/" + language + "/xml/" + apiKey;
if (searchTerm.equals("")) {
if (!isValidString(searchTerm)) {
return url; return url;
} }
String encodedSearchTerm;
try {
encodedSearchTerm = URLEncoder.encode(searchTerm, "UTF-8");
} catch (UnsupportedEncodingException e) {
encodedSearchTerm = searchTerm;
}
if (prefix.equals(MOVIE_BROWSE)) { if (prefix.equals(MOVIE_BROWSE)) {
url += "?"; url += "?";
} else { } else {
url += "/"; url += "/";
} }
url += searchTerm;
url += encodedSearchTerm;
logger.finest("Search URL: " + url); logger.finest("Search URL: " + url);
return url; return url;
} }

@ -30,7 +30,7 @@ import com.moviejukebox.themoviedb.model.MovieDB;
import com.moviejukebox.themoviedb.model.Person; import com.moviejukebox.themoviedb.model.Person;
import com.moviejukebox.themoviedb.model.Studio; import com.moviejukebox.themoviedb.model.Studio;
public class DOMParser { public class MovieDbParser {
static Logger logger = TheMovieDb.getLogger(); static Logger logger = TheMovieDb.getLogger();
@ -40,9 +40,24 @@ public class DOMParser {
* @param doc DOM Document * @param doc DOM Document
* @return * @return
*/ */
public static List<MovieDB> parseMovies(Document doc) { public static List<MovieDB> parseMovies(String searchUrl) {
List<MovieDB> movies = new ArrayList<MovieDB>(); List<MovieDB> movies = new ArrayList<MovieDB>();
Document doc = null;
try {
doc = DOMHelper.getEventDocFromUrl(searchUrl);
} catch (Exception error) {
logger.severe("TheMovieDb Error: " + error.getMessage());
return movies;
}
if (doc == null) {
return movies;
}
NodeList nlMovies = doc.getElementsByTagName("movie"); NodeList nlMovies = doc.getElementsByTagName("movie");
if ((nlMovies == null) || nlMovies.getLength() == 0) { if ((nlMovies == null) || nlMovies.getLength() == 0) {
return movies; return movies;
} }
@ -53,7 +68,7 @@ public class DOMParser {
Node movieNode = nlMovies.item(i); Node movieNode = nlMovies.item(i);
if (movieNode.getNodeType() == Node.ELEMENT_NODE) { if (movieNode.getNodeType() == Node.ELEMENT_NODE) {
Element movieElement = (Element) movieNode; Element movieElement = (Element) movieNode;
movie = DOMParser.parseMovieInfo(movieElement); movie = parseMovieInfo(movieElement);
if (movie != null) { if (movie != null) {
movies.add(movie); movies.add(movie);
} }
@ -67,8 +82,21 @@ public class DOMParser {
* @param doc a DOM Document * @param doc a DOM Document
* @return * @return
*/ */
public static MovieDB parseMovie(Document doc) { public static MovieDB parseMovie(String searchUrl) {
MovieDB movie = new MovieDB(); MovieDB movie = null;
Document doc = null;
try {
doc = DOMHelper.getEventDocFromUrl(searchUrl);
} catch (Exception error) {
logger.severe("TheMovieDb Error: " + error.getMessage());
return movie;
}
if (doc == null) {
return movie;
}
NodeList nlMovies = doc.getElementsByTagName("movie"); NodeList nlMovies = doc.getElementsByTagName("movie");
if ((nlMovies == null) || nlMovies.getLength() == 0) { if ((nlMovies == null) || nlMovies.getLength() == 0) {
return movie; return movie;
@ -77,15 +105,27 @@ public class DOMParser {
Node nMovie = nlMovies.item(0); Node nMovie = nlMovies.item(0);
if (nMovie.getNodeType() == Node.ELEMENT_NODE) { if (nMovie.getNodeType() == Node.ELEMENT_NODE) {
Element eMovie = (Element) nMovie; Element eMovie = (Element) nMovie;
movie = DOMParser.parseMovieInfo(eMovie); movie = parseMovieInfo(eMovie);
} }
return movie; return movie;
} }
public static Person parsePersonInfo(Document doc) { public static Person parsePersonInfo(String searchUrl) {
Person person = null; Person person = null;
Document doc = null;
try {
doc = DOMHelper.getEventDocFromUrl(searchUrl);
} catch (Exception error) {
logger.severe("PersonSearch error: " + error.getMessage());
return person;
}
if (doc == null) {
return person;
}
try { try {
person = new Person(); person = new Person();
NodeList personNodeList = doc.getElementsByTagName("person"); NodeList personNodeList = doc.getElementsByTagName("person");
@ -375,8 +415,21 @@ public class DOMParser {
* @param doc a DOM document * @param doc a DOM document
* @return * @return
*/ */
public static List<Person> parsePersonGetVersion(Document doc) { public static List<Person> parsePersonGetVersion(String searchUrl) {
List<Person> people = new ArrayList<Person>(); List<Person> people = new ArrayList<Person>();
Document doc = null;
try {
doc = DOMHelper.getEventDocFromUrl(searchUrl);
} catch (Exception error) {
logger.severe("PersonGetVersion error: " + error.getMessage());
return people;
}
if (doc == null) {
return people;
}
NodeList movies = doc.getElementsByTagName("movie"); NodeList movies = doc.getElementsByTagName("movie");
if ((movies == null) || movies.getLength() == 0) { if ((movies == null) || movies.getLength() == 0) {
return people; return people;
@ -403,8 +456,20 @@ public class DOMParser {
* @param doc a DOM document * @param doc a DOM document
* @return * @return
*/ */
public static List<Category> parseCategories(Document doc) { public static List<Category> parseCategories(String searchUrl) {
Document doc = null;
List<Category> categories = new ArrayList<Category>(); List<Category> categories = new ArrayList<Category>();
try {
doc = DOMHelper.getEventDocFromUrl(searchUrl);
} catch (Exception error) {
return categories;
}
if (doc == null) {
return categories;
}
NodeList genres = doc.getElementsByTagName("genre"); NodeList genres = doc.getElementsByTagName("genre");
if ((genres == null) || genres.getLength() == 0) { if ((genres == null) || genres.getLength() == 0) {
return categories; return categories;
@ -431,15 +496,31 @@ public class DOMParser {
* @param doc * @param doc
* @return * @return
*/ */
public static MovieDB parseLatestMovie(Document doc) { public static MovieDB parseLatestMovie(String searchUrl) {
MovieDB movie = new MovieDB(); MovieDB movie = null;
NodeList movies = doc.getElementsByTagName("movie"); Document doc = null;
if ((movies == null) || movies.getLength() == 0) {
try {
doc = DOMHelper.getEventDocFromUrl(searchUrl);
} catch (Exception error) {
logger.severe("GetLatest error: " + error.getMessage());
return movie;
}
if (doc == null) {
return movie;
}
NodeList nlMovies = doc.getElementsByTagName("movie");
if ((nlMovies == null) || nlMovies.getLength() == 0) {
return movie; return movie;
} }
Node node = movies.item(0); Node node = nlMovies.item(0);
if (node.getNodeType() == Node.ELEMENT_NODE) { if (node.getNodeType() == Node.ELEMENT_NODE) {
movie = new MovieDB();
Element element = (Element) node; Element element = (Element) node;
movie.setTitle(DOMHelper.getValueFromElement(element, "name")); movie.setTitle(DOMHelper.getValueFromElement(element, "name"));
movie.setId(DOMHelper.getValueFromElement(element, "id")); movie.setId(DOMHelper.getValueFromElement(element, "id"));
Loading…
Cancel
Save