From: JP Date: Tue, 20 Mar 2012 16:18:49 +0000 (+0100) Subject: Handle teletext subtitle, breedbeeld, black/white, HD, previously-show X-Git-Tag: 0.5~8 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=c2fc9be95fdc8791eabaaefa9d5f69b8503adc33;p=tv_grab_nl_java Handle teletext subtitle, breedbeeld, black/white, HD, previously-show (herhaling) information Fix Kijkwijzer output --- diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java b/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java index 1d7e554..475cfb3 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/Main.java @@ -46,7 +46,7 @@ public class Main { System.out.println("... using cache file " + config.cacheFile.getCanonicalPath()); } - XmlTvWriter writer = new XmlTvWriter(outputWriter); + XmlTvWriter writer = new XmlTvWriter(outputWriter, config); writer.writeChannels(config.channels); TvGids gids = new TvGids(config); diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java b/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java index 9e998dc..a4852c3 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java @@ -17,8 +17,10 @@ public class ProgrammeDetails implements Serializable { String zender_id; public boolean subtitle_teletekst = false; public boolean stereo = false; - public boolean blacknwhite; - public boolean breedbeeld; + public boolean blacknwhite = false; + public boolean breedbeeld = false; + public String quality = null; + public boolean herhaling = false; public void fixup(Programme p, boolean quiet) { this.titel = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(titel); diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java b/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java index 77466e6..c75b169 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java @@ -210,6 +210,11 @@ public class TvGids { } private void fillDetails(Programme p) throws Exception { + Pattern progInfoPattern = Pattern.compile("prog-info-content.*prog-info-footer", Pattern.DOTALL); + Pattern infoLinePattern = Pattern.compile("
  • (.*?):(.*?)
  • "); + Pattern HDPattern = Pattern.compile("HD \\d+[ip]?"); + Pattern kijkwijzerPattern = Pattern.compile("\"(.*?)\""); + p.details = cache.getDetails(p.db_id); if ( p.details == null ) { cacheMisses++; @@ -222,13 +227,11 @@ public class TvGids { String clob=fetchURL(url); //System.out.println("clob:"); //System.out.println(clob); - Pattern progInfoPattern = Pattern.compile("prog-info-content.*prog-info-footer", Pattern.DOTALL); Matcher m = progInfoPattern.matcher(clob); if (m.find()) { String progInfo = m.group(); //System.out.println("progInfo"); //System.out.println(progInfo); - Pattern infoLinePattern = Pattern.compile("
  • (.*?):(.*?)
  • "); Matcher m2 = infoLinePattern.matcher(progInfo); while (m2.find()) { //System.out.println(" infoLine: " + m2.group()); @@ -238,29 +241,37 @@ public class TvGids { String value = m2.group(2); switch(key.toLowerCase()) { case "bijzonderheden": - if (value.toLowerCase().contains("subtitle_teletekst")) { - p.details.subtitle_teletekst = true; - } - if (value.toLowerCase().contains("breedbeeld")) { - p.details.breedbeeld = true; - } - if (value.toLowerCase().contains("zwart")) { - p.details.blacknwhite = true; - } - if (value.toLowerCase().contains("stereo")) { - p.details.stereo = true; + String[] list = value.split(","); + for( String item: list) { + if (item.toLowerCase().contains("teletekst")) { + p.details.subtitle_teletekst = true; + } else if (item.toLowerCase().contains("breedbeeld")) { + p.details.breedbeeld = true; + } else if (value.toLowerCase().contains("zwart")) { + p.details.blacknwhite = true; + } else if (value.toLowerCase().contains("stereo")) { + p.details.stereo = true; + } else if (value.toLowerCase().contains("herhaling")) { + p.details.herhaling = true; + } else { + Matcher m3 = HDPattern.matcher(value); + if (m3.find()) { + p.details.quality = m3.group(); + } else { + if (!config.quiet) System.out.println(" Unknown value in 'bijzonderheden': " + item); + } + } } break; } - Pattern kijkwijzerPattern = Pattern.compile("\"(.*?)\""); Matcher m3 = kijkwijzerPattern.matcher(progInfo); boolean first=true; while (m3.find()) { if (first) { - System.out.println(" (kijkwijzer): " + p.details.kijkwijzer); + //System.out.println(" (kijkwijzer): " + p.details.kijkwijzer); first = false; } - System.out.println(" kijkwijzer: " + m3.group(1)); + //System.out.println(" kijkwijzer: " + m3.group(1)); } } } diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java b/tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java index 6363eb9..631e3ee 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java @@ -16,8 +16,10 @@ public class XmlTvWriter { private XMLStreamWriter writer; private XMLEventFactory eventFactory; + private Config config; - public XmlTvWriter(OutputStream os) throws XMLStreamException, FactoryConfigurationError { + public XmlTvWriter(OutputStream os, Config config) throws XMLStreamException, FactoryConfigurationError { + this.config = config; this.writer = XMLOutputFactory.newInstance().createXMLStreamWriter(os); this.eventFactory = XMLEventFactory.newInstance(); @@ -62,11 +64,7 @@ public class XmlTvWriter { * String highlight_content; * soort * artikel_id ??? - * p.details.subtitle_teletekst = true; - p.details.breedbeeld = true; - p.details.blacknwhite = true; - p.details.stereo = true; - + * */ public void writePrograms(Collection programs) throws XMLStreamException { DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss Z"); @@ -141,13 +139,58 @@ public class XmlTvWriter { writer.writeCharacters(p.genre); writer.writeEndElement(); writeln(); + + if (p.details.blacknwhite || p.details.breedbeeld) { + writer.writeStartElement("video"); + if (p.details.blacknwhite) { + writer.writeStartElement("colour"); + writer.writeCharacters("no"); + writer.writeEndElement(); + } + if (p.details.breedbeeld) { + writer.writeStartElement("aspect"); + writer.writeCharacters("16x9"); + writer.writeEndElement(); + } + if (p.details.quality != null) { + writer.writeStartElement("quality"); + writer.writeCharacters(p.details.quality); + writer.writeEndElement(); + } + writer.writeEndElement(); + writeln(); + } + + if (p.details.stereo) { + writer.writeStartElement("audio"); + writer.writeStartElement("stereo"); + writer.writeCharacters("stereo"); + writer.writeEndElement(); + writer.writeEndElement(); + writeln(); + } + + if (p.details.herhaling) { + writer.writeEmptyElement("previously-shown"); + } + + if (p.details.subtitle_teletekst) { + writer.writeStartElement("subtitles"); + writer.writeAttribute("type", "teletext"); + writer.writeEndElement(); + writeln(); + } + /* Icon attribuut gebruiken? + * Juiste formaat voor meerdere ratings? + */ if (p.details.kijkwijzer != null && !p.details.kijkwijzer.isEmpty()) { writer.writeStartElement("rating"); writer.writeAttribute("system", "kijkwijzer"); + writer.writeStartElement("value"); for (int i=0; i