Création d'un flux RSS en Java

Spécifications

Le but est de lire du texte à partir de différentes sources et de le publier sous un format RSS ou Atom.

Approceh

Pour réaliser ce projet, nous allons suivre les étapes suivantes :

  • Lire le contenu textuel depuis une source externe (fichier, API, base de données, etc.).
  • Générer un flux au format RSS ou Atom à partir du texte lu.
  • Publier le flux généré afin qu'il puisse être consulté par des lecteurs RSS.

Mise en œuvre

Commencez par ajouter la dépendance ROME dans votre fichier pom.xml :

<dependency>
    <groupId>rome</groupId>
    <artifactId>rome</artifactId>
    <version>1.0</version>
</dependency>

Voici l'implémentatoin principale du code :

import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;
import com.sun.syndication.io.SyndFeedOutput;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class FluxRSS {

    public static void main(String[] args) {
        // Lecture du fichier
        List<String> articles = null;
        try {
            articles = lireArticlesFichier("src/main/resources/articles.txt");
            // Création du flux
            SyndFeed flux = creerFluxRSS(articles);
            // Sauvegarde du flux dans un fichier
            sauvegarderFluxFichier(flux, "src/main/resources/articles.xml");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    private static List<String> lireArticlesFichier(String chemin) throws IOException {
        List<String> articles = new ArrayList<>();
        BufferedReader lecteur = new BufferedReader(new FileReader(chemin));
        StringBuilder article = new StringBuilder();
        String ligne;
        while ((ligne = lecteur.readLine()) != null) {
            if (ligne.trim().isEmpty()) {
                if (article.length() > 0) {
                    articles.add(article.toString().trim());
                    article.setLength(0);
                }
            } else {
                article.append(ligne).append("\n");
            }
        }
        if (article.length() > 0) {
            articles.add(article.toString().trim());
        }
        lecteur.close();
        return articles;
    }

    private static SyndFeed creerFluxRSS(List<String> articles) {
        SyndFeed flux = new SyndFeedImpl();
        flux.setFeedType("rss_2.0");
        flux.setTitle("Mon Flux RSS");
        flux.setLink("http://example.com");
        flux.setDescription("Ceci est un flux RSS d'exemple");

        List<SyndEntry> entrees = new ArrayList<>();
        for (String article : articles) {
            SyndEntry entree = new SyndEntryImpl();
            entree.setTitle(article.split("\n")[0]);
            entree.setLink("http://example.com/articles/" + article.hashCode());

            SyndContent description = new SyndContentImpl();
            description.setType("text/plain");
            description.setValue(article);
            entree.setDescription(description);
            entrees.add(entree);
        }

        flux.setEntries(entrees);
        return flux;
    }

    private static void sauvegarderFluxFichier(SyndFeed flux, String chemin) throws IOException, FeedException {
        FileWriter ecrivain = new FileWriter(chemin);
        SyndFeedOutput sortie = new SyndFeedOutput();
        sortie.output(flux, ecrivain);
        ecrivain.close();
    }
}

Le fichier articles.txt doit contenir le texte suivant :

Titre de l'article 1
Contenu de la première ligne de l'article 1.
Contenu de la deuxième ligne de l'article 1.

Titre de l'article 2
Contenu de la première ligne de l'article 2.
Contenu de la deuxième ligne de l'article 2.

Après l'exécution, un fichier XML correspondant sera créé.

Étiquettes: rss Java ROME SyndFeed XML

Publié le 11 août à 13h35