Creare un Feed RSS con PHP e MySQL

Trasformare il risultato di una query in un flusso in xml

Qualche tempo fa ho scritto cos’è e come funziona un Feed RSS, oggi invece vedremo come crearne uno partendo dai risultati di una query MySQL e un file PHP.

L’unico codice che deve contere il file è quello sottostante

<?php

$host = "";
$database = "";
$user = "";
$password = "";

$titlefeed = "Nome del feed";
$linkfeed = "https://www.selectallfromdual.com/blog";
$descfeed = "Descrizione del feed";

$query = "select pubDate, title, link, description from table";

$conn = new PDO("mysql:host=$host; dbname=$database", $user, $password);

$rss = new SimpleXMLElement('<rss/>');
$rss->addAttribute('version','2.0');

$channel = $rss->addChild('channel');
$channel->addChild('title', $titlefeed);
$channel->addChild('link', $linkfeed);
$channel->addChild('description', $descfeed);

$stmt = $conn->query($query);

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
      $item = $channel->addChild('item');
      foreach ($row as $key => $value) {
              $item->addChild($key, normalizzaxml($value));
      }
}

echo str_replace("<?xml version=\"1.0\"?>\n", '',$rss->asXML());

?>

l’unica accortezza sta nella composizione della query, in quanto gli alias delle colonne devono essere unicamente quelli utilizzati dalla struttura xml del feed e devono chiamarsi esattamente pubDate, title, link, description.

Ovviamente questa non è una versione definitiva dello script, è possibile infatti migliorarlo anche cambiando la versione dell’XML. È consigliabile utilizzare un limit nella query di estrazione in modo da non estrarre un RSS lungo quanto tutto il contenuto della tabella di estrazione, altrimenti si rischiano timeout da parte dei client.

Controlliamo ciclicamente il funzionamento dei link nei nostri articoli. Se noti dei link che non funzionano segnalacelo tra i commenti. Se hai apprezzato l'articolo considera l'idea di sostenere il blog anche con una piccola donazione. Grazie. Patreon / Ko-fi / Liberapay / Paypal

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *