Aller au contenu principal

Lecteur de flux RSS en PHP

Créer un lecteur de flux RSS en PHP

astuce

Pour la page de veille technologique de votre portfolio, vous pouvez créer une page PHP et collecter des flux RSS pour afficher les dernières informations sur le sujet de votre veille.

Cette page permettra de démontrer votre capacité à suivre l'actualité et vos compétences en développement Web.

Manipuler un flux RSS en PHP

Comment manipuler un flux RSS en PHP ?

Voyons maintenant comment intégrer les résultats d'une requête vers un flux RSS dans une page PHP.

Pour afficher des flux RSS dans une page PHP, vous pouvez utiliser la bibliothèque SimpleXML qui permet de lire facilement des fichiers XML, y compris des flux RSS.

Voici un fichier index.php contenant un exemple de code qui affiche les titres et les liens des éléments d'un flux RSS :

<?php

$xml = simplexml_load_file('https://www.developpez.com/index/rss');

foreach ($xml->channel->item as $item) {
print('<a href="' . $item->link . '">' . $item->title . '</a><br/>');
}

Pour afficher les flux RSS, il suffit de :

  1. Démarrer le serveur Web de PHP avec la commande php -S localhost:8000
  2. Ouvrir son navigateur Web à l'adresse http://localhost:8000

Si l'erreur suivante s'affiche : Unable to find the wrapper "https" il est nécessaire d'activer l'extension openssl en retirant le commentaire ; devant la ligne extension=openssl dans le fichier php.ini

Un fichier php.ini qui fonctionne
;extension=bz2
extension=curl
;extension=ffi
;extension=ftp
extension=fileinfo
extension=gd
extension=gettext
;extension=gmp
extension=intl
;extension=imap
;extension=ldap
extension=mbstring
;extension=exif ; Must be after mbstring as it depends on it
extension=mysqli
;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
;extension=odbc
extension=openssl
;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop

Explications :

  • simplexml_load_file permet de charger le contenu du fichier RSS dans un objet SimpleXML.
  • $xml->channel->item permet d'accéder aux éléments du flux RSS.
  • La boucle foreach parcourt chaque élément et affiche son titre et son lien.

Vous pouvez personnaliser l'affichage en utilisant d'autres propriétés de l'objet $item, comme la description, la date, l'auteur, etc.

L'interpolation de chaînes

Qu'est-ce que l'interpolation d'une chaînes de caractères ?

Dans notre code PHP, nous avons utilisé l'opérateur de concaténation (.) pour concaténer les chaînes de caractères.

Il existe une méthode qui permet de simplifier la façon de concaténer des chaines de caractères et de rendre le code plus lisible.

Cette méthode s'appelle l'interpolation de chaînes de caractères.

astuce

L'interpolation de chaînes de caractères, également connue sous le nom de "string interpolation", est une fonctionnalité qui permet d'évaluer les variables et les expressions dans une chaîne de caractères. Cette fonctionnalité est disponible dans PHP depuis la version 5.3.0, qui a été publiée le 30 juin 2009.

Voici le même code que précédemment, en utilisant l'interpolation de chaînes de caractères à la place l'opérateur de concaténation :

<?php

$xml = simplexml_load_file('https://www.developpez.com/index/rss');

foreach ($xml->channel->item as $item) {
print("<a href='{$item->link}'>{$item->title}</a><br />");
}

?>
astuce

L'utilisation de l'interpolation de chaînes de caractères rend le code plus lisible et plus facile à comprendre.

Amélioration de l'affichage

Améliorons l'affichage de votre page avec une feuille de style.

Voici une exemple de feuille de style, dans le fichier style.css :

body {
font-family: Arial, sans-serif;
line-height: 1.6;
background-color: #f4f4f4;
padding: 20px;
}

.container {
max-width: 800px;
margin: auto;
overflow: auto;
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
}

a {
text-decoration: none;
color: #333;
display: block;
margin-bottom: 10px;
}

a:hover {
color: #666;
}

Intégrer la feuille de style

Intégrons notre feuille de style dans notre page PHP.

Nous pouvons ajouter le lien vers notre feuille de style, avec le code <link rel="stylesheet" href="style.css">

Et nous pouvons faire en sorte que le clic sur le lien d'un article, ouvre un nouvel onglet, avec le code target=\"_blank\"

<!DOCTYPE html>
<html lang="fr">

<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<title>Flux RSS</title>
</head>

<body>

<div class="container">

<?php

$xml = simplexml_load_file('https://www.developpez.com/index/rss');

foreach ($xml->channel->item as $item) {
print("<a href='{$item->link}' target=\"_blank\">{$item->title}</a><br />");
}

?>

</div>

</body>
</html>

Ajouter d'autres informations

Affichons des informations complémentaires du flux RSS.

L'objet $item contient plusieurs propriétés qui permettent d'accéder aux différentes informations associées à chaque élément (ou article) du flux RSS.

Voici les principales propriétés :

  • $item->title : le titre de l'article.
  • $item->link : le lien vers l'article.
  • $item->description : la description de l'article.
  • $item->guid : l'identifiant unique de l'article (peut être une URL ou un identifiant généré par le serveur).
  • $item->pubDate : la date de publication de l'article.
  • $item->author : l'auteur de l'article.
  • $item->category : la catégorie de l'article (peut y en avoir plusieurs).
  • $item->enclosure : les données d'un fichier multimédia (par exemple une image ou une vidéo) associé à l'article.

Notez que les propriétés disponibles peuvent varier en fonction du format et de la structure du flux RSS. Il est donc important de vérifier la structure du flux RSS avant de manipuler les données.

Vous pouvez, par exemple, récupérer l'image de chaque article du flux en provenance de developpez.com avec la ligne de code suivante :

$imageUrl = $item->enclosure['url'];

Exercice 1

Votre mission consiste à tester les principales propriétés du flux RSS.

Voici les informations complémentaires du flux RSS à afficher :

  1. Affichez la description.
  2. Affichez le nom de l'auteur.
  3. Affichez la date de publication de l'article.
  4. Affichez la (ou les) catégorie(s) de l'article.
  5. Affichez la date de publication de l'article.

Voici quelques exemples daffichage d'informations complémentaires :

Afficher la date de publication de l'article

Voici une version de notre code qui affiche la date de l'article :

            // Convertir la date en français
$dateTime = new DateTime($item->pubDate);
$date_fr = $dateTime->format('d/m/Y');
print("Date de publication : {$date_fr}<br />");

Intègrer l'affichage de l'image

Voici une version de notre code qui affiche l'image de l'article :

            // Afficher l'image
$imageUrl = $item->enclosure['url'];
print("<img src={$imageUrl} />");

Test de mémorisation


Quelle bibliothèque PHP est utilisée pour lire facilement des fichiers XML tels que les flux RSS ?


Que fait la fonction `simplexml_load_file()` en PHP ?


Dans le contexte du cours, que représente `$xml->channel->item` ?


Quel opérateur est utilisé dans le code PHP pour concaténer des chaînes de caractères ?


Quel est l'avantage de l'interpolation de chaînes de caractères en PHP ?


Quelle balise HTML est ajoutée au fichier PHP pour lier une feuille de style externe ?


Quelle propriété de l'objet `$item` est utilisée pour afficher l'image associée à un article dans le flux RSS ?


Quelle fonction PHP est utilisée pour convertir la date de publication d'un article en format français ?


Quelle est la fonction de l'attribut `target="_blank"` dans une balise `<a>` en HTML ?


Quelle balise HTML est utilisée pour intégrer une image dans une page Web ?


Version complète

Voici une version de notre code complet qui intègre l'affichage de la date et de l'image :

<!DOCTYPE html>
<html lang="fr">

<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="styles.css">
<title>Flux RSS</title>
</head>

<body>

<div class="container">

<?php

$xml = simplexml_load_file('https://www.developpez.com/index/rss');

foreach ($xml->channel->item as $item) {
$imageUrl = $item->enclosure['url'];
print("<img src={$imageUrl} />");

$dateTime = new DateTime($item->pubDate);
$date_fr = $dateTime->format('d/m/Y');
print(" {$date_fr}<br />");

print("<a href='{$item->link}' target=\"_blank\">{$item->title}</a><br />");
}

?>

</div>

</body>
</html>

Exercice 2

Votre mission consiste :

  • à mélanger les flux de plusieurs sources
  • et à afficher les articles triés par ordre de date (l'article le plus récent en premier).
  1. Collectez les articles d'un 2ème flux RSS.
  2. Créez une variable pour stocker les articles des 2 sources.
  3. Triez tous les articles par ordre de date de publication décroissant.
  4. Affichez les articles des 2 flux RSS, triés par ordre de date (l'article le plus récent en premier).