1
22
23 package com.liferay.portlet.news.util;
24
25 import com.liferay.portal.util.WebCacheable;
26 import com.liferay.portlet.news.model.Article;
27 import com.liferay.portlet.news.model.News;
28 import com.liferay.util.ConverterException;
29 import com.liferay.util.Http;
30 import com.liferay.util.Time;
31
32 import java.io.ByteArrayInputStream;
33
34 import java.text.DateFormat;
35 import java.text.SimpleDateFormat;
36
37 import java.util.ArrayList;
38 import java.util.Iterator;
39 import java.util.List;
40
41 import org.dom4j.Document;
42 import org.dom4j.Element;
43 import org.dom4j.io.SAXReader;
44
45
51 public class NewsConverter implements WebCacheable {
52
53 public Object convert(String text) throws ConverterException {
54 try {
55 int pos = text.indexOf(";");
56
57 String categoryName = text.substring(0, pos);
58 String feedURL = text.substring(pos + 1, text.length());
59 String xml = Http.URLtoString(
60 "http://p.moreover.com/cgi-local/page?" + feedURL + "&o=xml");
61
62 ByteArrayInputStream bais =
63 new ByteArrayInputStream(xml.getBytes());
64
65 Document doc = new SAXReader().read(bais);
66
67 ArrayList list = new ArrayList();
68
69 DateFormat df = new SimpleDateFormat("MMM d yyyy K:mma z");
70
71 Element root = doc.getRootElement();
72
73 List articles = root.elements("article");
74 Iterator i = articles.iterator();
75
76 while (i.hasNext()) {
77 Element article = (Element)i.next();
78
79 String harvestTime =
80 article.element("harvest_time").getTextTrim() + " GMT";
81
82 list.add(new Article(
83 article.element("headline_text").getTextTrim(),
84 article.element("url").getTextTrim(),
85 article.element("source").getTextTrim(),
86 article.element("document_url").getTextTrim(),
87 article.element("access_status").getTextTrim(),
88 article.element("access_registration").getTextTrim(),
89 df.parse(harvestTime)));
90 }
91
92 return new News(feedURL, categoryName, list);
93 }
94 catch (Exception e) {
95 throw new ConverterException(e);
96 }
97 }
98
99 public long getRefreshTime() {
100 return _REFRESH_TIME;
101 }
102
103 private static final long _REFRESH_TIME = Time.MINUTE * 20;
104
105 }