]> www.vanbest.org Git - tv_grab_nl_java/commitdiff
Handle teletext subtitle, breedbeeld, black/white, HD, previously-show
authorJP <jp@here>
Tue, 20 Mar 2012 16:18:49 +0000 (17:18 +0100)
committerJP <jp@here>
Tue, 20 Mar 2012 16:18:49 +0000 (17:18 +0100)
(herhaling) information
Fix Kijkwijzer output

tv_grab_nl_java/src/org/vanbest/xmltv/Main.java
tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java
tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java
tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java

index 1d7e55408dbdbf2979eb0c63c3f38427c1741cd9..475cfb3ab086fcb5c2ed66d9f5c5a1fbff611626 100644 (file)
@@ -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);
index 9e998dc962e42e8fcf9102f520287a6d685f878a..a4852c35c6eadff935ea2b16724c1cac6b734e34 100644 (file)
@@ -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);
index 77466e61bd38de6bd82ab0f7f9180412ebc7799e..c75b1691acef604a65a3cd0ca00e6c5c5cd6e40e 100644 (file)
@@ -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("<li><strong>(.*?):</strong>(.*?)</li>");
+               Pattern HDPattern = Pattern.compile("HD \\d+[ip]?");
+               Pattern kijkwijzerPattern = Pattern.compile("<img src=\"http://tvgidsassets.nl/img/kijkwijzer/.*?\" alt=\"(.*?)\" />");
+
                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("<li><strong>(.*?):</strong>(.*?)</li>");
                                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("<img src=\"http://tvgidsassets.nl/img/kijkwijzer/.*?\" alt=\"(.*?)\" />");
                                        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));
                                        }
                                }
                        }
index 6363eb98fec8654e73720d28900e445be23c1085..631e3eec29a1a8ae0d6e7aee1d8a202621b40374 100644 (file)
@@ -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<Programme> 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<p.details.kijkwijzer.length(); i++) {
+                                                               if (i!=0) writer.writeCharacters(", ");
                                                                char c = p.details.kijkwijzer.charAt(i);
-                                                               writer.writeStartElement("value");
                                                                switch(c) {
                                                                case 'a':writer.writeCharacters("Angst"); break;
                                                                case 'd':writer.writeCharacters("Discriminatie"); break;
@@ -158,13 +201,13 @@ public class XmlTvWriter {
                                                                case '9':writer.writeCharacters("Afgeraden voor kinderen jonger dan 9 jaar"); break;
                                                                case '3':writer.writeCharacters("Afgeraden voor kinderen jonger dan 12 jaar"); break;
                                                                case '4':writer.writeCharacters("Afgeraden voor kinderen jonger dan 16 jaar"); break;
-                                                               default: System.out.println("Unknown kijkwijzer character: " + p.details.kijkwijzer);
+                                                               default: if (!config.quiet) System.out.println("Unknown kijkwijzer character: " + p.details.kijkwijzer);
                                                                }
-                                                               writer.writeEndElement();
                                                        }
                                                        //writer.writeStartElement("value");
                                                        //      writer.writeCharacters(p.details.kijkwijzer);
                                                        //writer.writeEndElement();
+                                                       writer.writeEndElement();
                                                writer.writeEndElement();
                                                writeln();
                                        }