package moviescraper.doctord.controller.siteparsingprofile.specific; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.io.FilenameUtils; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import moviescraper.doctord.controller.siteparsingprofile.SiteParsingProfile; import moviescraper.doctord.model.SearchResult; import moviescraper.doctord.model.dataitem.Actor; import moviescraper.doctord.model.dataitem.Director; import moviescraper.doctord.model.dataitem.Genre; import moviescraper.doctord.model.dataitem.ID; import moviescraper.doctord.model.dataitem.MPAARating; import moviescraper.doctord.model.dataitem.OriginalTitle; import moviescraper.doctord.model.dataitem.Outline; import moviescraper.doctord.model.dataitem.Plot; import moviescraper.doctord.model.dataitem.Rating; import moviescraper.doctord.model.dataitem.ReleaseDate; import moviescraper.doctord.model.dataitem.Runtime; import moviescraper.doctord.model.dataitem.Set; import moviescraper.doctord.model.dataitem.SortTitle; import moviescraper.doctord.model.dataitem.Studio; import moviescraper.doctord.model.dataitem.Tagline; import moviescraper.doctord.model.dataitem.Thumb; import moviescraper.doctord.model.dataitem.Title; import moviescraper.doctord.model.dataitem.Top250; import moviescraper.doctord.model.dataitem.Votes; import moviescraper.doctord.model.dataitem.Year; public class Kin8tengokuParsingProfile extends SiteParsingProfile implements SpecificProfile { private String id; @Override public Title scrapeTitle() { return new Title("Kin8tengoku" + "-" + id); } @Override public OriginalTitle scrapeOriginalTitle() { return OriginalTitle.BLANK_ORIGINALTITLE; } @Override public SortTitle scrapeSortTitle() { return SortTitle.BLANK_SORTTITLE; } @Override public Set scrapeSet() { return new Set("Kin8tengoku"); } @Override public Rating scrapeRating() { return new Rating(0,""); } @Override public Year scrapeYear() { return scrapeReleaseDate().getYear(); } @Override public ReleaseDate scrapeReleaseDate() { Pattern pattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2}"); Elements elements = document.select("td[class^=movie_table] "); for (Element element : elements) { String time = element.childNode(0).toString(); Matcher matcher = pattern.matcher(time); if (matcher.find()) { String timeString = matcher.group(); return new ReleaseDate(timeString); } } return ReleaseDate.BLANK_RELEASEDATE; } @Override public Top250 scrapeTop250() { return Top250.BLANK_TOP250; } @Override public Votes scrapeVotes() { return Votes.BLANK_VOTES; } @Override public Outline scrapeOutline() { return Outline.BLANK_OUTLINE; } @Override public Plot scrapePlot() { return Plot.BLANK_PLOT; } @Override public Tagline scrapeTagline() { return Tagline.BLANK_TAGLINE; } @Override public Runtime scrapeRuntime() { Pattern pattern = Pattern.compile("\\d{2}:\\d{2}:\\d{2}"); Elements elements = document.select("td[class^=movie_table] "); for (Element element : elements) { String time = element.childNode(0).toString(); Matcher matcher = pattern.matcher(time); if (matcher.find()) { String timeString = matcher.group(); String[] split = timeString.split(":"); Integer minutes = Integer.parseInt(split[0])*60 + Integer.parseInt(split[1]); return new Runtime(minutes.toString()); } } return Runtime.BLANK_RUNTIME; } @Override public Thumb[] scrapePosters() { try { Thumb[] thumbs = new Thumb[1]; thumbs[0] = new Thumb(getThumbURL(id, 1)); return thumbs; } catch (MalformedURLException e) { e.printStackTrace(); } return new Thumb[0]; } @Override public Thumb[] scrapeFanart() { String thumbURL = getThumbURL(id, 1); try { Thumb thumb = new Thumb(thumbURL); Thumb[] thumbs = {thumb}; return thumbs; } catch (MalformedURLException e) { e.printStackTrace(); } return null; } @Override public Thumb[] scrapeExtraFanart() { ArrayList<Thumb> extraFanart = new ArrayList<>(); return extraFanart.toArray(new Thumb[extraFanart.size()]); } @Override public MPAARating scrapeMPAA() { return MPAARating.RATING_XXX; } @Override public ID scrapeID() { return new ID(id); } @Override public ArrayList<Genre> scrapeGenres() { ArrayList<Genre> list = new ArrayList<>(); Elements elements = document.select("div[class=icon] a[href~=/listpages/[0-9]]"); for (Element element : elements) { String genre = element.childNode(0).toString(); list.add( new Genre(genre) ); } return list; } @Override public ArrayList<Actor> scrapeActors() { ArrayList<Actor> list = new ArrayList<>(); Elements elements = document.select("a[href^=/listpages/actor_]"); for (Element element : elements) { String name = element.childNode(0).toString(); list.add( new Actor(name, null, null) ); } return list; } @Override public ArrayList<Director> scrapeDirectors() { ArrayList<Director> list = new ArrayList<>(); list.add( new Director("Kin8tengoku", null) ); return list; } @Override public Studio scrapeStudio() { return new Studio("Kin8tengoku"); } @Override public String createSearchString(File file) { scrapedMovieFile = file; id = findID( FilenameUtils.getName(file.getName()) ); if (id != null && !id.isEmpty() ) return "http://en.kin8tengoku.com/" + id + "/pht/shosai.htm"; return id; } @Override public SearchResult[] getSearchResults(String searchString) throws IOException { String thumb = getThumbURL( findID(searchString) ); SearchResult searchResult = new SearchResult(searchString, "ID :" + findID(searchString), new Thumb(thumb)); SearchResult[] results = {searchResult}; return results; } public static String findID(String searchString) { Pattern pattern = Pattern.compile("[0-9]{4}"); Matcher matcher = pattern.matcher( searchString ); if ( matcher.find() ) { String id = matcher.group(); return id; } return ""; } public String getThumbURL(String id) { return getThumbURL(id, 8); } public String getThumbURL(String id, int number) { return "http://en.kin8tengoku.com/" + id + "/pht/" + number + ".jpg"; } @Override public String getParserName() { return "Kin8tengoku"; } @Override public SiteParsingProfile newInstance() { return new Kin8tengokuParsingProfile(); } }