]> www.vanbest.org Git - tv_grab_nl_java/commitdiff
Nog wat geklust aan RTL
authorJan-Pascal van Best <janpascal@vanbest.org>
Wed, 28 Mar 2012 19:51:09 +0000 (21:51 +0200)
committerJan-Pascal van Best <janpascal@vanbest.org>
Wed, 28 Mar 2012 19:51:09 +0000 (21:51 +0200)
pom.xml
src/main/java/org/vanbest/xmltv/RTL.java

diff --git a/pom.xml b/pom.xml
index 7b7957601da04c3bed64345658456147576e7c2c..48be73dbc850b9f6b8c978e726aa6e8e4f444e1e 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                        <artifactId>commons-lang</artifactId>
                        <version>2.6</version>
                </dependency>
+               <dependency>
+                       <groupId>org.hsqldb</groupId>
+                       <artifactId>hsqldb</artifactId>
+                       <version>2.2.8</version>
+               </dependency>
        </dependencies>
        <build>
                <plugins>
index 45804a8f5b4f2efff0034222f64f8bccb062fabb..430cd8ec3860537d976233ae631f19e19728671e 100644 (file)
@@ -6,6 +6,11 @@ import java.io.IOException;
 import java.io.InputStreamReader;\r
 import java.net.MalformedURLException;\r
 import java.net.URL;\r
+import java.sql.Connection;\r
+import java.sql.DriverManager;\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+import java.sql.Statement;\r
 import java.text.ParseException;\r
 import java.text.SimpleDateFormat;\r
 import java.util.ArrayList;\r
@@ -35,6 +40,7 @@ import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;\r
 \r
 import org.vanbest.xmltv.EPGSource.Stats;\r
+import org.w3c.dom.DOMException;\r
 import org.w3c.dom.Document;\r
 import org.w3c.dom.Element;\r
 import org.w3c.dom.Node;\r
@@ -49,6 +55,13 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
        private static final String xmltv_channel_suffix = ".rtl.nl";\r
        private static final int MAX_PROGRAMMES_PER_DAY = 99999;\r
        \r
+       private Connection db;\r
+       \r
+       String[] xmlKeys = {"zendernr", "pgmsoort", "genre", "bijvnwlanden", "ondertiteling", "begintijd", "titel", \r
+                       "site_path", "wwwadres", "presentatie", "omroep", "eindtijd", "inhoud", "tt_inhoud", "alginhoud", "afl_titel", "kijkwijzer" };\r
+               \r
+       Map<String,Integer> xmlKeyMap = new HashMap<String,Integer>();\r
+       \r
        class RTLException extends Exception {\r
                public RTLException(String s) {\r
                        super(s);\r
@@ -57,6 +70,29 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
        \r
        public RTL(Config config) {\r
                super(config);\r
+               try {\r
+                       db = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "SA", "");\r
+                       Statement stat = db.createStatement();\r
+                       StringBuilder s = new StringBuilder();\r
+                       s.append("CREATE TABLE IF NOT EXISTS prog (id VARCHAR(32) primary key, ");\r
+                       int i=0;\r
+                       for( String key: xmlKeys) {\r
+                               if(i>0) s.append(", ");\r
+                               xmlKeyMap.put(key, i+1);\r
+                               s.append(key);\r
+                               s.append(" VARCHAR(4096)");\r
+                               i++;\r
+                       }\r
+                       s.append(");");\r
+                       System.out.println(s);\r
+                       stat.execute(s.toString());\r
+                       stat.execute("TRUNCATE TABLE prog");\r
+               } catch (SQLException e) {\r
+                       // TODO Auto-generated catch block\r
+                       e.printStackTrace();\r
+                       System.exit(1);\r
+                       db = null;\r
+               }\r
        }\r
 \r
        public List<Channel> getChannels() {\r
@@ -128,11 +164,26 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
                Element root = xml.getDocumentElement();\r
                if (root.hasAttributes()) {\r
                        System.out.println("Unknown attributes for RTL detail root node");\r
+               }\r
+               StringBuilder sql = new StringBuilder("INSERT INTO prog (id");\r
+               StringBuilder sql2= new StringBuilder(") values (?");\r
+               for(String key:xmlKeys) {\r
+                       sql.append(",");\r
+                       sql.append(key);\r
+                       sql2.append(",");\r
+                       sql2.append("?");\r
+               }\r
+               sql.append(sql2);\r
+               sql.append(");");\r
+               // System.out.println(sql.toString());\r
+               PreparedStatement stat = db.prepareStatement(sql.toString());\r
+               stat.setString(1, id);\r
+               for(String key:xmlKeys) {\r
+                       \r
                }\r
                NodeList nodes = root.getChildNodes();\r
                for( int i=0; i<nodes.getLength(); i++) {\r
                        Node n = nodes.item(i);\r
-                       System.out.println(n.getNodeName());\r
                        if (!n.getNodeName().equals("uitzending_data_item")) {\r
                                System.out.println("Ignoring RTL detail, tag " + n.getNodeName() +", full xml:");\r
                                Transformer t = TransformerFactory.newInstance().newTransformer();\r
@@ -144,7 +195,7 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
                        NodeList subnodes = n.getChildNodes();\r
                        for( int j=0; j<subnodes.getLength(); j++) {\r
                                try {\r
-                                       handleNode(prog, date, subnodes.item(j));\r
+                                       handleNode(prog, date, stat, subnodes.item(j));\r
                                } catch (RTLException e) {\r
                                        System.out.println(e.getMessage());\r
                                        Transformer t = TransformerFactory.newInstance().newTransformer();\r
@@ -153,15 +204,29 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
                                        continue;\r
                                }\r
                        }\r
+                       System.out.println(stat.toString());\r
+                       stat.execute();\r
                }\r
        }\r
 \r
        \r
-       private void handleNode(Programme prog, Date date, Node n) throws RTLException {\r
+       private void handleNode(Programme prog, Date date, PreparedStatement stat, Node n) throws RTLException, DOMException, SQLException {\r
                if (n.getNodeType() != Node.ELEMENT_NODE) {\r
                        throw new RTLException("Ignoring non-element node " + n.getNodeName());\r
                }\r
+               if (n.hasAttributes()) {\r
+                       throw new RTLException("Unknown attributes for RTL detail node " + n.getNodeName());\r
+               }\r
+               if (n.hasChildNodes()) {\r
+                       NodeList list = n.getChildNodes();\r
+                       for( int i=0; i<list.getLength(); i++) {\r
+                               if(list.item(i).getNodeType() == Node.ELEMENT_NODE) {\r
+                                       throw new RTLException("RTL detail node " + n.getNodeName() + " has unexpected child element " + list.item(i).getNodeName());\r
+                               }\r
+                       }\r
+               }\r
                Element e = (Element)n;\r
+               stat.setString(xmlKeyMap.get(e.getTagName())+1, e.getTextContent());\r
                switch (e.getTagName()) {\r
                case "genre":\r
                        prog.addCategory(config.translateCategory(e.getTextContent()));\r
@@ -169,6 +234,22 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
                case "eindtijd":\r
                        prog.endTime = parseTime(date, e.getTextContent());\r
                        break;\r
+               case "omroep":\r
+               case "kijkwijzer":\r
+               case "presentatie":\r
+               case "wwwadres":\r
+               case "alginhoud":\r
+               case "inhoud":\r
+               case "tt_inhoud":\r
+               case "zendernr":\r
+               case "titel":\r
+               case "bijvnwlanden":\r
+               case "afl_titel":\r
+               case "site_path":\r
+               case "ondertiteling":\r
+               case "begintijd":\r
+               case "pgmsoort":\r
+                       break;\r
                default:\r
                        throw new RTLException("Ignoring unknown tag " + n.getNodeName() + ", content: \"" + e.getTextContent() + "\"");\r
                }\r
@@ -250,6 +331,7 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
         */\r
        public static void main(String[] args) {\r
                Config config = Config.getDefaultConfig();\r
+               System.exit(0);\r
                RTL rtl = new RTL(config);\r
                try {\r
                        List<Channel> channels = rtl.getChannels();\r
@@ -262,7 +344,8 @@ public class RTL extends AbstractEPGSource implements EPGSource  {
                        writer.writeCharacters("\n");\r
                        writer.writeStartElement("tv");\r
                        for(Channel c: channels) {c.serialize(writer);}\r
-                       List<Programme> programmes = rtl.getProgrammes1(channels.subList(0, 3), 0, true);\r
+                       //List<Programme> programmes = rtl.getProgrammes1(channels.subList(0, 13), 0, true);\r
+                       List<Programme> programmes = rtl.getProgrammes1(channels, 0, true);\r
                        for(Programme p: programmes) {p.serialize(writer);}\r
                        writer.writeEndElement();\r
                        writer.writeEndDocument();\r