java - 通过 ROME 解析 RSS 提要获取空作为源

标签 java parsing rss rome

我正在使用 com.sun.syndication api 来解析我最终需要在我的应用程序中使用的 RSS 提要。我面临的问题是,对于某些 RSS,例如喜欢

http://rss.news.yahoo.com/rss/mostviewed

如果我们有带有某些值的标记,以下代码将返回 null 作为源。

URL url  = new URL("http://rss.news.yahoo.com/rss/mostviewed");
    XmlReader reader = null;

    try {
      reader = new XmlReader(url);
      SyndFeed feed = new SyndFeedInput().build(reader);
      System.out.println("Feed Title: "+ feed.getTitle());

      for (Iterator<SyndEntry> i =feed.getEntries().iterator(); i.hasNext();) {
          SyndEntry entry = i.next();
              System.out.println("entry.getSource():"+entry.getSource());
      }

有人知道我在这里可能遗漏了什么吗

最佳答案

这似乎不是开箱即用的,因为 RSS 2.0 的转换器忽略了(可选的)源元素。

您可以编写自己的转换器并根据项目的源属性自行设置源。我将值(来自您的 Feed 的“AP”)放入此处的作者字段:

public class MyConverterForRSS20 extends ConverterForRSS20 {

    public MyConverterForRSS20() {
        this("rss_2.0");
    }

    protected MyConverterForRSS20(String type) {
        super(type);
    }

    @Override
    protected SyndEntry createSyndEntry(Item item, boolean preserveWireItem) {
        SyndEntry syndEntry = super.createSyndEntry(item, preserveWireItem);
        Source source = item.getSource();
        if (source != null) {
            SyndFeed syndFeed = new SyndFeedImpl();
            syndFeed.setLink(source.getUrl());
            syndFeed.setAuthor(source.getValue());
            syndEntry.setSource(syndFeed);
        }
        return syndEntry;
    }
}

幸运的是,自定义转换器可以通过更改 rome.properties 文件并设置 MyConverterForRSS20 而不是 com.sun.syndication.feed 轻松插入 rome .synd.impl.ConverterForRSS20(文件的最后一行):

# Feed Conversor implementation classes
#
Converter.classes=com.sun.syndication.feed.synd.impl.ConverterForAtom10 \
                  com.sun.syndication.feed.synd.impl.ConverterForAtom03 \
                  com.sun.syndication.feed.synd.impl.ConverterForRSS090 \
                  com.sun.syndication.feed.synd.impl.ConverterForRSS091Netscape \
                  com.sun.syndication.feed.synd.impl.ConverterForRSS091Userland \
                  com.sun.syndication.feed.synd.impl.ConverterForRSS092 \
                  com.sun.syndication.feed.synd.impl.ConverterForRSS093 \
                  com.sun.syndication.feed.synd.impl.ConverterForRSS094 \
                  com.sun.syndication.feed.synd.impl.ConverterForRSS10  \
                  MyConverterForRSS20 

关于java - 通过 ROME 解析 RSS 提要获取空作为源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149885/

相关文章:

java - 如何创建不同颜色的文本

python - 如何要求在 Python 验证期间将时间戳补零?

html - 推荐用于flex项目的as3中的html解析器库

javascript - 从 RSS/Atom 提要中提取图像

java - JRE 1.7.0_51-b13 和签名的小程序

java - 使用 in.hasNextInt() 时,如何跳过同一行后面的字符串?

java - 如何检查 List<BasicNameValuePair> 是否包含键?

xml - 使用Xpath进行Scala XML解析

javascript - Jquery 可以将音频播客提要解析为 HTML5 吗?

html - 将多行 HTML 解析加载到一个 UITextField 中