1

我正在尝试使用 feed4j 库做一个 RSS 阅读器,我编写了这个简单的代码:

import java.net.URL;

import it.sauronsoftware.feed4j.FeedParser;
import it.sauronsoftware.feed4j.bean.Feed;
import it.sauronsoftware.feed4j.bean.FeedHeader;
import it.sauronsoftware.feed4j.bean.FeedItem;
import javax.swing.*;

public class LettoreRSS{
    public static void main(String[] args) throws Exception
    {
        URL url = new URL("myxmlurl");
        Feed feed = FeedParser.parse(url);
        int items = feed.getItemCount();
        FeedHeader header = feed.getHeader();
        int dim=50;

        JFrame frm = new JFrame(header.getTitle()+" - Last News");
        frm.setResizable(false);
        frm.getContentPane().setLayout(null);
        frm.setBounds(10, 10, 600, 600);
        frm.setVisible(true);
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        for (int i=0;i<items;i++)
        {
            FeedItem item = feed.getItem(i);
            JLabel label = new JLabel();
            label.setBounds(0, dim*i, 600, 50);
            label.setHorizontalAlignment(SwingConstants.CENTER);
            label.setText(item.getTitle()+"   "+item.getPubDate());
            frm.add(label);
        }

    }
}

但是有一个问题:当我开始程序时,他写了标题,但所有的 puDate 都是“空”的(我尝试为标题(FeedHeader 标题)写一个标签,而 header.getPubDate() 给我解决了吗? Thnak you!e date 正确。我尝试的一些 xml 也是一样的。我该如何解决?谢谢!

4

2 回答 2

1

我遇到了同样的问题,我发现这是因为it.sauronsoftware.feed4j.Constants.java中定义的日期格式对我的提要来说是错误的。所以我实现了自己的获取日期的方法。喜欢:

for (int i = 0; i < feedItem.getNodeCount(); i++) {
            RawNode node = feedItem.getNode(i);
            if (node instanceof RawElement) {
                RawElement element = (RawElement) node;
                String name = element.getName();
                String value = element.getValue();
                if (value == null) {
                    return null;
                }
                if (name.equals(FEED_DATE_TAG)) {
                    try {
                        return new SimpleDateFormat(FEED_DATE_FORMAT, Locale.US).parse(value);
                    } catch (ParseException e) {
                        logger.error("could not parse date : {} ", e.getMessage());
                        return null;
                    }
                }
            }
        }

feed4j 日期格式化程序是: public DateFormat RFC_822_DATE_FORMAT = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'z", Locale.US);

于 2015-05-28T07:05:50.150 回答
1

我遇到了同样的问题,但我发现这只是处理 RSS 2.0 的代码中的一个愚蠢的错误。如果您在 TypeRSS_2_0.java 中查看 feed4j 的源代码,您会在 handleItem 方法中看到它完全忘记了处理 pubDate。

这很容易解决。只需将以下内容添加到一系列 if-else 语句(在 guid 语句的正下方 - 大约第 179 行)并重新编译 feed4j.jar 文件。

else if (ename.equals("pubDate")) {
   try {
      item.setPubDate(Constants.RFC_822_DATE_FORMAT.parse(evalue));
   } catch (ParseException e) {
       ;
   }
于 2015-08-27T09:12:52.443 回答