这几天研究了RSS
RSS(简易信息聚合,也叫聚合内容)是一种描述和同步网站内容的格式。RSS可以是以下三个解释的其中一个: Really Simple Syndication;RDF (Resource Description Framework) Site Summary; Rich Site Summary。但其实这三个解释都是指同一种Syndication的技术。RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0。使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持RSS的聚合工具软件,在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。
要研究的问题
1、如何读取RSS,比如sina提供了一个RSS,我如何读取这些信息
2、我自己有一个WEB应用,如何发布RSS
3、使用哪些工具可以聚合RSS
第一个问题,我们可以使用开源的jar包 rome-1.0.jar 、jdom.jar
参考地址:
直接上代码吧
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Properties;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;
/**
*
* 查询rss
*
* @author bdk197431
* @date 2013-1-21 上午11:40:25
*
* @version 1.0
*/
public class Test1
{
public static void main(String[] args) throws Exception
{
// 设置代理服务器
Properties systemSettings = System.getProperties();
systemSettings.put("http.proxyHost", "101.11.11.1");
systemSettings.put("http.proxyPort", "80");
System.setProperties(systemSettings);
//
URL feedUrl = new URL("http://rss.sina.com.cn/news/marquee/ddt.xml");
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(feedUrl));
//
URLConnection feedUrlConn = new URL("http://rss.sina.com.cn/news/marquee/ddt.xml").openConnection();
feedUrlConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
SyndFeedInput input2 = new SyndFeedInput();
SyndFeed feed2 = input2.build(new XmlReader(feedUrl));
// 查询所有 rss
List list = feed2.getEntries();
for (int i = 0; i < list.size(); i++)
{
SyndEntry entry = (SyndEntry) list.get(i);
System.out.println(entry);
System.out.println("------------------");
}
}
}
第二个问题:
可以用java代码生成xml文件,这样不知道是否可以发布RSS,
import java.io.FileWriter;
import java.io.Writer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;
import com.sun.syndication.io.SyndFeedOutput;
public class RssWrite
{
public static void main(String[] args) throws Exception
{
DateFormat dateParser = new SimpleDateFormat("yyyyMMddhhmmss");
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType("rss_2.0");
feed.setTitle("Sample Feed (created with Rome)");
feed.setLink("http://rome.dev.java.net");
feed.setDescription("This feed has been created using Rome (Java syndication utilities");
List<SyndEntry> entries = new ArrayList<SyndEntry>();
SyndEntry entry;
SyndContent description;
// item 内容
// 重复add产生多个item
entry = new SyndEntryImpl();
entry.setTitle("Rome v1.0");
entry.setLink("http://wiki.java.net/bin/view/Javawsxml/Rome01");
entry.setPublishedDate(new Date());
description = new SyndContentImpl();
description.setType("text/plain");
description.setValue("hello caohaigang");
entry.setDescription(description);
entries.add(entry);
feed.setEntries(entries);
String fileName = "c:\\rss\\feed" + dateParser.format(new Date()) + ".xml";
Writer writer = new FileWriter(fileName);
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, writer);
writer.close();
System.out.println("The feed has been written to the file [" + fileName + "]");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
<title>Sample Feed (created with Rome)</title>
<link>http://rome.dev.java.net</link>
<description>This feed has been created using Rome (Java syndication utilities</description>
<item>
<title>Rome v1.0</title>
<link>http://wiki.java.net/bin/view/Javawsxml/Rome01</link>
<description>hello caohaigang</description>
<pubDate>Mon, 21 Jan 2013 11:52:52 GMT</pubDate>
<guid>http://wiki.java.net/bin/view/Javawsxml/Rome01</guid>
<dc:date>2013-01-21T11:52:52Z</dc:date>
</item>
</channel>
</rss>
补充一点: 生成出来的XML,在IE8下面可以正常显示RSS ,不过到Goole chmod下显示失败 ,在网上搜索资料后 在xml的第二行增加
<?xml-stylesheet type="text/xsl" href="rss.xslt"?>
第三个问题
有人说用抓虾,不过这是很早以前的事情,听说最近都快关门了
FeedDemon 、Google Reader ,可以使用下看看