Lecteur de flux RSS en PHP
Créer un lecteur de flux RSS en PHP
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 :
- Démarrer le serveur Web de PHP avec la commande
php -S localhost:8000
- 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'extensionopenssl
en retirant le commentaire;
devant la ligneextension=openssl
dans le fichierphp.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.
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 />");
}
?>
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 :
- Affichez la description.
- Affichez le nom de l'auteur.
- Affichez la date de publication de l'article.
- Affichez la (ou les) catégorie(s) de l'article.
- 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
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).
- Collectez les articles d'un 2ème flux RSS.
- Créez une variable pour stocker les articles des 2 sources.
- Triez tous les articles par ordre de date de publication décroissant.
- Affichez les articles des 2 flux RSS, triés par ordre de date (l'article le plus récent en premier).