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
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
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
\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
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
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
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
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
*/\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
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