質問

私はRSSフィードからの更新をチェックすることをJavaでポーリングサービスを構築しようとしている。

新しいアイテムを検出すると、それだけで、システム内にさらに新しいアイテムを送信する必要があります。

これを実行するAPIはありますか私は、比較チェックを自分で行う必要があるでしょうか?

現時点では、私のポーラーはちょうどそれが現在、私のシステムに原因重複を見ているものを返します。

役に立ちましたか?

解決

あなたが必要とするものと同様に、フォーマ

で提供されています

「ポーラーモジュールは、チャネルの変化の背景ポーリングのための便利なサービスを提供することを意図しています」

http://informa.sourceforge.net/poller.htmlする

他のヒント

Sunはフィードを作成するために建設されたRSSのユーティリティライブラリを持っています。しかし、それはまた、私は同様のことを行うために使用していますという便利なRSSパーサが含まれています。

あなたは(パーサの詳細については、一番下までスクロール)ここからライブラリをダウンロードすることができます:

http://java.sun.com/developer/technicalArticles/javaserverpages/ rss_utilities /

、新しいアイテムをチェックするためだけの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
}

さて、私は、Javaに新しいです...しかし、ここで私が試したし、うまく機能していること、単純なコードです。代わりに、特定のWebサイトからRSSを読んで、私はローカルディレクトリからRSSを読み込みます。 http://informa.sourceforge.net/する

で利用可能InformaのAPIを使用
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");

}

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top