]> www.vanbest.org Git - tv_grab_nl_java/commitdiff
Add new RTL kijkwijzer parsing
authorJan-Pascal van Best <janpascal@vanbest.org>
Wed, 15 Jan 2014 20:18:51 +0000 (21:18 +0100)
committerJan-Pascal van Best <janpascal@vanbest.org>
Wed, 15 Jan 2014 20:18:51 +0000 (21:18 +0100)
src/main/java/org/vanbest/xmltv/AbstractEPGSource.java
src/main/java/org/vanbest/xmltv/RTL.java

index b410282497afe757b572868f8f39ee59fae36841..804e2a6424b81f765f304d3aae02892dd636fc28 100644 (file)
@@ -106,53 +106,60 @@ public abstract class AbstractEPGSource implements EPGSource {
                cache.clear(sourceId);
        }
 
+        String kijkwijzerCategorie(char c) {
+            switch (c) {
+            case 'a':
+                    return("Angst");
+            case 'd':
+                    return("Discriminatie");
+            case 's':
+                    return("Seks");
+            case 'h':
+                    return("Drugs/Alcohol");
+            case 'g':
+                    return("Geweld");
+            case 't':
+                    return("Grof taalgebruik");
+            default:
+                    return null;
+            }
+        }
+
+
        List<String> parseKijkwijzer(String s) {
                List<String> result = new ArrayList<String>();
                for (int i = 0; i < s.length(); i++) {
                        char c = s.charAt(i);
-                       switch (c) {
-                       case 'a':
-                               result.add("Angst");
-                               break;
-                       case 'd':
-                               result.add("Discriminatie");
-                               break;
-                       case 's':
-                               result.add("Seks");
-                               break;
-                       case 'h':
-                               result.add("Drugs/Alcohol");
-                               break;
-                       case 'g':
-                               result.add("Geweld");
-                               break;
-                       case 't':
-                               result.add("Grof taalgebruik");
-                               break;
-                       case '1':
-                               result.add("Voor alle leeftijden");
-                               break;
-                       case '2':
-                               result.add("Afgeraden voor kinderen jonger dan 6 jaar");
-                               break;
-                       case '9':
-                               result.add("Afgeraden voor kinderen jonger dan 9 jaar");
-                               break;
-                       case '3':
-                               result.add("Afgeraden voor kinderen jonger dan 12 jaar");
-                               break;
-                       case '4':
-                               result.add("Afgeraden voor kinderen jonger dan 16 jaar");
-                               break;
-                       case '5':
-                               break; // Lijkt op een foutje van RTL, bedoeld wordt wrsch
-                                               // "12 jaar en ouder". Wordt op RTL tvgids niet
-                                               // weegegeven.
-                       default:
-                               if (!config.quiet) {
-                                       logger.warn("Unknown kijkwijzer character: " + c
-                                                       + " in string " + s);
-                               }
+                        String tekst = kijkwijzerCategorie(c);
+                        if(tekst!=null) {
+                            result.add(tekst);
+                        } else {
+                            switch (c) {
+                            case '1':
+                                    result.add("Voor alle leeftijden");
+                                    break;
+                            case '2':
+                                    result.add("Afgeraden voor kinderen jonger dan 6 jaar");
+                                    break;
+                            case '9':
+                                    result.add("Afgeraden voor kinderen jonger dan 9 jaar");
+                                    break;
+                            case '3':
+                                    result.add("Afgeraden voor kinderen jonger dan 12 jaar");
+                                    break;
+                            case '4':
+                                    result.add("Afgeraden voor kinderen jonger dan 16 jaar");
+                                    break;
+                            case '5':
+                                    break; // Lijkt op een foutje van RTL, bedoeld wordt wrsch
+                                                    // "12 jaar en ouder". Wordt op RTL tvgids niet
+                                                    // weegegeven.
+                            default:
+                                    if (!config.quiet) {
+                                            logger.warn("Unknown kijkwijzer character: " + c
+                                                            + " in string " + s);
+                                    }
+                            }
                        }
                }
                return result;
index 53da69db539a16dd8fba536ed7ee45cdaf604f7e..18ecd5a4b35be6e602d477b65084174eb6f85a2e 100644 (file)
@@ -19,6 +19,8 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamWriter;
@@ -100,11 +102,58 @@ public class RTL extends AbstractEPGSource implements EPGSource {
         List<Channel> result = new ArrayList<Channel>(10);
         return new ArrayList<Channel>(channels.values());
     }
+    /* 
+    * (AL|6|9|12|16){0,1}[GASTHD]+
+    * AL = alle leeftijden
+    * A Angst
+    * G Geweld
+    * S Sex
+    * T Grof Taalgebruik
+    * H drugs/alcoHol
+    * D?  Discriminatie
+    *
+    * Voorkomende combinaties:
+    *   G
+    *   GA
+    *   GAT
+    *   GST
+    *   GT
+    *   A
+    *   AH
+    *   AL
+    *   ALT
+    *   AT
+    *   HT
+    *   DT
+    *   ST
+    */
 
+    private Pattern kijkwijzerPattern = Pattern.compile("^(AL|\\d+)(.*)");
     @Override
     List<String> parseKijkwijzer(String s) {
+        logger.trace("Kijkwijzer: " +s);
        List<String> result = new ArrayList<String>();
-       for (int i = 0; i < s.length(); i++) {
+        Matcher m = kijkwijzerPattern.matcher(s);
+        if (m.matches()) {
+            String l = m.group(1);
+            if(l.equals("AL")) {
+                result.add("Voor alle leeftijden");
+            } else {
+                int leeftijd = Integer.parseInt(l);
+                result.add("Afgeraden voor kinderen jonger dan "+leeftijd+" jaar");
+            }
+            String cat = m.group(2).toLowerCase();
+            for (int i = 0; i < cat.length(); i++) {
+               char c = cat.charAt(i);
+                String tekst = kijkwijzerCategorie(c);
+                if(tekst!=null) {
+                    result.add(tekst);
+                } else {
+                    logger.warn("Unknown RTL Kijkwijzer combination \""+s+"\"");
+                }
+            }
+        } else {
+            logger.warn("Unknown RTL Kijkwijzer combination \""+s+"\"");
         }
         return result;
     }
@@ -119,6 +168,7 @@ public class RTL extends AbstractEPGSource implements EPGSource {
         if(abstractKey!=null) {
             JSONObject abstrac = abstracts.get(abstractKey);
             prog.addTitle(abstrac.getString("name"));
+            logger.debug("\""+prog.getFirstTitle()+"\"");
         }
         String episodeKey = schedule.optString("episode_key");
         if(episodeKey!=null) {
@@ -131,9 +181,6 @@ public class RTL extends AbstractEPGSource implements EPGSource {
             if(s!=null && !s.isEmpty()) prog.addDescription(s);
             String kijkwijzer = episode.optString("nicam");
             if (kijkwijzer != null && !kijkwijzer.isEmpty()) {
-                logger.debug("kijkwijzer: "+kijkwijzer);
-                prog.addRating("kijkwijzer", kijkwijzer);
-                /*
                 List<String> list = parseKijkwijzer(kijkwijzer);
                 if (config.joinKijkwijzerRatings) {
                     // mythtv doesn't understand multiple <rating> tags
@@ -143,7 +190,6 @@ public class RTL extends AbstractEPGSource implements EPGSource {
                         prog.addRating("kijkwijzer", rating);
                     }
                 }
-                */
             }
         }
         String seasonKey = schedule.optString("season_key");