Frage

Ich versuche, einen Abfrage-Service in Java, dass prüft, ob Aktualisierungen von einem RSS-Feed zu bauen.

Auf neue Objekte zu erfassen, sollte es nur neue Objekte sendet weiter im System.

Gibt es eine API, das dies tut oder hätte ich mir den Vergleich Kontrollen tun?

Im Moment mein poller nur zurück, was es zur Zeit verursachen Duplikate in meinem System sieht.

War es hilfreich?

Lösung

Ähnlich dem, was Sie benötigen, ist in Informa

verfügbar

„wird Poller Modul soll für die Abfrage von Kanaländerungen Hintergrund komfortablen Service bieten“

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

Andere Tipps

Sun eine RSS-Dienstprogramme Bibliothek hat, die für die Erstellung von RSS-Feeds gebaut wurden. Allerdings enthält es auch einen nützlichen RSS-Parser, dass ich ein ähnliches, was zu tun verwenden.

Sie können die Bibliothek hier herunterladen (nach unten scrollen nach unten, um weitere Informationen zu dem Parser):

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

Um neue Objekte zu überprüfen, damit die GUID erhalten und vergleichen Sie es mit GUIDs für bestehende Produkte.

// 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
}

Nun, ich bin neu in Java ... aber hier ist der einfache Code, dass ich versuchte und funktioniert gut. Anstatt die RSS von einer bestimmten Website zu lesen, las ich die RSS von lokalem Verzeichnis. Verwenden Informa-API finden Sie unter http://informa.sourceforge.net/

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");

}

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top