From: Jan-Pascal van Best Date: Wed, 15 Jan 2014 20:18:51 +0000 (+0100) Subject: Add new RTL kijkwijzer parsing X-Git-Tag: v1.6.0~3 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=d9d3c3ada8b77dffbdbc11dae9f9260829ccce72;p=tv_grab_nl_java Add new RTL kijkwijzer parsing --- diff --git a/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java b/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java index b410282..804e2a6 100644 --- a/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java +++ b/src/main/java/org/vanbest/xmltv/AbstractEPGSource.java @@ -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 parseKijkwijzer(String s) { List result = new ArrayList(); 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; diff --git a/src/main/java/org/vanbest/xmltv/RTL.java b/src/main/java/org/vanbest/xmltv/RTL.java index 53da69d..18ecd5a 100644 --- a/src/main/java/org/vanbest/xmltv/RTL.java +++ b/src/main/java/org/vanbest/xmltv/RTL.java @@ -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 result = new ArrayList(10); return new ArrayList(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 parseKijkwijzer(String s) { + logger.trace("Kijkwijzer: " +s); List result = new ArrayList(); - 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 list = parseKijkwijzer(kijkwijzer); if (config.joinKijkwijzerRatings) { // mythtv doesn't understand multiple tags @@ -143,7 +190,6 @@ public class RTL extends AbstractEPGSource implements EPGSource { prog.addRating("kijkwijzer", rating); } } - */ } } String seasonKey = schedule.optString("season_key");