如何使用java代码获取RSS中信息
2012-05-10 10:32
896 查看
RSS基础知识概述:
RSS 这个概念,伴随着“博客(Weblog)”这个词语的出现,已经好几岁了。
什么是RSS呢,它缩写是 "Really Simple Syndication", 支撑技术是xml,作用是用于在线共享内容,订阅新闻、博客等等。因为博客是“文章密集型”的,所以RSS可以把文章的概述信息都放在一个一个的摘要(item)里面,每个item有文章的概述,以及到文章全部内容的超级链接,所以有了RSS摘要,基本上配合RSS 阅读器,可以很快的得到所需要的信息。
以下是一个RSS文件的标准结构:
其中rss元素是其根元素,它吧所有的内含信息包含在一个频道<channel>中,频道有许多meta信息,就是出现在<item>前面的所有子元素。而rss中的所有摘要,都以<item>元素的形式出现,一个<channel>可以有多个<item>。每个<item>同样有元信息,最重要的是描述<description>和链接<link>。
现在有很多工具可以生成RSS,事实上,因为本质上RSS是一个XML文件,所以你完全可以以手工编写XML文件的形式编写RSS,但是还是推荐用工具来简化操作和减少错误,我最喜欢用的工具是:http://www.onlinedown.net/soft/73066.htm
其实,不仅仅RSS阅读器可以获取RSS信息,我们用java API也是可以的。比较有名的是sourceforge的rsslib4j 包,我们这里就展示这个包的用法:
这个包可以到http://sourceforge.net/projects/rsslib4j/ 去下,对应的javadoc地址是http://rsslib4j.sourceforge.net/javadoc/
实验部分:
我们演示2个例子,一个是读取本地rss文件的信息,一个是读取网络上某rss文件的信息:
首先我们开发了一个工具类,这个类的工具方法可以分离出相关信息并且转为字符串形式:
然后我们写了一个驱动类,这个驱动类封装了2个实验:
实验1:读取本地的rss文件(charles.rss)
这个文件部分内容为:
实验2:读取远程的rss文件(rss文件地址为:http://www.people.com.cn/rss/politics.xml)
最终结果如下(因为很长,所以只显示部分):
本地rss的控制台输出结果:
远程rss的控制台输出结果如下:
RSS 这个概念,伴随着“博客(Weblog)”这个词语的出现,已经好几岁了。
什么是RSS呢,它缩写是 "Really Simple Syndication", 支撑技术是xml,作用是用于在线共享内容,订阅新闻、博客等等。因为博客是“文章密集型”的,所以RSS可以把文章的概述信息都放在一个一个的摘要(item)里面,每个item有文章的概述,以及到文章全部内容的超级链接,所以有了RSS摘要,基本上配合RSS 阅读器,可以很快的得到所需要的信息。
以下是一个RSS文件的标准结构:
<rss version="2.0"> <channel> <title>...</title> <link>...</link> <description>...</description> <copyright>...</copyright> <generator>...</generator> <lastBuildDate>...</lastBuildDate> <image>...</image> <item>...</item> <item>...</item> ... <item>...</item> <item>...</item> </channel> </rss>
其中rss元素是其根元素,它吧所有的内含信息包含在一个频道<channel>中,频道有许多meta信息,就是出现在<item>前面的所有子元素。而rss中的所有摘要,都以<item>元素的形式出现,一个<channel>可以有多个<item>。每个<item>同样有元信息,最重要的是描述<description>和链接<link>。
现在有很多工具可以生成RSS,事实上,因为本质上RSS是一个XML文件,所以你完全可以以手工编写XML文件的形式编写RSS,但是还是推荐用工具来简化操作和减少错误,我最喜欢用的工具是:http://www.onlinedown.net/soft/73066.htm
其实,不仅仅RSS阅读器可以获取RSS信息,我们用java API也是可以的。比较有名的是sourceforge的rsslib4j 包,我们这里就展示这个包的用法:
这个包可以到http://sourceforge.net/projects/rsslib4j/ 去下,对应的javadoc地址是http://rsslib4j.sourceforge.net/javadoc/
实验部分:
我们演示2个例子,一个是读取本地rss文件的信息,一个是读取网络上某rss文件的信息:
首先我们开发了一个工具类,这个类的工具方法可以分离出相关信息并且转为字符串形式:
package com.charles.learnrss; import java.util.List; import org.gnu.stealthp.rsslib.RSSChannel; import org.gnu.stealthp.rsslib.RSSHandler; import org.gnu.stealthp.rsslib.RSSImage; import org.gnu.stealthp.rsslib.RSSItem; /* * This file is confidential by Charles.Wang * Copyright belongs to Charles.wang * You can make contact with Charles.Wang (charles_wang888@126.com) */ public class RSSInfoRetriever { public static String getRSSInfo(RSSHandler handler){ StringBuffer rssInfo = new StringBuffer(); //取得rss提要的频道信息(Channel) RSSChannel channel = handler.getRSSChannel(); //Part1: 分离出rss频道的元信息 //(1)频道的标题 String titleInfo = channel.getTitle(); //(2)频道的链接信息 String linkInfo = channel.getLink(); //(3)频道的描述信息 String descriptionInfo = channel.getDescription(); //(4)频道使用的语言 String languageInfo = channel.getLanguage(); //(5)频道版权信息 String copyrightInfo = channel.getCopyright(); //(6)频道的generator的信息 String generatorInfo = channel.getGenerator(); //(7)频道的image信息 RSSImage channelImage = channel.getRSSImage(); String channelImageUrl = channelImage.getUrl(); rssInfo.append("频道标题: "+titleInfo+"\n"); rssInfo.append("频道相关Link信息: "+linkInfo+"\n"); rssInfo.append("频道描述信息: "+descriptionInfo+"\n"); rssInfo.append("频道使用的语言: "+languageInfo+"\n"); rssInfo.append("频道版权信息: "+copyrightInfo+"\n"); rssInfo.append("频道产生器信息: "+generatorInfo+"\n"); rssInfo.append("频道图片URL: "+channelImageUrl+"\n"); //Part2: 分离出rss频道的所有摘要(feed),这里用item表示 List channelItems = channel.getItems(); int itemSize= channelItems.size(); if(itemSize >=1){ rssInfo.append("\n"); rssInfo.append("一共有 "+itemSize+"个摘要在这个频道中"); rssInfo.append("\n"); for (int i=0;i<itemSize;i++){ int itemNo = i+1; RSSItem item = (RSSItem)channelItems.get(i); rssInfo.append("\n"); rssInfo.append("摘要"+itemNo+":"); //(1)摘要的作者 String itemAuthor = item.getAuthor(); //(2)摘要的标题 String itemTitle = item.getTitle(); //(3)摘要的描述 String itemDescription = item.getDescription(); //(4)摘要的链接 String itemLink = item.getLink(); //(5)摘要的发布日期 String itemPubDate = item.getPubDate(); rssInfo.append("作者: "+itemAuthor+"\n"); rssInfo.append("标题: "+itemTitle+"\n"); rssInfo.append("描述: "+itemDescription+"\n"); rssInfo.append("链接: "+itemLink+"\n"); rssInfo.append("发布日期: "+itemPubDate+"\n"); rssInfo.append("\n"); } } return rssInfo.toString(); } }
然后我们写了一个驱动类,这个驱动类封装了2个实验:
package com.charles.demo; import java.net.URL; import org.gnu.stealthp.rsslib.RSSChannel; import org.gnu.stealthp.rsslib.RSSException; import org.gnu.stealthp.rsslib.RSSHandler; import org.gnu.stealthp.rsslib.RSSParser; import com.charles.learnrss.RSSInfoRetriever; /** * * Description: * * @author charles.wang * @created May 10, 2012 9:07:13 AM * */ public class RSSInfoRetrieverDemo { // 这里定义一个本地的rss摘要,(对应我的博客空间) public static final String localRSS = "charles.rss"; //这里定义一个远程的rss摘要的地址(对应人民网) public static final String remoteRSS="http://www.people.com.cn/rss/politics.xml"; public static void main(String[] args) throws Exception { // DEMO 1: 让RSSParser去解析本地某个rss文件 // 取得本地的rss RSSHandler localRSSHandler = new RSSHandler(); RSSParser.parseXmlFile(localRSS, localRSSHandler, false); // 取得rss元素的信息并且打印在控制台上 String localRSSInfo=RSSInfoRetriever.getRSSInfo(localRSSHandler); System.out.println("*************Charles博客的 rss信息如下****************"); System.out.println(localRSSInfo); System.out.println("****************************************************"); // DEMO 2: 让RSSParser去解析远程rss的url // 取得远程的rss RSSHandler remoteRSSHandler = new RSSHandler(); RSSParser.parseXmlFile(new URL(remoteRSS), remoteRSSHandler, false); // 取得rss元素的信息并且打印在控制台上 String remoteRSSInfo=RSSInfoRetriever.getRSSInfo(remoteRSSHandler); System.out.println("****************人民网的 rss信息如下******************"); System.out.println(remoteRSSInfo); System.out.println("****************************************************"); } }
实验1:读取本地的rss文件(charles.rss)
这个文件部分内容为:
<rss version="2.0"> <channel> <title> <![CDATA[ 平行线的凝聚-51CTO技术博客 ]]> </title> <link> <![CDATA[ http://supercharles888.blog.51cto.com ]]> </link> <description> <![CDATA[ Latest 20 blogs of charles_wang8888 ]]> </description> <copyright> <![CDATA[ Copyright(C) 51CTO技术博客-领先的IT技术博客 ]]> </copyright> <generator> <![CDATA[ 51CTO BLOG by 51CTO Studio ]]> </generator> <lastBuildDate>Thu, 01 Jan 1970 00:00:00 GMT</lastBuildDate> <image> <url> <![CDATA[ http://img1.51cto.com/image/skin/1/rss.gif ]]> </url> <title> <![CDATA[ 51CTO BLOG ]]> </title> <link> <![CDATA[ http://blog.51cto.com ]]> </link> <description> <![CDATA[ 51CTO技术博客-领先的IT技术博客 ]]> </description> </image> <item> <title> <![CDATA[ 跨域访问的解决方案(非HTML5的方法1:JSONP) ]]> </title> <description> <![CDATA[ 跨域访问一直是困扰很多开发者的问题之一。因为涉及到安全性问题,所以跨域访问默认是不可以进行的,否则假设今天我写了一段js去更改google的图标,明天他写了一段代码去吧google首页的文字全部变成梵文,那还得..【<a href="http://supercharles888.blog.51cto.com/609344/856886" target="_blank">继续阅读全文</a>】 ]]> </description> <link> <![CDATA[ http://supercharles888.blog.51cto.com/609344/856886 ]]> </link> <author> <![CDATA[ charles_wang8888 ]]> </author> <category> <![CDATA[ Web开发 ]]> </category> <pubDate>Tue, 08 May 2012 04:02:42 GMT</pubDate> </item> ... </channel> </rss>
实验2:读取远程的rss文件(rss文件地址为:http://www.people.com.cn/rss/politics.xml)
最终结果如下(因为很长,所以只显示部分):
本地rss的控制台输出结果:
*************Charles博客的 rss信息如下**************** 频道标题: 平行线的凝聚-51CTO技术博客 频道相关Link信息: http://supercharles888.blog.51cto.com 频道描述信息: Latest 20 blogs of charles_wang8888 频道使用的语言: null 频道版权信息: Copyright(C) 51CTO技术博客-领先的IT技术博客 频道产生器信息: 51CTO BLOG by 51CTO Studio 频道图片URL: http://img1.51cto.com/image/skin/1/rss.gif 一共有 20个摘要在这个频道中 摘要1:作者: charles_wang8888 标题: 跨域访问的解决方案(非HTML5的方法1:JSONP) 描述: 跨域访问一直是困扰很多开发者的问题之一。因为涉及到安全性问题,所以跨域访问默认是不可以进行的,否则假设今天我写了一段js去更改google的图标,明天他写了一段代码去吧google首页的文字全部变成梵文,那还得..【<a href="http://supercharles888.blog.51cto.com/609344/856886" target="_blank">继续阅读全文</a>】 链接: http://supercharles888.blog.51cto.com/609344/856886 发布日期: Tue, 08 May 2012 04:02:42 GMT ... 摘要20:作者: charles_wang8888 标题: 软件过程模型-瀑布模型 描述: 瀑布模型(waterfall)是将开发阶段描述为从一个阶段瀑布般的转化到另外一个阶段,一个开发阶段必须在另外一个开发阶段之前完成。它的特点是有里程碑+可交付产品。 瀑布模型中,软件开发分为如下的阶段: 需求分..【<a href="http://supercharles888.blog.51cto.com/609344/848535" target="_blank">继续阅读全文</a>】 链接: http://supercharles888.blog.51cto.com/609344/848535 发布日期: Tue, 01 May 2012 02:49:07 GMT ****************************************************
远程rss的控制台输出结果如下:
****************人民网的 rss信息如下****************** 频道标题: 国内新闻 频道相关Link信息: http://politics.people.com.cn 频道描述信息: null 频道使用的语言: zh_CN 频道版权信息: Copyright 1997-2012 by www.people.com.cn. all rights reserved 频道产生器信息: null 频道图片URL: http://www.people.com.cn/img/2004people/logo.gif 一共有 100个摘要在这个频道中 摘要1:作者: null 标题: 乌鲁木齐暂封党政机关一半公车缓解拥堵 描述: 本报乌鲁木齐5月9日电 记者潘从武 记者今天从新疆乌鲁木齐市党政机关、企事业单位暂时封存50%公务用车缓解交通拥堵动员大会上了解到,从5月15日到9月5日,乌市将控制全市机动车出行总量,暂时封存全市各级党政机关和 ... 链接: http://politics.people.com.cn/GB/17852009.html 发布日期: 2012-05-10 08:43:50 ... 摘要100:作者: null 标题: 四部门规范国企负责人职务消费行为 禁公款买房等 描述: 中新网5月8日电 据财政部网站消息,日前财政部会同监察部、审计署和国资委联合发布了《国有企业负责人职务消费行为监督管理暂行办法》的通知,通知要求严格规范国有企业负责人职务消费行为,并明确列出了国企负责 ... 链接: http://politics.people.com.cn/GB/17841114.html 发布日期: 2012-05-09 08:29:10 ****************************************************
相关文章推荐
- Java如何从XML文件中获取节点信息的代码解析 Document方法
- 使用JAVA代码通过SSH访问远程windows,获取磁盘信息
- List<Map<String,Object>>如何使用Java代码遍历以获取String,Object的值
- 如何利用Java获取系统的信息(CPU、内存、各盘符使用情况)
- 如何使用java获取内存信息?
- 如何使用Java代码获取Android移动终端Mac地址
- 使用Java代码获取服务器性能信息及局域网内主机名
- 如何使用Java代码获取文件、文件流或字符串的编码方式
- c++代码通过JNI调用Java代码时用到的签名信息如何获取
- Java 代码中如何获取JVM相关的信息?
- 使用Java获取系统信息的常用代码整理总结
- 如何使用java获取雅虎财经上的股票信息
- 如何利用Java获取系统的信息(CPU、内存、各盘符使用情况)
- 如何获取和利用“用户及其使用网站原因的信息”
- 【如何提高Java代码质量:频繁插入和删除时使用LinkedList 】
- List<Map<String,Object>>使用Java代码遍历以获取String,Object的值 .
- java项目中使用Sigar获取系统信息
- java sigar 获取本地信息代码实例,以及运行遇到的问题
- java system类使用方法示例 获取系统信息
- java使用Scanner类循环从控制台中获取数据的方法代码。