利用Java得到RSS源的内容
利用Java得到RSS源的内容
IRSSParser.java
- public interface IRSSParser {
- RSSChannel parseRSS() throws RSSException;
- }
RSSChannel.java (对应<channel>标签)
- public class RSSChannel implements Serializable {
- private Map<String, String> kv;
- private List<RSSItem> items;
- public RSSChannel() {
- kv = new HashMap<String, String>();
- items = new ArrayList<RSSItem>();
- }
- public List<RSSItem> getItems() {
- return items;
- }
- public void addItems(RSSItem item) {
- items.add(item);
- }
- public void set(String key, String value) {
- kv.put(key, value);
- }
- public String get(String key) {
- return kv.get(key);
- }
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("[/n");
- Set<String> keySet = kv.keySet();
- Iterator<String> keyIter = keySet.iterator();
- while(keyIter.hasNext()) {
- String key = keyIter.next();
- String value = kv.get(key);
- sb.append(key + "=" + value + "/n");
- }
- for (int i = 0; i < items.size(); i++) {
- RSSItem item = items.get(i);
- sb.append(item.toString() + "/n");
- }
- sb.append("]/n");
- return sb.toString();
- }
- }
RSSItem.java (对应<item>标签)
- public class RSSItem implements Serializable {
- private Map<String, String> kv;
- public RSSItem() {
- kv = new HashMap<String, String>();
- }
- public void set(String key, String value) {
- kv.put(key, value);
- }
- public String get(String key) {
- return kv.get(key);
- }
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("[/n");
- Set<String> keySet = kv.keySet();
- Iterator<String> keyIter = keySet.iterator();
- while(keyIter.hasNext()) {
- String key = keyIter.next();
- String value = kv.get(key);
- sb.append(key + "=" + value + "/n");
- }
- sb.append("]");
- return sb.toString();
- }
- }
RSSException.java
- public class RSSException extends Exception {
- public RSSException() {
- super();
- }
- public RSSException(Throwable t) {
- super(t);
- }
- public RSSException(String error) {
- super(error);
- }
- public RSSException(String error, Throwable t) {
- super(error, t);
- }
- }
DefaultRSSParser.java
- public class DefaultRSSParser implements IRSSParser {
- private static final Log logger = LogFactory.getLog(DefaultRSSParser.class);
- private String url;
- private WebClient browser = new WebClient();
- public DefaultRSSParser(String url) {
- this.url = url;
- }
- private Document createDOMDocument() throws RSSException {
- try {
- WebResponse rssResp = browser.doGet(url);
- String encoding = rssResp.getEncoding();
- String rssContent = rssResp.getBodyAsString();
- DocumentBuilderFactory docBuilderFac = DocumentBuilderFactory
- .newInstance();
- DocumentBuilder docBuilder = docBuilderFac.newDocumentBuilder();
- InputSource is = new InputSource(new ByteArrayInputStream(
- rssContent.getBytes(encoding)));
- Document doc = docBuilder.parse(is);
- return doc;
- } catch (Exception e) {
- logger.error("CreateDOMDocument Error", e);
- throw new RSSException("CreateDOMDocument Error", e);
- }
- }
- private RSSChannel parseForChannel(Document doc) {
- RSSChannel rssChannel = new RSSChannel();
- NodeList channelNodeList = doc.getElementsByTagName("channel");
- Node channel = channelNodeList.item(0);
- NodeList childsOfChannel = channel.getChildNodes();
- for (int i = 0; i < childsOfChannel.getLength(); i++) {
- Node childOfChannel = childsOfChannel.item(i);
- if (childOfChannel.getNodeType() != Node.TEXT_NODE) {
- String nodeName = childOfChannel.getNodeName();
- if (!nodeName.equals("item")) {
- String name = childOfChannel.getNodeName();
- String value = childOfChannel.getTextContent();
- rssChannel.set(name, value);
- }
- }
- }
- return rssChannel;
- }
- private List<RSSItem> parseForItem(Document doc) {
- List<RSSItem> rssItems = new ArrayList<RSSItem>();
- NodeList itemNodeList = doc.getElementsByTagName("item");
- for (int i = 0; i < itemNodeList.getLength(); i++) {
- RSSItem rssItem = new RSSItem();
- Node item = itemNodeList.item(i);
- NodeList childsOfItem = item.getChildNodes();
- for (int j = 0; j < childsOfItem.getLength(); j++) {
- Node node = childsOfItem.item(j);
- if (node.getNodeType() != Node.TEXT_NODE) {
- String name = node.getNodeName();
- String value = node.getTextContent();
- rssItem.set(name, value);
- }
- }
- rssItems.add(rssItem);
- }
- return rssItems;
- }
- public RSSChannel parseRSS() throws RSSException {
- Document doc = createDOMDocument();
- RSSChannel channel = parseForChannel(doc);
- List<RSSItem> items = parseForItem(doc);
- for (int i = 0; i < items.size(); i++) {
- channel.addItems(items.get(i));
- }
- return channel;
- }
- }
RSSTest.java
- public class RSSTest {
- public static void main(String[] args) {
- try {
- //String url = "http://blog.sina.com.cn/rss/daodaodog.xml";
- String url = "http://rss.sina.com.cn/tech/rollnews.xml";
- IRSSParser parser = new DefaultRSSParser(url);
- RSSChannel channel = parser.parseRSS();
- System.out.println(channel.toString());
- } catch (RSSException e) {
- e.printStackTrace();
- }
- }
- }
利用Java得到RSS源的内容相关推荐
- [ Coding七十二绝技 ] 如何利用Java异常快速分析源码
[ Coding七十二绝技 ] 如何利用Java异常快速分析源码 参考文章: (1)[ Coding七十二绝技 ] 如何利用Java异常快速分析源码 (2)https://www.cnblogs.co ...
- JAVA抽象类空指针异常_[ Coding七十二绝技 ] 如何利用Java异常快速分析源码
前言 异常一个神奇的东西,让广大程序员对它人又爱又恨. 爱它,通过它能快速定位错误,经过层层磨难能学到很多逼坑大法. 恨他,快下班的时刻,周末的早晨,它踏着七彩云毫无征兆的来了. 今天,要聊的是它的一 ...
- 利用Java通过阿里云对图片进行内容审核
怎样用阿里云对图片进行内容审核 背景 随着互联网的发展,每个人都在网络上留下了自己的痕迹,在享受网络带来的便利的同时,去维护干净的网络环境也至关重要:目前在网络上会流动数亿的图片,显然使用纯手工去辨别 ...
- java 8 Stream流大全,讲解java 8 stream源码内容
写这篇文章,主要是记录java8 stream流的用法,博主也是查阅了一些资料,结合源码总结出stream流的主要用法,篇幅比较长,需要耐心看. 目录 filter过滤 map获取属性并return值 ...
- excel教程的rss源_在Excel工作表上显示RSS源
excel教程的rss源 As you've heard, Google Reader will be disappearing in a few months <sigh>, and w ...
- 简谈RSS——巧用Feed43制作自定义RSS源
01 前言 RSS是什么,此处就不再赘述.简单说,是一种"主动"获取信息(比如新闻时事)的方式,还可以用于定时监控指定网站的信息更新(比如有段时间曾用来监控某政府采购网站的采购信息 ...
- Lerx开源网站内容管理系统(CMS) v6.5 以Java+MySQL进行开发的内容管理系统源码
介绍 Lerx 开源网站内容管理系统(CMS)是一个以Java+MySQL进行开发的内容管理系统源码. Lerx 开源网站内容管理系统(CMS)特点: 1.跨平台设计,能无差别运行于Windows.L ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)...
最近看老罗的视频,跟着完成了利用Java操作MySQL数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- mysql封装 javabean,利用Java针对MySql封装的jdbc框架类JdbcUtils完整实现(包含增删改查、JavaBean反射原理,附源码)...
最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
最新文章
- ASP.NET Core 使用UrlFirewall对请求进行过滤
- 用C语言程序实现黎曼和求定积分
- ActionScript 3.0
- adb命令重置_android – 擦除数据/通过ADB恢复出厂设置
- Eclipse用法和技巧十二:快速复制一行
- Matlab图形修饰之裁剪处理
- thymeleaf完善前端界面 | 从0开始构建SpringCloud微服务(4)
- 一篇不错的v4l2 (实用)
- SQL往表里添加字段
- cf 467 B. Sleepy Game
- 经验分享:半小时建立自己的在线管理系统!
- 智能窗帘控制(光、红外、时间)
- 用户画像标签数据存储之Hive存储
- vue2.0移动端 使用vue-pdf插件实现PDF文件流在线预览
- Android常见设计模式——观察者模式 (Observer Pattern)
- VBS脚本病毒总结与分析
- 还有什么苦,是这届年轻人在理财中吃过的?
- 学习英语的历史性转折
- ei eo eq什么意思_CMMI之功能点估算法:EI、EQ和EO
- Linux时间同步:chrony
热门文章
- Mac下使用rz和sz命令
- ios越狱工具linux版下载,适配iOS11~13.5及全系设备:最新越狱工具发布下载、附教程...
- 高端台式计算机配置清单,电脑主机什么配置好,台式电脑最强组装配置清单推荐...
- 网站服务器升级中...,网球训练:网球的多球训练
- 无麸质麦芽提取物行业调研报告 - 市场现状分析与发展前景预测
- 让一句话生成一张二维码图片
- uLua,一个Unity+Lua热更新解决方案!
- java jsse ssl 调试_使用Java安全Socket扩展包(JSSE)实现SSL
- Word文档中文翻译成英文的方法
- 越来越火的Serverless(无服务器计算),到底是个啥?