From: erik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0> Date: Sun, 19 Mar 2006 23:00:33 +0000 (+0000) Subject: (no commit message) X-Git-Tag: BEFORE_MAVEN_MIGRATION~180 X-Git-Url: http://wamblee.org/gitweb/?a=commitdiff_plain;h=6c7f7d120917060908107005b3260f42b93a6a6e;p=utils --- diff --git a/.classpath b/.classpath index 751d4442..1cec05af 100644 --- a/.classpath +++ b/.classpath @@ -53,5 +53,6 @@ <classpathentry kind="lib" path="crawler/kiss/lib/external/activation.jar"/> <classpathentry kind="lib" path="crawler/kiss/lib/external/mail.jar"/> <classpathentry kind="lib" path="crawler/kiss/lib/external/xerces-2.4.0.jar"/> + <classpathentry kind="lib" path="crawler/kiss/lib/external/commons-email-1.0.jar"/> <classpathentry kind="output" path="support/testbin"/> </classpath> diff --git a/build/header.xml b/build/header.xml index 196a32b4..689d5ca7 100644 --- a/build/header.xml +++ b/build/header.xml @@ -81,6 +81,15 @@ </antcall> </target> +<target name="commons-email.d"> + <antcall target="download.dep"> + <param name="group" value="commons-email"/> + <param name="version" value="1.0"/> + </antcall> +</target> + + + <target name="logging.d" depends="log4j.d,commons-logging.d"> </target> diff --git a/crawler/kiss/build.xml b/crawler/kiss/build.xml index ed756b4b..f7b685a8 100644 --- a/crawler/kiss/build.xml +++ b/crawler/kiss/build.xml @@ -17,7 +17,7 @@ &header; <target name="module.build.deps" - depends="logging.d,mail.d,commons-beanutils.d,commons-codec.d,dom4j.d,xerces.d,httpclient.d,jtidy.d,wamblee.support.d,wamblee.crawler.d"> + depends="logging.d,mail.d,commons-email.d,commons-beanutils.d,commons-codec.d,dom4j.d,xerces.d,httpclient.d,jtidy.d,wamblee.support.d,wamblee.crawler.d"> </target> <!-- Set libraries to use in addition for test, a library which diff --git a/crawler/kiss/conf/kiss/programs.xml b/crawler/kiss/conf/kiss/programs.xml index c0bf4e83..fe16c08b 100644 --- a/crawler/kiss/conf/kiss/programs.xml +++ b/crawler/kiss/conf/kiss/programs.xml @@ -1,4 +1,8 @@ <programs> + + <program> + <match>wintertijd</match> + </program> <program> <category>horror</category> diff --git a/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java b/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java index 29d7c849..0549e48f 100644 --- a/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java +++ b/crawler/kiss/src/org/wamblee/crawler/kiss/KissCrawler.java @@ -16,6 +16,7 @@ package org.wamblee.crawler.kiss; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -24,6 +25,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Properties; @@ -36,10 +38,16 @@ import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; +import javax.xml.transform.TransformerException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.commons.mail.EmailException; +import org.apache.commons.mail.HtmlEmail; +import org.apache.xml.serialize.OutputFormat; +import org.apache.xml.serialize.XMLSerializer; +import org.w3c.dom.Document; import org.wamblee.crawler.Action; import org.wamblee.crawler.Configuration; import org.wamblee.crawler.Crawler; @@ -47,6 +55,8 @@ import org.wamblee.crawler.Page; import org.wamblee.crawler.PageException; import org.wamblee.crawler.impl.ConfigurationParser; import org.wamblee.crawler.impl.CrawlerImpl; +import org.wamblee.io.FileResource; +import org.wamblee.xml.XSLT; /** * The KiSS crawler for automatic recording of interesting TV shows. @@ -160,15 +170,13 @@ public class KissCrawler { ProgramActionExecutor executor = new ProgramActionExecutor(); for (ProgramFilter filter : aProgramCondition) { List<Program> programs = filter.apply(aGuide); - ProgramAction action = filter.getAction(); - for (Program program: programs) { + ProgramAction action = filter.getAction(); + for (Program program : programs) { action.execute(program, executor); } } executor.commit(); - String msg = executor.getReport(); - System.out.println(msg); - sendMail(msg); + sendMail(executor); } /** @@ -274,8 +282,8 @@ public class KissCrawler { keywords = programInfo.getContent().element("keywords") .getText().trim(); } catch (PageException e) { - LOG - .warn("Program details could not be determined for '" + LOG.warn( + "Program details could not be determined for '" + action.getName() + "'", e); } } @@ -297,22 +305,42 @@ public class KissCrawler { * @throws MessagingException * In case of problems sending mail. */ - private void sendMail(String aText) throws MessagingException { + private void sendMail(ProgramActionExecutor aExecutor) throws MessagingException { + String textReport = aExecutor.getReport(); + System.out.println("Text report: \n" + textReport); + System.out.println("XML report:\n" + aExecutor.getXmlReport().asXML()); + + Properties props = new Properties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.host", "falcon"); props.put("mail.smtp.port", "25"); Session mailSession = Session.getInstance(props); - Message message = new MimeMessage(mailSession); - - message.setFrom(new InternetAddress("erik@brakkee.org")); - message.setRecipient(Message.RecipientType.TO, new InternetAddress( - "erik@brakkee.org")); - message.setSentDate(new Date()); - message.setSubject("KiSS crawler update"); - message.setText(aText); - Transport.send(message); + InternetAddress from = new InternetAddress("erik@brakkee.org"); + + HtmlEmail mail = new HtmlEmail(); + mail.setMailSession(mailSession); + try { + mail.setFrom("erik@brakkee.org"); + mail.setTo(Arrays.asList(new InternetAddress[] { from })); + mail.setSentDate(new Date()); + mail.setSubject("KiSS Crawler Update"); + String html = aExecutor.getXmlReport().asXML(); + Document document = new XSLT().transform(html.getBytes(), new FileResource(new File("reportToHtml.xsl"))); + ByteArrayOutputStream xhtml = new ByteArrayOutputStream(); + XMLSerializer serializer = new XMLSerializer(xhtml, new OutputFormat()); + serializer.serialize(document); + mail.setHtmlMsg(xhtml.toString()); + mail.setTextMsg(textReport); + mail.send(); + } catch (EmailException e) { + throw new RuntimeException(e); + } catch (TransformerException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/crawler/kiss/src/org/wamblee/crawler/kiss/Program.java b/crawler/kiss/src/org/wamblee/crawler/kiss/Program.java index 89c3c88c..c80fea24 100644 --- a/crawler/kiss/src/org/wamblee/crawler/kiss/Program.java +++ b/crawler/kiss/src/org/wamblee/crawler/kiss/Program.java @@ -20,6 +20,8 @@ import java.util.Comparator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.dom4j.DocumentFactory; +import org.dom4j.Element; import org.wamblee.crawler.Action; import org.wamblee.crawler.Page; import org.wamblee.crawler.PageException; @@ -263,4 +265,21 @@ public class Program { return getName().equals(program.getName()) && _programInfo.equals(program._programInfo); } + + /** + * Converts program information to XML. + * @return XML representation of program information. + */ + public Element asXml() { + DocumentFactory factory = DocumentFactory.getInstance(); + Element program = factory.createElement("program"); + program.addElement("name").setText(getName()); + program.addElement("description").setText(getDescription()); + program.addElement("keywords").setText(getKeywords()); + program.addElement("channel").setText(getChannel()); + Element interval = program.addElement("interval"); + interval.addElement("begin").setText(getInterval().getBegin().toString()); + interval.addElement("end").setText(getInterval().getEnd().toString()); + return program; + } } diff --git a/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramActionExecutor.java b/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramActionExecutor.java index 8303449e..87d417be 100644 --- a/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramActionExecutor.java +++ b/crawler/kiss/src/org/wamblee/crawler/kiss/ProgramActionExecutor.java @@ -22,6 +22,8 @@ import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import org.dom4j.DocumentFactory; +import org.dom4j.Element; import org.wamblee.crawler.kiss.Program.RecordingResult; /** @@ -134,4 +136,41 @@ public class ProgramActionExecutor { return msg.toString(); } + + /** + * Get report as XML. + * @return XML report + */ + public Element getXmlReport() { + DocumentFactory factory = DocumentFactory.getInstance(); + Element report = factory.createElement("report"); + + for (RecordingResult result : RecordingResult.values()) { + if (_recordings.get(result).size() > 0) { + Element recordingResult = report.addElement("recorded").addAttribute("result", result.toString()); + + for (Program program : _recordings.get(result)) { + recordingResult.add(program.asXml()); + } + } + } + + + if ( _interestingShows.size() > 0 ) { + Element interesting = report.addElement("interesting"); + for (String category: _interestingShows.keySet()) { + Element categoryElem = interesting; + if ( category.length() > 0 ) { + categoryElem = interesting.addElement("category"); + categoryElem.addAttribute("name", category); + } + for (Program program: _interestingShows.get(category)) { + categoryElem.add(program.asXml()); + } + } + + } + + return report; + } }