updated DOMParser: it now takes a DOM document and returns MovieDB objects

updated TheMovieDb accordingly
master
Mohammed Le Doze 15 years ago
parent 1ce2426a0c
commit c872d87edf

@ -12,6 +12,7 @@
*/ */
package com.moviejukebox.themoviedb; package com.moviejukebox.themoviedb;
import com.moviejukebox.themoviedb.model.Category;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -112,12 +113,11 @@ public class TheMovieDb {
* @return A movie bean with the data extracted * @return A movie bean with the data extracted
*/ */
public List<MovieDB> moviedbSearch(String movieTitle, String language) { public List<MovieDB> moviedbSearch(String movieTitle, String language) {
MovieDB movie = null; List<MovieDB> movies = new ArrayList<MovieDB>();
List<MovieDB> movieList = new ArrayList<MovieDB>();
// If the title is null, then exit // If the title is null, then exit
if (!isValidString(movieTitle)) { if (!isValidString(movieTitle)) {
return movieList; return movies;
} }
Document doc = null; Document doc = null;
@ -125,25 +125,11 @@ public class TheMovieDb {
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); doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie"); movies = DOMParser.parseMovies(doc);
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) { } catch (Exception error) {
logger.severe("TheMovieDb Error: " + error.getMessage()); logger.severe("TheMovieDb Error: " + error.getMessage());
} }
return movieList; return movies;
} }
/** /**
@ -177,9 +163,9 @@ public class TheMovieDb {
public List<MovieDB> moviedbBrowse(String orderBy, String order, public List<MovieDB> moviedbBrowse(String orderBy, String order,
Map<String, String> parameters, String language) { Map<String, String> parameters, String language) {
List<MovieDB> movieList = new ArrayList<MovieDB>(); List<MovieDB> movies = new ArrayList<MovieDB>();
if (!isValidString(orderBy) || (!isValidString(order))) { if (!isValidString(orderBy) || (!isValidString(order))) {
return movieList; return movies;
} }
List<String> validParameters = new ArrayList<String>(); List<String> validParameters = new ArrayList<String>();
@ -205,31 +191,16 @@ public class TheMovieDb {
} }
} }
MovieDB movie = null;
Document doc = null; Document doc = null;
String searchUrl = buildSearchUrl(MOVIE_BROWSE, url, language);
try { try {
String searchUrl = buildSearchUrl(MOVIE_BROWSE, url, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); 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) { } catch (Exception error) {
logger.severe("Browse error: " + error.getMessage()); logger.severe("Browse error: " + error.getMessage());
} }
return movieList; movies = DOMParser.parseMovies(doc);
return movies;
} }
/** /**
@ -253,18 +224,7 @@ public class TheMovieDb {
String searchUrl = buildSearchUrl(MOVIE_IMDB_LOOKUP, imdbID, language); String searchUrl = buildSearchUrl(MOVIE_IMDB_LOOKUP, imdbID, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie"); movie = DOMParser.parseMovie(doc);
if (nlMovies == null) {
return movie;
}
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);
}
}
} catch (Exception error) { } catch (Exception error) {
logger.severe("ImdbLookup error: " + error.getMessage()); logger.severe("ImdbLookup error: " + error.getMessage());
} }
@ -316,18 +276,7 @@ public class TheMovieDb {
return movie; return movie;
} }
NodeList nlMovies = doc.getElementsByTagName("movie"); movie = DOMParser.parseMovie(doc);
if (nlMovies == null) {
return movie;
}
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);
}
}
} catch (Exception error) { } catch (Exception error) {
logger.severe("GetInfo error: " + error.getMessage()); logger.severe("GetInfo error: " + error.getMessage());
error.printStackTrace(); error.printStackTrace();
@ -337,7 +286,7 @@ public class TheMovieDb {
public MovieDB moviedbGetImages(String searchTerm, String language) { public MovieDB moviedbGetImages(String searchTerm, String language) {
MovieDB movie = null; MovieDB movie = null;
movie = moviedbGetInfo(searchTerm, movie, language); movie = moviedbGetImages(searchTerm, movie, language);
return movie; return movie;
} }
@ -360,18 +309,7 @@ public class TheMovieDb {
String searchUrl = buildSearchUrl(MOVIE_GET_IMAGES, searchTerm, language); String searchUrl = buildSearchUrl(MOVIE_GET_IMAGES, searchTerm, language);
doc = DOMHelper.getEventDocFromUrl(searchUrl); doc = DOMHelper.getEventDocFromUrl(searchUrl);
NodeList nlMovies = doc.getElementsByTagName("movie"); movie = DOMParser.parseMovie(doc);
if (nlMovies == null) {
return movie;
}
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);
}
}
} catch (Exception error) { } catch (Exception error) {
logger.severe("GetImages Error: " + error.getMessage()); logger.severe("GetImages Error: " + error.getMessage());
@ -462,6 +400,7 @@ public class TheMovieDb {
return person; return person;
} }
/** /**
* Search a list of movies and return the one that matches the title & year * Search a list of movies and return the one that matches the title & year
* @param movieList The list of movies to search * @param movieList The list of movies to search

@ -10,9 +10,10 @@
* 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.tools; package com.moviejukebox.themoviedb.tools;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.w3c.dom.Document; import org.w3c.dom.Document;
@ -30,10 +31,134 @@ import com.moviejukebox.themoviedb.model.Person;
import com.moviejukebox.themoviedb.model.Studio; import com.moviejukebox.themoviedb.model.Studio;
public class DOMParser { public class DOMParser {
static Logger logger = TheMovieDb.getLogger(); static Logger logger = TheMovieDb.getLogger();
public static MovieDB parseMovieInfo(Element movieElement) { /**
// Inspired by http://www.java-tips.org/java-se-tips/javax.xml.parsers/how-to-read-xml-file-in-java.html * Returns a list of MovieDB object parsed from the DOM Document
* even if there is only one movie
* @param doc DOM Document
* @return
*/
public static List<MovieDB> parseMovies(Document doc) {
List<MovieDB> movies = new ArrayList<MovieDB>();
NodeList nlMovies = doc.getElementsByTagName("movie");
if ((nlMovies == null) || nlMovies.getLength() == 0) {
return movies;
}
MovieDB movie = null;
for (int i = 0; i < nlMovies.getLength(); i++) {
Node movieNode = nlMovies.item(i);
if (movieNode.getNodeType() == Node.ELEMENT_NODE) {
Element movieElement = (Element) movieNode;
movie = DOMParser.parseMovieInfo(movieElement);
if (movie != null) {
movies.add(movie);
}
}
}
return movies;
}
/**
* Returns the first MovieDB from the DOM Document.
* @param doc a DOM Document
* @return
*/
public static MovieDB parseMovie(Document doc) {
MovieDB movie = new MovieDB();
NodeList nlMovies = doc.getElementsByTagName("movie");
if ((nlMovies == null) || nlMovies.getLength() == 0) {
return movie;
}
Node nMovie = nlMovies.item(0);
if (nMovie.getNodeType() == Node.ELEMENT_NODE) {
Element eMovie = (Element) nMovie;
movie = DOMParser.parseMovieInfo(eMovie);
}
return movie;
}
public static Person parsePersonInfo(Document doc) {
Person person = null;
try {
person = new Person();
NodeList personNodeList = doc.getElementsByTagName("person");
// Only get the first movie from the list
Node personNode = personNodeList.item(0);
if (personNode == null) {
logger.finest("Person not found");
return person;
}
if (personNode.getNodeType() == Node.ELEMENT_NODE) {
Element personElement = (Element) personNode;
person.setName(DOMHelper.getValueFromElement(personElement, "name"));
person.setId(DOMHelper.getValueFromElement(personElement, "id"));
person.setBiography(DOMHelper.getValueFromElement(personElement, "biography"));
person.setKnownMovies(Integer.parseInt(DOMHelper.getValueFromElement(personElement, "known_movies")));
person.setBirthday(DOMHelper.getValueFromElement(personElement, "birthday"));
person.setBirthPlace(DOMHelper.getValueFromElement(personElement, "birthplace"));
person.setUrl(DOMHelper.getValueFromElement(personElement, "url"));
person.setVersion(Integer.parseInt(DOMHelper.getValueFromElement(personElement, "version")));
person.setLastModifiedAt(DOMHelper.getValueFromElement(personElement, "last_modified_at"));
NodeList artworkNodeList = doc.getElementsByTagName("image");
for (int nodeLoop = 0; nodeLoop < artworkNodeList.getLength(); nodeLoop++) {
Node artworkNode = artworkNodeList.item(nodeLoop);
if (artworkNode.getNodeType() == Node.ELEMENT_NODE) {
Element artworkElement = (Element) artworkNode;
Artwork artwork = new Artwork();
artwork.setType(artworkElement.getAttribute("type"));
artwork.setUrl(artworkElement.getAttribute("url"));
artwork.setSize(artworkElement.getAttribute("size"));
artwork.setId(artworkElement.getAttribute("id"));
person.addArtwork(artwork);
}
}
NodeList filmNodeList = doc.getElementsByTagName("movie");
for (int nodeLoop = 0; nodeLoop < filmNodeList.getLength(); nodeLoop++) {
Node filmNode = filmNodeList.item(nodeLoop);
if (filmNode.getNodeType() == Node.ELEMENT_NODE) {
Element filmElement = (Element) filmNode;
Filmography film = new Filmography();
film.setCharacter(filmElement.getAttribute("character"));
film.setDepartment(filmElement.getAttribute("department"));
film.setId(filmElement.getAttribute("id"));
film.setJob(filmElement.getAttribute("job"));
film.setName(filmElement.getAttribute("name"));
film.setUrl(filmElement.getAttribute("url"));
person.addFilm(film);
}
}
}
} catch (Exception error) {
logger.severe("ERROR: " + error.getMessage());
error.printStackTrace();
}
return person;
}
public static Person parsePersonGetVersion(Document doc) {
// TODO Auto-generated method stub
return null;
}
private static MovieDB parseMovieInfo(Element movieElement) {
// Inspired by
// http://www.java-tips.org/java-se-tips/javax.xml.parsers/how-to-read-xml-file-in-java.html
MovieDB movie = new MovieDB(); MovieDB movie = new MovieDB();
NodeList subNodeList; NodeList subNodeList;
Node subNode; Node subNode;
@ -158,8 +283,8 @@ public class DOMParser {
person.setJob(subElement.getAttribute("job")); person.setJob(subElement.getAttribute("job"));
person.setId(subElement.getAttribute("id")); person.setId(subElement.getAttribute("id"));
person.addArtwork(Artwork.ARTWORK_TYPE_PERSON, person.addArtwork(Artwork.ARTWORK_TYPE_PERSON,
Artwork.ARTWORK_SIZE_THUMB, Artwork.ARTWORK_SIZE_THUMB,
subElement.getAttribute("thumb"), "-1"); subElement.getAttribute("thumb"), "-1");
person.setDepartment(subElement.getAttribute("department")); person.setDepartment(subElement.getAttribute("department"));
person.setUrl(subElement.getAttribute("url")); person.setUrl(subElement.getAttribute("url"));
person.setOrder(subElement.getAttribute("order")); person.setOrder(subElement.getAttribute("order"));
@ -172,28 +297,28 @@ public class DOMParser {
} }
/* /*
* This processes the image elements. There are two formats to deal with: * This processes the image elements. There are two formats to deal with:
* Movie.imdbLookup, Movie.getInfo & Movie.search: * Movie.imdbLookup, Movie.getInfo & Movie.search:
* <images> * <images>
* <image type="poster" size="original" url="http://images.themoviedb.org/posters/60366/Fight_Club.jpg" id="60366"/> * <image type="poster" size="original" url="http://images.themoviedb.org/posters/60366/Fight_Club.jpg" id="60366"/>
* <image type="backdrop" size="original" url="http://images.themoviedb.org/backdrops/56444/bscap00144.jpg" id="56444"/> * <image type="backdrop" size="original" url="http://images.themoviedb.org/backdrops/56444/bscap00144.jpg" id="56444"/>
* </images> * </images>
* *
* Movie.getImages: * Movie.getImages:
* <images> * <images>
* <poster id="17066"> * <poster id="17066">
* <image url="http://images.themoviedb.org/posters/17066/Fight_Club.jpg" size="original"/> * <image url="http://images.themoviedb.org/posters/17066/Fight_Club.jpg" size="original"/>
* <image url="http://images.themoviedb.org/posters/17066/Fight_Club_thumb.jpg" size="thumb"/> * <image url="http://images.themoviedb.org/posters/17066/Fight_Club_thumb.jpg" size="thumb"/>
* <image url="http://images.themoviedb.org/posters/17066/Fight_Club_cover.jpg" size="cover"/> * <image url="http://images.themoviedb.org/posters/17066/Fight_Club_cover.jpg" size="cover"/>
* <image url="http://images.themoviedb.org/posters/17066/Fight_Club_mid.jpg" size="mid"/> * <image url="http://images.themoviedb.org/posters/17066/Fight_Club_mid.jpg" size="mid"/>
* </poster> * </poster>
* <backdrop id="18593"> * <backdrop id="18593">
* <image url="http://images.themoviedb.org/backdrops/18593/Fight_Club_on_the_street1.jpg" size="original"/> * <image url="http://images.themoviedb.org/backdrops/18593/Fight_Club_on_the_street1.jpg" size="original"/>
* <image url="http://images.themoviedb.org/backdrops/18593/Fight_Club_on_the_street1_poster.jpg" size="poster"/> * <image url="http://images.themoviedb.org/backdrops/18593/Fight_Club_on_the_street1_poster.jpg" size="poster"/>
* <image url="http://images.themoviedb.org/backdrops/18593/Fight_Club_on_the_street1_thumb.jpg" size="thumb"/> * <image url="http://images.themoviedb.org/backdrops/18593/Fight_Club_on_the_street1_thumb.jpg" size="thumb"/>
* </backdrop> * </backdrop>
* </images> * </images>
*/ */
subNodeList = movieElement.getElementsByTagName("images"); subNodeList = movieElement.getElementsByTagName("images");
for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) {
@ -215,8 +340,8 @@ public class DOMParser {
artwork.setUrl(subElement.getAttribute("url")); artwork.setUrl(subElement.getAttribute("url"));
artwork.setId(subElement.getAttribute("id")); artwork.setId(subElement.getAttribute("id"));
movie.addArtwork(artwork); movie.addArtwork(artwork);
} else if (subElement.getNodeName().equalsIgnoreCase("backdrop") || } else if (subElement.getNodeName().equalsIgnoreCase("backdrop")
subElement.getNodeName().equalsIgnoreCase("poster")) { || subElement.getNodeName().equalsIgnoreCase("poster")) {
// This is the format used in Movie.getImages // This is the format used in Movie.getImages
String artworkId = subElement.getAttribute("id"); String artworkId = subElement.getAttribute("id");
String artworkType = subElement.getNodeName(); String artworkType = subElement.getNodeName();
@ -249,77 +374,4 @@ public class DOMParser {
} }
return movie; return movie;
} }
public static Person parsePersonInfo(Document doc) {
Person person = null;
try {
person = new Person();
NodeList personNodeList = doc.getElementsByTagName("person");
// Only get the first movie from the list
Node personNode = personNodeList.item(0);
if (personNode == null) {
logger.finest("Person not found");
return person;
}
if (personNode.getNodeType() == Node.ELEMENT_NODE) {
Element personElement = (Element) personNode;
person.setName(DOMHelper.getValueFromElement(personElement, "name"));
person.setId(DOMHelper.getValueFromElement(personElement, "id"));
person.setBiography(DOMHelper.getValueFromElement(personElement, "biography"));
person.setKnownMovies(Integer.parseInt(DOMHelper.getValueFromElement(personElement, "known_movies")));
person.setBirthday(DOMHelper.getValueFromElement(personElement, "birthday"));
person.setBirthPlace(DOMHelper.getValueFromElement(personElement, "birthplace"));
person.setUrl(DOMHelper.getValueFromElement(personElement, "url"));
person.setVersion(Integer.parseInt(DOMHelper.getValueFromElement(personElement, "version")));
person.setLastModifiedAt(DOMHelper.getValueFromElement(personElement, "last_modified_at"));
NodeList artworkNodeList = doc.getElementsByTagName("image");
for (int nodeLoop = 0; nodeLoop < artworkNodeList.getLength(); nodeLoop++) {
Node artworkNode = artworkNodeList.item(nodeLoop);
if (artworkNode.getNodeType() == Node.ELEMENT_NODE) {
Element artworkElement = (Element) artworkNode;
Artwork artwork = new Artwork();
artwork.setType(artworkElement.getAttribute("type"));
artwork.setUrl(artworkElement.getAttribute("url"));
artwork.setSize(artworkElement.getAttribute("size"));
artwork.setId(artworkElement.getAttribute("id"));
person.addArtwork(artwork);
}
}
NodeList filmNodeList = doc.getElementsByTagName("movie");
for (int nodeLoop = 0; nodeLoop < filmNodeList.getLength(); nodeLoop++) {
Node filmNode = filmNodeList.item(nodeLoop);
if (filmNode.getNodeType() == Node.ELEMENT_NODE) {
Element filmElement = (Element) filmNode;
Filmography film = new Filmography();
film.setCharacter(filmElement.getAttribute("character"));
film.setDepartment(filmElement.getAttribute("department"));
film.setId(filmElement.getAttribute("id"));
film.setJob(filmElement.getAttribute("job"));
film.setName(filmElement.getAttribute("name"));
film.setUrl(filmElement.getAttribute("url"));
person.addFilm(film);
}
}
}
} catch (Exception error) {
logger.severe("ERROR: " + error.getMessage());
error.printStackTrace();
}
return person;
}
public static Person parsePersonGetVersion(Document doc) {
// TODO Auto-generated method stub
return null;
}
} }

Loading…
Cancel
Save