利用Java得到RSS源的内容

转载 2016年09月02日 11:12:04

利用Java得到RSS源的内容

IRSSParser.java

[c-sharp] view plain copy
  1. public interface IRSSParser {  
  2.       
  3.     RSSChannel parseRSS() throws RSSException;  
  4.       
  5. }  

 

RSSChannel.java   (对应<channel>标签)

[java] view plain copy
  1. public class RSSChannel implements Serializable {  
  2.       
  3.     private Map<String, String> kv;  
  4.     private List<RSSItem> items;  
  5.       
  6.     public RSSChannel() {  
  7.         kv = new HashMap<String, String>();  
  8.         items = new ArrayList<RSSItem>();  
  9.     }  
  10.   
  11.     public List<RSSItem> getItems() {  
  12.         return items;  
  13.     }  
  14.   
  15.     public void addItems(RSSItem item) {  
  16.         items.add(item);  
  17.     }  
  18.       
  19.     public void set(String key, String value) {  
  20.         kv.put(key, value);  
  21.     }  
  22.       
  23.     public String get(String key) {  
  24.         return kv.get(key);  
  25.     }  
  26.       
  27.     public String toString() {  
  28.         StringBuilder sb = new StringBuilder();  
  29.         sb.append("[/n");  
  30.         Set<String> keySet = kv.keySet();  
  31.         Iterator<String> keyIter = keySet.iterator();  
  32.         while(keyIter.hasNext()) {  
  33.             String key = keyIter.next();  
  34.             String value = kv.get(key);  
  35.             sb.append(key + "=" + value + "/n");  
  36.         }  
  37.         for (int i = 0; i < items.size(); i++) {  
  38.             RSSItem item = items.get(i);  
  39.             sb.append(item.toString() + "/n");  
  40.         }  
  41.         sb.append("]/n");  
  42.         return sb.toString();  
  43.     }  
  44.       
  45. }  

 

RSSItem.java  (对应<item>标签)

[java] view plain copy
  1. public class RSSItem implements Serializable {  
  2.       
  3.     private Map<String, String> kv;  
  4.       
  5.     public RSSItem() {  
  6.         kv = new HashMap<String, String>();  
  7.     }  
  8.       
  9.     public void set(String key, String value) {  
  10.         kv.put(key, value);  
  11.     }  
  12.       
  13.     public String get(String key) {  
  14.         return kv.get(key);  
  15.     }  
  16.       
  17.     public String toString() {  
  18.         StringBuilder sb = new StringBuilder();  
  19.         sb.append("[/n");  
  20.         Set<String> keySet = kv.keySet();  
  21.         Iterator<String> keyIter = keySet.iterator();  
  22.         while(keyIter.hasNext()) {  
  23.             String key = keyIter.next();  
  24.             String value = kv.get(key);  
  25.             sb.append(key + "=" + value + "/n");  
  26.         }  
  27.         sb.append("]");  
  28.         return sb.toString();  
  29.     }  
  30.       
  31. }  

 

RSSException.java

[java] view plain copy
  1. public class RSSException extends Exception {  
  2.   
  3.     public RSSException() {  
  4.         super();  
  5.     }  
  6.       
  7.     public RSSException(Throwable t) {  
  8.         super(t);  
  9.     }  
  10.       
  11.     public RSSException(String error) {  
  12.         super(error);  
  13.     }  
  14.       
  15.     public RSSException(String error, Throwable t) {  
  16.         super(error, t);  
  17.     }  
  18.       
  19. }  

 

DefaultRSSParser.java

[java] view plain copy
  1. public class DefaultRSSParser implements IRSSParser {  
  2.   
  3.     private static final Log logger = LogFactory.getLog(DefaultRSSParser.class);  
  4.   
  5.     private String url;  
  6.   
  7.     private WebClient browser = new WebClient();  
  8.   
  9.     public DefaultRSSParser(String url) {  
  10.         this.url = url;  
  11.     }  
  12.   
  13.     private Document createDOMDocument() throws RSSException {  
  14.         try {  
  15.             WebResponse rssResp = browser.doGet(url);  
  16.             String encoding = rssResp.getEncoding();  
  17.             String rssContent = rssResp.getBodyAsString();  
  18.             DocumentBuilderFactory docBuilderFac = DocumentBuilderFactory  
  19.                     .newInstance();  
  20.             DocumentBuilder docBuilder = docBuilderFac.newDocumentBuilder();  
  21.             InputSource is = new InputSource(new ByteArrayInputStream(  
  22.                     rssContent.getBytes(encoding)));  
  23.             Document doc = docBuilder.parse(is);  
  24.             return doc;  
  25.         } catch (Exception e) {  
  26.             logger.error("CreateDOMDocument Error", e);  
  27.             throw new RSSException("CreateDOMDocument Error", e);  
  28.         }  
  29.     }  
  30.   
  31.     private RSSChannel parseForChannel(Document doc) {  
  32.         RSSChannel rssChannel = new RSSChannel();  
  33.         NodeList channelNodeList = doc.getElementsByTagName("channel");  
  34.         Node channel = channelNodeList.item(0);  
  35.         NodeList childsOfChannel = channel.getChildNodes();  
  36.         for (int i = 0; i < childsOfChannel.getLength(); i++) {  
  37.             Node childOfChannel = childsOfChannel.item(i);  
  38.             if (childOfChannel.getNodeType() != Node.TEXT_NODE) {  
  39.                 String nodeName = childOfChannel.getNodeName();  
  40.                 if (!nodeName.equals("item")) {  
  41.                     String name = childOfChannel.getNodeName();  
  42.                     String value = childOfChannel.getTextContent();  
  43.                     rssChannel.set(name, value);  
  44.                 }  
  45.             }  
  46.         }  
  47.         return rssChannel;  
  48.     }  
  49.   
  50.     private List<RSSItem> parseForItem(Document doc) {  
  51.         List<RSSItem> rssItems = new ArrayList<RSSItem>();  
  52.         NodeList itemNodeList = doc.getElementsByTagName("item");  
  53.         for (int i = 0; i < itemNodeList.getLength(); i++) {  
  54.             RSSItem rssItem = new RSSItem();  
  55.             Node item = itemNodeList.item(i);  
  56.             NodeList childsOfItem = item.getChildNodes();  
  57.             for (int j = 0; j < childsOfItem.getLength(); j++) {  
  58.                 Node node = childsOfItem.item(j);  
  59.                 if (node.getNodeType() != Node.TEXT_NODE) {  
  60.                     String name = node.getNodeName();  
  61.                     String value = node.getTextContent();  
  62.                     rssItem.set(name, value);  
  63.                 }  
  64.             }  
  65.             rssItems.add(rssItem);  
  66.         }  
  67.         return rssItems;  
  68.     }  
  69.   
  70.     public RSSChannel parseRSS() throws RSSException {  
  71.         Document doc = createDOMDocument();  
  72.         RSSChannel channel = parseForChannel(doc);  
  73.         List<RSSItem> items = parseForItem(doc);  
  74.         for (int i = 0; i < items.size(); i++) {  
  75.             channel.addItems(items.get(i));  
  76.         }  
  77.         return channel;  
  78.     }  
  79.   
  80. }  

 

RSSTest.java

[java] view plain copy
  1. public class RSSTest {  
  2.       
  3.       
  4.     public static void main(String[] args) {  
  5.         try {  
  6.             //String url = "http://blog.sina.com.cn/rss/daodaodog.xml";  
  7.             String url = "http://rss.sina.com.cn/tech/rollnews.xml";  
  8.             IRSSParser parser = new DefaultRSSParser(url);  
  9.             RSSChannel channel = parser.parseRSS();  
  10.             System.out.println(channel.toString());  
  11.         } catch (RSSException e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.     }  
  15. }  

相关文章推荐

java RSS 实现(列子)

一: RSS介绍根据维基百科(http://zh.wikipedia.org/wiki/RSS)的定义,“RSS是一种用于共享新闻和其他Web内容的数据交换规范 ”,它是一系列的规范的组合,采用XML...
  • qsky001
  • qsky001
  • 2009年09月28日 20:22
  • 3616

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

基于java的RSS在线订阅demo

转载于:http://www.javaeye.com/topic/677073 由于项目的问题,需要有RSS订阅的概念,以前听说过这个技术,但是却没使用过。今天下午正好没事做,而公司又有这方面的需求,...
  • zgmzyr
  • zgmzyr
  • 2010年09月22日 22:30
  • 8498

Java生成RSS-XML文件

详细看代码,部分涉及到隐私的就给删了,但是不影响功能,里面的日期等格式化,不知道的可以看我前面的博客   /** * author:humf */ import java.text.Si...

Java开源RSS组件包(Java Open Source RSS Lib Packages)

 Java开源RSS组件包(Java Open Source RSS Lib Packages) * RSSLibJ RSSLibJ是一个专门读取和生成RSS的小巧实用的Java库,大小仅2...

java解析RSS信息

java解析百度、网易、新浪等RSS订阅 1.需要引入rome.jar这个jar包(下载) 2.在百度、网易、新浪等RSS频道找到自己感兴趣的PSS地址,比如: 网易体育:htt...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java使用Rome解析Rss的实例

Rome简介 Rome是为RSS聚合而开发的开源包,它可以支持0.91、0.92、0.93、0.94、1.0、2.0,可以说rss的版本基本上都支持了。 Rss简介 RSS是站点用来...
  • earbao
  • earbao
  • 2014年06月23日 17:25
  • 5101

Java--实现网络爬虫抓取RSS新闻(1)网络爬虫详解

网络爬虫定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。 可以更形象的理解:网络相当于一个巨大的蜘...

java使用Rome解析Rss的实例

Rome简介 Rome是为RSS聚合而开发的开源包,它可以支持0.91、0.92、0.93、0.94、1.0、2.0,可以说rss的版本基本上都支持了。 Rss简介 RSS是站点用来...
  • earbao
  • earbao
  • 2014年06月23日 17:25
  • 5101
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用Java得到RSS源的内容
举报原因:
原因补充:

(最多只允许输入30个字)