利用Java得到RSS源的内容

利用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. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值