RSS的读取和发布

这几天研究了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"?>
RSS的读取和发布_第1张图片
RSS的读取和发布_第2张图片


第三个问题
有人说用抓虾,不过这是很早以前的事情,听说最近都快关门了
FeedDemon 、Google Reader ,可以使用下看看

你可能感兴趣的:(rss)