package org.lodder.subtools.multisubdownloader.subtitleproviders.tvsubtitles; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.lodder.subtools.multisubdownloader.subtitleproviders.tvsubtitles.model.TVsubtitlesSubtitleDescriptor; import org.lodder.subtools.sublibrary.Manager; import org.lodder.subtools.sublibrary.ManagerException; import org.lodder.subtools.sublibrary.ManagerSetupException; import org.lodder.subtools.sublibrary.data.Html; import org.lodder.subtools.sublibrary.util.http.HttpClientException; public class JTVSubtitlesApi extends Html { public JTVSubtitlesApi(Manager manager) { super(manager); } public List<TVsubtitlesSubtitleDescriptor> searchSubtitles(String name, int season, int episode, String title, String languageid) throws Exception { List<TVsubtitlesSubtitleDescriptor> lSubtitles = new ArrayList<TVsubtitlesSubtitleDescriptor>(); String showUrl = this.getShowUrl(name); if (showUrl != null) { String episodeUrl = getEpisodeUrl(showUrl, season, episode); if (episodeUrl != null) { episodeUrl = "http://www.tvsubtitles.net/" + episodeUrl.substring(0, episodeUrl.indexOf(".")) + "-" + languageid + ".html"; String searchEpisode = this.getHtml(episodeUrl); Document searchEpisodeDoc = Jsoup.parse(searchEpisode); Elements searchEpisodes = searchEpisodeDoc.getElementsByClass("left_articles").get(0).getElementsByTag("a"); for (Element ep : searchEpisodes) { String url = ep.attr("href"); if (url.contains("subtitle-")) { String subtitlePage = this.getHtml("http://www.tvsubtitles.net/" + url); Document subtitlePageDoc = Jsoup.parse(subtitlePage); String filename = null, rip = null, download = null, author = null; Elements subtitlePageTableDoc = subtitlePageDoc.getElementsByClass("subtitle1"); if (subtitlePageTableDoc.size() == 1) { for (Element item : subtitlePageTableDoc.get(0).getElementsByTag("tr")) { Elements row = item.getElementsByTag("td"); if (row.size() == 3 && row.get(1).text().contains("filename:")) { filename = row.get(2).text(); } if (row.size() == 3 && row.get(1).text().contains("rip:")) { rip = row.get(2).text(); } if (row.size() == 3 && row.get(1).text().contains("author:")) { author = row.get(2).text(); } if (item.toString().contains("download-")) { for (Element link : row.get(0).getElementsByTag("a")) { if (link.attr("href").contains("download-")) { download = "http://www.tvsubtitles.net/" + link.attr("href"); break; } } } if (filename != null && rip != null && download != null) { TVsubtitlesSubtitleDescriptor sub = new TVsubtitlesSubtitleDescriptor(); sub.Filename = filename; sub.Url = download; sub.Rip = rip; sub.Author = author; lSubtitles.add(sub); rip = null; filename = null; download = null; author = null; } } } } } } } return lSubtitles; } private String getEpisodeUrl(String showUrl, int season, int episode) throws IOException, HttpClientException, ManagerSetupException, ManagerException { String seasonUrl = "http://www.tvsubtitles.net/" + showUrl.substring(0, showUrl.indexOf(".")) + "-" + season + ".html"; String searchSeason = this.getHtmlDisk(seasonUrl); Document searchSeasonDoc = Jsoup.parse(searchSeason); if (searchSeasonDoc == null) return null; Element searchSeasonTable = searchSeasonDoc.getElementById("table5"); String episodeUrl = null; boolean foundEp = false; for (Element ep : searchSeasonTable.getElementsByTag("td")) { if (foundEp) { Elements links = ep.getElementsByTag("a"); if (links.size() == 1) { episodeUrl = links.get(0).attr("href"); break; } } String formatedepisodenumber = ""; if (episode < 10) { formatedepisodenumber = "0" + episode; } else { formatedepisodenumber = "" + episode; } if (ep.text().equals(season + "x" + formatedepisodenumber)) { foundEp = true; } } return episodeUrl; } private String getShowUrl(String showName) throws ManagerException { Map<String, String> data = new HashMap<String, String>(); data.put("q", showName); String searchShow = this.postHtml("http://www.tvsubtitles.net/search.php", data); String showUrl = null; Document searchShowDoc = Jsoup.parse(searchShow); if (searchShowDoc == null) return showUrl; Elements shows = searchShowDoc.getElementsByTag("li"); for (Element show : shows) { Elements links = show.getElementsByTag("a"); if (links.size() == 1 && links.get(0).text().toLowerCase().contains(showName.toLowerCase())) { showUrl = links.get(0).attr("href"); break; } } return showUrl; } }