1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
<?php
/* **********************************
* PARTIE 1 : BASE MYSQL
* **********************************
*/
// Préparation de la connexion
$mysql_host = 'localhost';
$mysql_usr = 'root';
$mysql_pwd = '';
$mysql_db = 'inshad';
$conn = mysql_connect($mysql_host, $mysql_usr, $mysql_pwd) or die(mysql_error());
mysql_select_db($mysql_db, $conn) or die(mysql_error());
// Préparation de la requête
$req_derniersfilms = "SELECT id, album_name, artist_id FROM albums ORDER BY id DESC LIMIT 0,10;";
// Exécution de la requête
$derniersfilms = mysql_query($req_derniersfilms) or die($req_derniersfilms."<br />\n".mysql_error());
// On place maintenant la réponse de la requête dans un tableau PHP :
$array_films = array();
if (mysql_num_rows($derniersfilms) > 0) // il y a au moins un film
{
while ($f = mysql_fetch_array($derniersfilms))
{
$array_films[$f['id']]['album_name'] = $f['album_name'];
$array_films[$f['id']]['artist_id'] = $f['artist_id'];
$array_films[$f['id']]['id'] = $f['id'];
// $array_films[$f['id']]['name'] = $f['name'];
// $array_films[$f['id']]['url'] = $f['url'];
};
};
// fin de la partie 1
/* **********************************
* PARTIE 2 : FORMATAGE DU DOCUMENT
* **********************************
*/
// détection du type de flux demandé
$feed = (isset($_GET['feed'])) ? strtoupper($_GET['feed']) : '';
if (($feed != 'RSS') && ($feed != 'ATOM')) { $feed = 'RSS'; } // simple précaution ...
// maintenant, selon le type de flux demandé, on prépare un flux de formatage différent :
$rss = ''; // on initialise la variable
if ($feed == 'RSS')
{
// On écrit le prologue du flux RSS 2.0 :
$rss .= '<?xml version="1.0" encoding="windows-1256"?>'."\n";
$rss .= '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">'."\n";
// le channel est l'entête du flux ... on y renseigne :
$rss .= ' <channel>'."\n";
// le titre du site (attention aux caractères spéciaux ...)
$rss .= ' <title>PHP-Astux : le site de NewsletTux !</title>'."\n";
// l'URL (adresse) du site
$rss .= ' <link>http://www.php-astux.info</link>'."\n";
// la description du site (attention aux caractères spéciaux ...)
$rss .= ' <description>PHP-Astux propose des articles pour création Web ainsi que NewsletTux, outil de mailing list en PHP MySQL</description>'."\n";
// la langue du flux
$rss .= ' <language>fr</language>'."\n";
// la date de publication (qui m'a posé pas mal de problèmes)
$rss .= ' <pubDate>'.date('D, d M Y H:i:s O').'</pubDate>'."\n";
// la date de construction du flux
$rss .= ' <lastBuildDate>'.gmdate('D, d M Y H:i:s').' GMT</lastBuildDate>'."\n";
// 2 lignes pour l'auteur du document
$rss .= ' <managingEditor>no-reply@php-astux.info (PHP-Astux)</managingEditor>'."\n";
$rss .= ' <webMaster>no-reply@php-astux.info (PHP-Astux)</webMaster>'."\n";
$rss .= ' <ttl>5</ttl>'."\n";
// cette ligne est très importante, elle DOIT être l'URL de la page du flux
$rss .= ' <atom:link href="http://www.le_site.tld/flux_rss?feed=RSS" rel="self" type="application/rss+xml" />'."\n";
// maintenant, il ne reste plus qu'à insérer les données !
foreach($array_films as $film_id => $film)
{
// chaque film sera encadré d'un bloc item
$rss .= ' <item>'."\n";
// titre du film (ou du bloc d'info) : je choisis de mettre [Genre] Titre
$rss .= ' <title>'.htmlspecialchars(html_entity_decode($film['album_name'])).'</title>'."\n";
// lien direct vers ce bloc
$rss .= ' <link>http://www.a7la-nachid.net/inshad/album/'.$film['id'].'/'.$film['album_name'].'</link>'."\n";
// je choisis d'y mettre le synopsis, puis, à la fin, le nom de l'acteur principal
$rss .= ' <description>'.htmlspecialchars($film['album_name'], ENT_NOQUOTES).' </description>'."\n";
// la date de sortie du film, encodée selon une RFC
// le lien vers la fiche du film
$rss .= ' <guid>http://www.a7la-nachid.net/inshad/album/'.$film['id'].'/'.$film['album_name'].'</guid>'."\n";
$rss .= ' </item>'."\n";
};
// et maintenant, on ferme le contenu du flux RSS ...
$rss .= ' </channel>'."\n";
$rss .= '</rss>'."\n";
};
if ($feed == 'ATOM')
{
// pour le format ATOM, les commentaires sont sensiblement équivalents.
// Seuls changent certaines balises et certains formats (de date notamment).
// On écrit le prologue du flux ATOM 1.0 :
$rss .= '<?xml version="1.0" encoding="ISO-8859-15"?>'."\n";
$rss .= '<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">'."\n";
// pas de channel en ATOM...
// le titre du site (attention aux caractères spéciaux ...)
$rss .= ' <title>PHP-Astux : le site de NewsletTux !</title>'."\n";
// la description du site (attention aux caractères spéciaux ...)
$rss .= ' <subtitle>PHP-Astux propose des articles pour création Web ainsi que NewsletTux, outil de mailing list en PHP MySQL</subtitle>'."\n";
// cette ligne est très importante, elle DOIT être l'URL de la page du flux
$rss .= ' <link rel="self" href="http://www.le_site.tld/flux_rss?feed=ATOM" type="application/atom+xml" />'."\n";
// la date de publication (qui m'a posé pas mal de problèmes)
$rss .= ' <updated>'.date('Y-m-d\TH:i:s\Z').'</updated>'."\n";
// pour l'auteur du document
$rss .= ' <author>'."\n";
$rss .= ' <name>Matthieu</name>'."\n";
$rss .= ' <email>no-reply@php-astux.info</email>'."\n";
$rss .= ' </author>'."\n";
// l'URL du site
$rss .= ' <id>http://www.le_site.tld</id>'."\n";
// maintenant, il ne reste plus qu'à insérer les données !
foreach($array_films as $film_id => $film)
{
// chaque film sera encadré d'un bloc entry
$rss .= ' <entry>'."\n";
// titre du film (ou du bloc d'info) : je choisis de mettre [Genre] Titre
$rss .= ' <title>'.htmlspecialchars(html_entity_decode($film['album_name']), ENT_NOQUOTES).' </title>'."\n";
// lien direct vers ce bloc
$rss .= ' <link href="http://www.a7la-nachid.net/inshad/album/'.$film['id'].'/'.$film['album_name'].'" />'."\n";
// ID de ce bloc : il doit être unique
$rss .= ' <id>http://www.a7la-nachid.net/inshad/album/'.$film['id'].'/'.$film['album_name'].'</id>'."\n";
// la date de sortie du film, encodée selon une RFC
$rss .= ' <updated>'.date('Y-m-d\TH:i:s\Z', $film['album_name']).'</updated>'."\n";
// résumé du bloc (accessibilité ...)
$rss .= ' <summary>'.htmlspecialchars($film['album_name'], ENT_NOQUOTES).'</summary>'."\n";
// ce bloc permet de mettre de la mise en forme dans le flux (XHTML Strict seulement !!!)
$rss .= ' <content type="xhtml">'."\n";
$rss .= ' <div xmlns="http://www.w3.org/1999/xhtml">'.$film['album_name'].'</div>'."\n";
$rss .= ' </content>'."\n";
$rss .= ' </entry>'."\n";
};
// et maintenant, on ferme le contenu du flux RSS ...
$rss .= '</feed>'."\n";
};
// fin partie 2
/* **************************************
* PARTIE 3.1 : PRESENTATION DU FLUX RSS
* **************************************
*/
$fp = fopen("rss.xml", 'w+');
fputs($fp, $rss);
fclose($fp);
// fin partie 3.1
/* **************************************
* PARTIE 3.2 : PRESENTATION DU FLUX RSS
* **************************************
*/
// On envoie les headers XML / no cache
header('Content-Type: text/xml');
header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
// maintenant qu'on a indiqué au navigateur qu'on lui envoyait du XML,
// on envoie le flux
echo $rss;
// fin partie 3.2
mysql_close();
?>
<link rel="alternate" type="application/rss+xml" href="rss.xml" />
<link rel="alternate" type="application/rss+xml" href="flux_rss?feed=ATOM" />
<link rel="alternate" type="application/rss+xml" href="flux_rss?feed=RSS" /> |
Partager