2010-02-18 11 views
3

J'essaie de créer un service d'interrogation Java qui vérifie les mises à jour d'un flux RSS.Agrégation d'éléments RSS en Java

Lors de la détection de nouveaux éléments, il convient d'envoyer uniquement de nouveaux éléments dans le système.

Y a-t-il une API qui fait cela ou devrais-je faire les vérifications de comparaison moi-même?

À l'heure actuelle, mon scrutateur retourne juste ce qu'il voit actuellement causant des doublons dans mon système.

+0

API pour la comparaison? comme 'obj1.equals (obj2)'? –

Répondre

0

similaires à ce que vous avez besoin est disponible dans Informa

« module Poller est destiné à fournir des services pratiques pour les sondages d'arrière-plan des changements de canal »

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

1

Sun ont une bibliothèque RSS Utilities qui était construit pour créer des flux. Cependant, il comprend également un analyseur RSS utile que j'utilise pour faire une chose similaire.

Vous pouvez télécharger la bibliothèque à partir d'ici (faire défiler vers le bas pour plus d'informations sur l'analyseur):

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

pour vérifier les nouveaux éléments, juste obtenir le GUID et la comparer avec GUIDs pour articles existants.

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

Ceci est le lien de téléchargement actuel: http://java.sun.com/developer/technicalArticles/javaserverpages/rss_utilities/rss_utils_1.1.zip –

0

Eh bien je suis nouveau java ... mais voici le code simple que j'ai essayé et fonctionne bien. Au lieu de lire le RSS d'un site web spécifique, j'ai lu le RSS du répertoire local. Utiliser l'API Informa disponible à 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"); 

} 

}