use of com.sun.syndication.feed.rss.Channel in project sis by apache.
the class LocationServlet method init.
/**
* Read GeoRSS data (location information provide sis-location-config.xml )
* and build quad-tree.
*
* @param config
* Servlet configuration file
* @exception ServletException
* General exception for servlet
*/
@SuppressWarnings("unchecked")
public void init(ServletConfig config) throws ServletException {
this.context = config.getServletContext();
long startTime = 0;
long endTime = 0;
int capacity = -1, depth = -1;
this.qtreeIdxPath = this.context.getInitParameter("org.apache.sis.services.config.qIndexPath");
this.georssStoragePath = this.context.getInitParameter("org.apache.sis.services.config.geodataPath");
if (!this.qtreeIdxPath.endsWith("/"))
this.qtreeIdxPath += "/";
if (!this.georssStoragePath.endsWith("/"))
this.georssStoragePath += "/";
InputStream indexStream = null;
try {
indexStream = new FileInputStream(qtreeIdxPath + "node_0.txt");
} catch (FileNotFoundException e) {
System.out.println("[INFO] Existing qtree index at: [" + qtreeIdxPath + "] not found. Creating new index.");
}
if (indexStream != null) {
startTime = System.currentTimeMillis();
this.tree = QuadTreeReader.readFromFile(qtreeIdxPath, "tree_config.txt", "node_0.txt");
try {
indexStream.close();
} catch (IOException e) {
e.printStackTrace();
}
endTime = System.currentTimeMillis();
this.timeToLoad = "Quad Tree fully loaded from index files in " + Double.toString((endTime - startTime) / 1000L) + " seconds";
System.out.println("[INFO] Finished loading tree from stored index");
} else {
startTime = System.currentTimeMillis();
WireFeedInput wf = new WireFeedInput(true);
// read quad tree properties set in config xml file
InputStream configStream = null;
try {
configStream = new FileInputStream(this.context.getInitParameter("org.apache.sis.services.config.filePath"));
} catch (Exception e) {
e.printStackTrace();
}
if (configStream != null) {
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document configDoc = docBuilder.parse(configStream);
NodeList capacityNode = configDoc.getElementsByTagName("capacity");
if (capacityNode.item(0) != null) {
capacity = Integer.parseInt(capacityNode.item(0).getFirstChild().getNodeValue());
}
NodeList depthNode = configDoc.getElementsByTagName("depth");
if (depthNode.item(0) != null) {
depth = Integer.parseInt(depthNode.item(0).getFirstChild().getNodeValue());
}
// TODO make this
this.tree = new QuadTree(capacity, depth);
// configurable
NodeList urlNodes = configDoc.getElementsByTagName("url");
for (int i = 0; i < urlNodes.getLength(); i++) {
// read in georss and build tree
String georssUrlStr = urlNodes.item(i).getFirstChild().getNodeValue();
WireFeed feed = null;
try {
feed = wf.build(new XmlReader(new URL(georssUrlStr)));
} catch (Exception e) {
System.out.println("[ERROR] Error obtaining geodata url: [" + georssUrlStr + "]: Message: " + e.getMessage() + ": skipping and continuing");
continue;
}
Channel c = (Channel) feed;
List<Item> items = (List<Item>) c.getItems();
for (Item item : items) {
GeoRSSModule geoRSSModule = (GeoRSSModule) item.getModule(GeoRSSModule.GEORSS_GEORSS_URI);
if (geoRSSModule == null)
geoRSSModule = (GeoRSSModule) item.getModule(GeoRSSModule.GEORSS_GML_URI);
if (geoRSSModule == null)
geoRSSModule = (GeoRSSModule) item.getModule(GeoRSSModule.GEORSS_W3CGEO_URI);
// then discard it
if (geoRSSModule != null && geoRSSModule.getPosition() != null) {
String filename = "";
if (item.getGuid() != null)
filename = cleanStr(item.getGuid().getValue()) + ".txt";
else
filename = cleanStr(item.getLink()) + ".txt";
GeoRSSData data = new GeoRSSData(filename, new DirectPosition2D(geoRSSModule.getPosition().getLongitude(), geoRSSModule.getPosition().getLatitude()));
if (this.tree.insert(data)) {
data.saveToFile(item, geoRSSModule, georssStoragePath);
} else {
System.out.println("[INFO] Unable to store data at location " + data.getLatLon().y + ", " + data.getLatLon().x + " under filename " + data.getFileName());
}
}
}
}
configStream.close();
endTime = System.currentTimeMillis();
this.timeToLoad = "Quad Tree fully loaded from retrieving GeoRSS files over the network in " + Double.toString((endTime - startTime) / 1000L) + " seconds";
QuadTreeWriter.writeTreeToFile(tree, qtreeIdxPath);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
} else {
throw new ServletException("Unable to read location service XML config: null!");
}
}
}
use of com.sun.syndication.feed.rss.Channel in project halo by ruibaby.
the class HaloUtil method getRss.
/**
* 生成rss
* @param posts posts
* @return string
* @throws FeedException
*/
public static String getRss(List<Post> posts) throws FeedException {
Channel channel = new Channel("rss_2.0");
if (null == HaloConst.OPTIONS.get("site_title")) {
channel.setTitle("");
} else {
channel.setTitle(HaloConst.OPTIONS.get("site_title"));
}
if (null == HaloConst.OPTIONS.get("site_url")) {
channel.setLink("");
} else {
channel.setLink(HaloConst.OPTIONS.get("site_url"));
}
if (null == HaloConst.OPTIONS.get("seo_desc")) {
channel.setDescription("");
} else {
channel.setDescription(HaloConst.OPTIONS.get("seo_desc"));
}
channel.setLanguage("zh-CN");
List<Item> items = new ArrayList<>();
for (Post post : posts) {
Item item = new Item();
item.setTitle(post.getPostTitle());
Content content = new Content();
String value = post.getPostContent();
char[] xmlChar = value.toCharArray();
for (int i = 0; i < xmlChar.length; ++i) {
if (xmlChar[i] > 0xFFFD) {
xmlChar[i] = ' ';
} else if (xmlChar[i] < 0x20 && xmlChar[i] != 't' & xmlChar[i] != 'n' & xmlChar[i] != 'r') {
xmlChar[i] = ' ';
}
}
value = new String(xmlChar);
content.setValue(value);
item.setContent(content);
item.setLink(HaloConst.OPTIONS.get("site_url") + "/article/" + post.getPostUrl());
item.setPubDate(post.getPostDate());
items.add(item);
}
channel.setItems(items);
WireFeedOutput out = new WireFeedOutput();
return out.outputString(channel);
}
use of com.sun.syndication.feed.rss.Channel in project tale by otale.
the class TaleUtils method getRssXml.
/**
* 获取RSS输出
*/
public static String getRssXml(java.util.List<Contents> articles) throws FeedException {
Channel channel = new Channel("rss_2.0");
channel.setTitle(TaleConst.OPTIONS.get("site_title", ""));
channel.setLink(Commons.site_url());
channel.setDescription(TaleConst.OPTIONS.get("site_description", ""));
channel.setLanguage("zh-CN");
java.util.List<Item> items = new ArrayList<>();
articles.forEach(post -> {
Item item = new Item();
item.setTitle(post.getTitle());
Content content = new Content();
String value = Theme.article(post.getContent());
char[] xmlChar = value.toCharArray();
for (int i = 0; i < xmlChar.length; ++i) {
if (xmlChar[i] > 0xFFFD) {
// 直接替换掉0xb
xmlChar[i] = ' ';
} else if (xmlChar[i] < 0x20 && xmlChar[i] != 't' & xmlChar[i] != 'n' & xmlChar[i] != 'r') {
// 直接替换掉0xb
xmlChar[i] = ' ';
}
}
value = new String(xmlChar);
content.setValue(value);
item.setContent(content);
item.setLink(Theme.permalink(post.getCid(), post.getSlug()));
item.setPubDate(DateKit.toDate(post.getCreated()));
items.add(item);
});
channel.setItems(items);
WireFeedOutput out = new WireFeedOutput();
return out.outputString(channel);
}
Aggregations