在Java中聚合RSS项

在Java中聚合RSS项,java,rss,aggregation,Java,Rss,Aggregation,我正在尝试用Java构建一个轮询服务,用于检查RSS提要中的更新 在检测到新项目时,它只应在系统中进一步发送新项目 是否有这样的API,或者我必须自己做比较检查 目前,我的轮询器只返回它当前看到的导致系统重复的内容。类似于您所需的内容,可在Informa中找到 “轮询器模块旨在为频道更改的后台轮询提供方便的服务” Sun有一个RSS实用程序库,它是为创建提要而构建的。不过,它还包括一个有用的RSS解析器,我正在使用它来做类似的事情 您可以从这里下载该库(向下滚动至底部以了解有关解析器的更多信息)

我正在尝试用Java构建一个轮询服务,用于检查RSS提要中的更新

在检测到新项目时,它只应在系统中进一步发送新项目

是否有这样的API,或者我必须自己做比较检查


目前,我的轮询器只返回它当前看到的导致系统重复的内容。

类似于您所需的内容,可在Informa中找到

“轮询器模块旨在为频道更改的后台轮询提供方便的服务”


Sun有一个RSS实用程序库,它是为创建提要而构建的。不过,它还包括一个有用的RSS解析器,我正在使用它来做类似的事情

您可以从这里下载该库(向下滚动至底部以了解有关解析器的更多信息):

要检查新项目,只需获取GUID并将其与现有项目的GUID进行比较

// Create an RSS Parser
RssParser parser = RssParserFactory.createDefault();

// Parse the feed
Rss rss = parser.parse( new URL( YOUR_FEED ) );

// Get the channel
Channel channel = rss.getChannel();

// Get the items
Collection<Item> items = channel.getItems();

// Loop for each item
for ( Item item : items )
{
  // Get the GUID
  Guid guid = item.getGuid();

  // Loop for each of the previously seen GUIDs and compare
}
//创建RSS解析器
RssParser parser=RssParserFactory.createDefault();
//解析提要
Rss=parser.parse(新URL(您的_提要));
//接通频道
Channel=rss.getChannel();
//拿到物品
集合项=channel.getItems();
//每个项目的循环
用于(项目:项目)
{
//获取GUID
Guid=item.getGuid();
//循环前面看到的每个guid并进行比较
}

我是java新手。。。但是下面是我尝试过的并且运行良好的简单代码。我从本地目录中读取RSS,而不是从特定网站读取RSS。使用Informa API可在


}

用于比较的API?像
obj1.equals(obj2)
?这是实际的下载链接:
public class Read_UpdateRSS implements de.nava.informa.utils.poller.PollerObserverIF {

public static void main(String[] args) {

try {

        File in = new File("/home/RSSFeed/rssfeed.xml");

        ChannelBuilder build = new ChannelBuilder();

        Channel channel = (Channel) FeedParser.parse(build,in);
        System.out.println("Description:" + channel.getDescription());
        System.out.println("Title:" + channel.getTitle());

        // Magic of polling starts here. polling is done every 10 minutes

        Poller poll = new Poller();
        PollerObserverIF observer = new Read_UpdateRSS();
        poll.addObserver(observer);
        poll.registerChannel(channel, 10 * 60 * 1000);

        for(Object x: channel.getItems()){

            Item anItem = (Item) x;
            System.out.println(anItem.getTitle() + "-");
            System.out.println(anItem.getDescription());
    }

    } catch (Exception e) {

    }
}

@Override
public void channelChanged(ChannelIF arg0) {}

@Override
public void channelErrored(ChannelIF arg0, Exception arg1) {}

@Override
public void itemFound(ItemIF item, ChannelIF channel) {

    System.out.println("new item found");
    channel.addItem(item);
}

@Override
public void pollFinished(ChannelIF channel) {
    System.out.println("Finished polling with " +  channel.getItems().size() + " items in the channel");

}

@Override
public void pollStarted(ChannelIF channel) {
    System.out.println("Started polling with " + channel.getItems().size() + " items in the channel");

}