package org.lodder.subtools.multisubdownloader.subtitleproviders.subsmax; import java.io.ByteArrayInputStream; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.lodder.subtools.multisubdownloader.subtitleproviders.subsmax.model.SubMaxSubtitleDescriptor; import org.lodder.subtools.sublibrary.Manager; import org.lodder.subtools.sublibrary.data.Html; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JSubsMaxApi extends Html { private static String DEFAULTUSERAGENT = "Mozilla/5.25 Netscape/5.0 (Windows; I; Win95)"; private static final Logger LOGGER = LoggerFactory.getLogger(JSubsMaxApi.class); public JSubsMaxApi(Manager manager) { super(manager, DEFAULTUSERAGENT); } public List<SubMaxSubtitleDescriptor> searchSubtitles(String name, int season, int episode, String languageid) { List<SubMaxSubtitleDescriptor> lSubtitles = new ArrayList<SubMaxSubtitleDescriptor>(); SubMaxSubtitleDescriptor submaxitem = null; String tagContent = null; String language = ""; if (languageid.equals("nl")) { language = "dutch"; } else if (languageid.equals("en")) { language = "english"; } String url = "http://subsmax.com/api/50/" + name.replace(" ", "%20") + "-s" + season + "e" + episode + "-" + language; byte[] byteArray; try { String html = this.getHtml(url); byteArray = html.getBytes("UTF-8"); ByteArrayInputStream inputStream = new ByteArrayInputStream(byteArray); XMLInputFactory inputFactory = XMLInputFactory.newInstance(); XMLStreamReader reader = inputFactory.createXMLStreamReader(inputStream); int prevEvent = 0; while (reader.hasNext()) { int event = reader.next(); switch (event) { case XMLStreamConstants.START_ELEMENT: tagContent = ""; if ("item".equals(reader.getLocalName())) { submaxitem = new SubMaxSubtitleDescriptor(); } break; case XMLStreamConstants.CHARACTERS: if (prevEvent == event) { tagContent = tagContent + reader.getText(); } else { tagContent = reader.getText(); } break; case XMLStreamConstants.END_ELEMENT: switch (reader.getLocalName()) { case "item": if (submaxitem != null) lSubtitles.add(submaxitem); break; case "title": if (submaxitem != null) submaxitem.setTitle(tagContent); break; case "link": if (submaxitem != null) { int pos = tagContent.lastIndexOf('/'); tagContent = tagContent.substring(0, pos) + "/download-subtitle" + tagContent.substring(pos); submaxitem.setLink(tagContent); } break; case "filename": if (submaxitem != null) submaxitem.setFilename(tagContent); break; case "languages": if (submaxitem != null) submaxitem.setLanguages(tagContent); break; default: break; } break; default: break; } prevEvent = event; } } catch (UnsupportedEncodingException e) { LOGGER.error("SUBSMAXAPI searchSubtitles" ,e); } catch (XMLStreamException e) { LOGGER.error("SUBSMAXAPI searchSubtitles" ,e); } catch (MalformedURLException e) { LOGGER.error("SUBSMAXAPI searchSubtitles" ,e); } catch (Exception e) { LOGGER.error("SUBSMAXAPI searchSubtitles" ,e); } return lSubtitles; } }