From: JP Date: Mon, 12 Mar 2012 14:31:42 +0000 (+0100) Subject: Implemented channel icons X-Git-Tag: 0.2~9 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=dd514a95811b55a09b91c60085908f0597a7d3e7;p=tv_grab_nl_java Implemented channel icons --- diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/Channel.java b/tv_grab_nl_java/src/org/vanbest/xmltv/Channel.java index 737d29f..9f06133 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/Channel.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/Channel.java @@ -4,6 +4,7 @@ public class Channel { int id; String name; String shortName; + String iconUrl; public Channel(int id, String name, String shortName) { this.id = id; this.name = name; @@ -21,4 +22,7 @@ public class Channel { this.name = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(name); this.shortName = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(shortName); } + public void setIconUrl(String url) { + this.iconUrl = url; + } } diff --git a/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java b/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java index 556a3f3..9ad9e60 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/Config.java @@ -25,11 +25,58 @@ public class Config { FileUtils.forceMkdir(configFile.getParentFile()); PrintWriter out = new PrintWriter(new OutputStreamWriter( new FileOutputStream( configFile ))); for(Channel c: channels) { - out.println(c.id + ": " + c.name); + out.print(c.id + ": " + escape(c.name)); + if (c.iconUrl != null) { + out.print(" : " + escape(c.iconUrl)); + } + out.println(); } out.close(); } + public static String unescape(String s) { + String result = s.trim(); + result = result.substring(1, result.length()-1); + result = result.replaceAll("\\\"", "\""); + return result; + } + + public static String escape(String s) { + return "\"" + s.replaceAll("\"", "\\\"") + "\""; + } + + public static String[] splitLine(String s) { + int colon = 0; + while (true) { + colon = s.indexOf(':', colon+1); + if (colon<0 || s.charAt(colon-1) != '\\') { + break; + } + } + if (colon<0) { + String[] parts = {s}; + return parts; + } + String id = s.substring(0, colon).trim(); + int firstColon = colon; + while (true) { + colon = s.indexOf(':', colon+1); + if (colon<0 || s.charAt(colon-1) != '\\') { + break; + } + } + if (colon<0) { + String name = unescape(s.substring(firstColon+1)); + + String[] parts = {id, name}; + return parts; + } + String name = unescape(s.substring(firstColon+1, colon)); + String icon = unescape(s.substring(colon+1)); + String[] parts = {id,name,icon}; + return parts; + } + public static Config readConfig(File file) throws IOException { Config result = new Config(); BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( file))); @@ -39,8 +86,11 @@ public class Config { if(s==null) break; if (!s.contains(":")) continue; if (s.startsWith("#")) continue; - String[] parts = s.split("[[:space:]]*:[[:space:]]*", 2); - Channel c = new Channel(Integer.parseInt(parts[0]), parts[1].trim(), ""); + String[] parts = splitLine(s); + Channel c = new Channel(Integer.parseInt(parts[0]), parts[1], ""); + if (parts.length>2) { + c.setIconUrl(parts[2]); + } channels.add(c); } result.setChannels(channels); 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 304c9b7..05f7ab9 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/ProgrammeDetails.java @@ -16,17 +16,22 @@ public class ProgrammeDetails implements Serializable { String regisseur; String zender_id; - public void fixup() { - this.titel = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(titel); - this.genre = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(genre); - System.out.println("synop was:" + synop); - this.synop = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(synop); - System.out.println("synop werd:" + synop); - this.presentatie = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(presentatie); - this.acteursnamen_rolverdeling = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(acteursnamen_rolverdeling); - this.regisseur = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(regisseur); - } - + public void fixup(Programme p) { + this.titel = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(titel); + this.genre = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(genre); + this.synop = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(synop); + if (synop.isEmpty() && ( genre.toLowerCase().equals("movies") || genre.toLowerCase().equals("film"))) { + System.out.println("Splitting title: \"" + p.titel + "\""); + String[] parts = p.titel.split("[[:space:]]*:[[:space:]]*", 2); + titel = parts[0].trim(); + p.titel = titel; + synop = parts[1].trim(); + System.out.println("Splitting title to : \"" + p.titel + "\"; synop: \"" + synop + "\""); + } + this.presentatie = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(presentatie); + this.acteursnamen_rolverdeling = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(acteursnamen_rolverdeling); + this.regisseur = org.apache.commons.lang.StringEscapeUtils.unescapeHtml(regisseur); + } public String getDb_id() { return db_id; 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 507f135..127cd5f 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/TvGids.java @@ -93,6 +93,7 @@ public class TvGids { //System.out.println( "id: " + zender.getString("id")); //System.out.println( "name: " + zender.getString("name")); Channel c = new Channel(zender.getInt("id"), zender.getString("name"), zender.getString("name_short")); + c.setIconUrl("http://tvgidsassets.nl/img/channels/53x27/" + c.id + ".png"); c.fixup(); result.add(c); } @@ -146,7 +147,12 @@ public class TvGids { Programme p = (Programme) JSONObject.toBean(programme, Programme.class); p.fixup(); if (fetchDetails) { - p.details = getDetails(p.db_id); + p.details = cache.getDetails(p.db_id); + if ( p.details == null ) { + p.details = getDetails(p.db_id); + p.details.fixup(p); + cache.add(p.db_id, p.details); + } } p.channel = c; result.add( p ); @@ -182,16 +188,9 @@ public class TvGids { } private ProgrammeDetails getDetails(String db_id) throws Exception { - ProgrammeDetails d = cache.getDetails(db_id); - if ( d != null ) { - return d; - } URL url = detailUrl(db_id); JSONObject json = fetchJSON(url); //System.out.println( json ); - d = (ProgrammeDetails) JSONObject.toBean(json, ProgrammeDetails.class); - d.fixup(); - cache.add(db_id, d); - return d; + return (ProgrammeDetails) JSONObject.toBean(json, ProgrammeDetails.class); } } 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 953d121..889326a 100644 --- a/tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java +++ b/tv_grab_nl_java/src/org/vanbest/xmltv/XmlTvWriter.java @@ -50,10 +50,17 @@ public class XmlTvWriter { for(Channel c: channels) { writer.writeStartElement("channel"); writer.writeAttribute("id", c.getChannelId()); - writer.writeStartElement("display-name"); - writer.writeAttribute("lang", "nl"); - writer.writeCharacters(c.name); - writer.writeEndElement(); + writer.writeStartElement("display-name"); + writer.writeAttribute("lang", "nl"); + writer.writeCharacters(c.name); + writer.writeEndElement(); + + if (c.iconUrl != null) { + writer.writeStartElement("icon"); + writer.writeAttribute("src", c.iconUrl); + writer.writeEndElement(); + } + writer.writeEndElement(); writer.writeCharacters("\n"); }