From 1e3e18f5eb75cb2aa1a760f7e6dfacf59b5ca2f3 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sun, 26 Feb 2006 12:09:40 +0000 Subject: [PATCH] corrections RSS, passage RSS 2.0 et Atom dans spip_rss (Nicolas Krebs) --- dist/backend-breves.html | 16 ++++++------ dist/backend.html | 21 ++++++++-------- ecrire/action/rss.php | 50 ++++++++++++++++++++++++++++++++----- ecrire/inc_filtres.php | 5 ++-- ecrire/inc_presentation.php | 3 +++ 5 files changed, 69 insertions(+), 26 deletions(-) diff --git a/dist/backend-breves.html b/dist/backend-breves.html index c3a34df5bf..df81c2541d 100644 --- a/dist/backend-breves.html +++ b/dist/backend-breves.html @@ -23,18 +23,18 @@ </image> ] -<BOUCLE_breves(BREVES){id_rubrique ?}{lang ?}{par date}{inverse}{0,10}> +<BOUCLE_breves(BREVES){id_rubrique ?}{lang ?}{par date}{inverse}{0,20}> <item> <title>[(#TITRE|supprimer_numero|texte_backend)]</title> <link>[(#URL_BREVE|url_absolue)]</link> - <dc:date>[(#DATE|date_iso)]</dc:date> + [<dc:date>(#DATE|date_iso)</dc:date>] <dc:format>text/html</dc:format> <dc:language>#LANG</dc:language> [(#REM) - On diffuse la rubrique et les mots-cles a la mode RSS - ]<BOUCLE_rubrique_rss(RUBRIQUES){id_rubrique}><category[ domain="(#URL_RUBRIQUE|url_absolue)"]>[(#TITRE|supprimer_numero|texte_backend)]</category></BOUCLE_rubrique_rss> + Le bloc qui suit diffuse diffuse la rubrique et les mots-cles a la mode RSS + ]<BOUCLE_rubrique_rss(RUBRIQUES){id_rubrique}>[<category[ domain="(#URL_RUBRIQUE|url_absolue)"]>(#TITRE|supprimer_numero|texte_backend)</category>]</BOUCLE_rubrique_rss> <BOUCLE_mots_rss(MOTS){id_breve}> - <dc:subject>[(#TITRE|texte_backend)]</dc:subject></BOUCLE_mots_rss> + [<dc:subject>(#TITRE|texte_backend)</dc:subject>]</BOUCLE_mots_rss> <description>[(#INTRODUCTION|texte_backend)] @@ -43,17 +43,17 @@ sous forme de "microformats" ]<BOUCLE_rubrique_mf(RUBRIQUES){id_rubrique}>- -<a href="[(#URL_RUBRIQUE|url_absolue)]" rel="category">[(#TITRE|texte_backend)]</a> +[<a href="[(#URL_RUBRIQUE|url_absolue)]" rel="category">(#TITRE|supprimer_numero|texte_backend)</a>] </BOUCLE_rubrique_mf><B_mots_mf> / <BOUCLE_mots_mf(MOTS){id_breve}{", "}> -<a href="[(#URL_MOT|url_absolue)]" rel="tag">[(#TITRE|texte_backend)]</a></BOUCLE_mots_mf> +[<a href="[(#URL_MOT|url_absolue)]" rel="tag">(#TITRE|texte_backend)</a>]</BOUCLE_mots_mf> </description> [(#REM) Le bloc qui suit diffuse aussi le texte integral de la breve, ce qui permet une syndication plus riche (mais plus "lourde"). - Fonction desactivable depuis les reglages du site + Fonction desactivable depuis les reglages du site. ][ (#CONFIG{syndication_integrale}|=={oui}|?{' ',''})<content:encoded>[(#LOGO_BREVE|right||texte_backend) ][<div class='rss_texte'>(#TEXTE|texte_backend)</div> diff --git a/dist/backend.html b/dist/backend.html index b5c89c2538..9e5b8383ca 100644 --- a/dist/backend.html +++ b/dist/backend.html @@ -26,16 +26,17 @@ <item> <title>[(#TITRE|supprimer_numero|texte_backend)]</title> <link>[(#URL_ARTICLE|url_absolue)]</link> - <dc:date>[(#DATE|date_iso)]</dc:date> + [<dc:date>(#DATE|date_iso)</dc:date>] <dc:format>text/html</dc:format> <dc:language>#LANG</dc:language> [<dc:creator>(#LESAUTEURS|supprimer_tags|texte_backend)</dc:creator>] - [(#REM) - On diffuse la rubrique et les mots-cles a la mode RSS - ]<BOUCLE_rubrique_rss(RUBRIQUES){id_rubrique}><category[ domain="(#URL_RUBRIQUE|url_absolue)"]>[(#TITRE|supprimer_numero|texte_backend)]</category></BOUCLE_rubrique_rss> +[(#REM) + Le bloc qui suit diffuse diffuse la rubrique et les mots-cles a la mode RSS + +]<BOUCLE_rubrique_rss(RUBRIQUES){id_rubrique}>[<category[ domain="(#URL_RUBRIQUE|url_absolue)"]>(#TITRE|supprimer_numero|texte_backend)</category>]</BOUCLE_rubrique_rss> <BOUCLE_mots_rss(MOTS){id_article}> - <dc:subject>[(#TITRE|texte_backend)]</dc:subject></BOUCLE_mots_rss> + [<dc:subject>(#TITRE|texte_backend)</dc:subject>]</BOUCLE_mots_rss> <description>[(#INTRODUCTION|texte_backend)] @@ -44,17 +45,17 @@ sous forme de "microformats" ]<BOUCLE_rubrique_mf(RUBRIQUES){id_rubrique}>- -<a href="[(#URL_RUBRIQUE|url_absolue)]" rel="category">[(#TITRE|texte_backend)]</a> +[<a href="[(#URL_RUBRIQUE|url_absolue)]" rel="category">(#TITRE|supprimer_numero|texte_backend)</a>] </BOUCLE_rubrique_mf><B_mots_mf> / <BOUCLE_mots_mf(MOTS){id_article}{", "}> -<a href="[(#URL_MOT|url_absolue)]" rel="tag">[(#TITRE|texte_backend)]</a></BOUCLE_mots_mf> +[<a href="[(#URL_MOT|url_absolue)]" rel="tag">(#TITRE|texte_backend)</a>]</BOUCLE_mots_mf> </description> [(#REM) Le bloc qui suit diffuse aussi le texte integral de l'article, ce qui permet une syndication plus riche (mais plus "lourde"). - Fonction desactivable depuis les reglages du site + Fonction desactivable depuis les reglages du site. ][ (#CONFIG{syndication_integrale}|=={oui}|?{' ',''})<content:encoded>[(#LOGO_ARTICLE|right||texte_backend) ][<div class='rss_chapo'>(#CHAPO|texte_backend)</div> @@ -68,9 +69,9 @@ [(#REM) Le bloc qui suit diffuse l'adresse des documents associes aux articles ; ajouter par ex. {extension=mp3} pour limiter a un certain type de document. -] <BOUCLE_podcast(DOCUMENTS){id_article}{mode=document}{doublons}>[ +] <BOUCLE_documents(DOCUMENTS){id_article}{mode=document}{doublons}>[ <enclosure url="(#URL_DOCUMENT|url_absolue|unique)"[ length="(#TAILLE)"][ type="(#MIME_TYPE)"] />] - </BOUCLE_podcast> + </BOUCLE_documents> </item> </BOUCLE_un_article> diff --git a/ecrire/action/rss.php b/ecrire/action/rss.php index 9a2c6dfecd..d2d23acfff 100644 --- a/ecrire/action/rss.php +++ b/ecrire/action/rss.php @@ -43,7 +43,7 @@ function affiche_rss_rss($rss, $intro = '') { $u = '<'.'?xml version="1.0" encoding="'.$GLOBALS['meta']['charset'].'"?'.">\n"; $u .= ' -<rss version="0.91" xmlns:dc="http://purl.org/dc/elements/1.1/"> +<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> <title>'.texte_backend($intro['title']).'</title> <link>'.texte_backend(url_absolue($intro['url'])).'</link> @@ -61,15 +61,11 @@ function affiche_rss_rss($rss, $intro = '') { <item> <title>'.texte_backend($article['title']).'</title> <link>'.texte_backend(url_absolue($article['url'])).'</link> - <date>'.texte_backend($article['date']).'</date> - <description>'. - texte_backend(liens_absolus($article['description'])) - .'</description> - <author>'.texte_backend($article['author']).'</author> <dc:date>'.date_iso($article['date']).'</dc:date> <dc:format>text/html</dc:format> <dc:language>'.texte_backend($article['lang']).'</dc:language> <dc:creator>'.texte_backend($article['author']).'</dc:creator> + <description>'.texte_backend(liens_absolus($article['description'])).'</description> </item> '; } @@ -84,6 +80,48 @@ function affiche_rss_rss($rss, $intro = '') { return array($u, 'Content-Type: text/xml; charset='.$GLOBALS['meta']['charset']); } +function affiche_rss_atom($rss, $intro = '') { + // entetes + $u = '<'.'?xml version="1.0" encoding="'.$GLOBALS['meta']['charset'].'"?'.">\n"; + + $u .= ' +<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="'.$intro['language'].'"> + <title>'.texte_backend($intro['title']).'</title> + <id>'.texte_backend(url_absolue($intro['url'])).'</id> + <link href="'.texte_backend(url_absolue($intro['url'])).'"/>'; + if ($intro['description']) $u .= '<subtitle>'.texte_backend($intro['description']).'</subtitle>'; + $u .= '<link rel="self" type="application/atom+xml" href="'.texte_backend(url_absolue($_SERVER['REQUEST_URI'])).'"/> + <updated>'.gmdate("Y-m-d\TH:i:s\Z").'<updated>'; // probleme, <updated> pourrait etre plus precis + + // elements + if (is_array($rss)) { + usort($rss, 'trier_par_date'); + foreach ($rss as $article) { + $u .= ' + <entry xml:lang="'.texte_backend($article['lang']).'"> + <title>'.texte_backend($article['title']).'</title> + <id>'.texte_backend(url_absolue($article['url'])).'</id> + <link rel="alternate" type="text/html" href="'.texte_backend(url_absolue($article['url'])).'"/> + <published>'.date_iso($article['date']).'</published> + <updated>'.date_iso($article['date']).'</updated> + <author><name>'.texte_backend($article['author']).'</name>'; + if ($article['email']) + $u .= '<email>'.texte_backend($article['email']).'</email>'; + $u .= '</author> + <summary type="html">'.texte_backend(liens_absolus($article['description'])).'</summary> + </entry> +'; + } + } + + // pied + $u .= ' +</feed> + '; + + return array($u, 'Content-Type: text/xml; charset='.$GLOBALS['meta']['charset']); +} + function affiche_rss_ical($rss, $intro = '') { // entetes diff --git a/ecrire/inc_filtres.php b/ecrire/inc_filtres.php index ae373a45b3..776acfc9f3 100644 --- a/ecrire/inc_filtres.php +++ b/ecrire/inc_filtres.php @@ -664,14 +664,15 @@ function date_ical($date, $addminutes = 0) { mktime($heures, $minutes+$addminutes,$secondes,$mois,$jour,$annee)); } +// date_iso retourne la date au format "RFC 3339" / "ISO 8601" +// voir http://www.php.net/manual/fr/ref.datetime.php#datetime.constants function date_iso($date_heure) { list($annee, $mois, $jour) = recup_date($date_heure); list($heures, $minutes, $secondes) = recup_heure($date_heure); $time = mktime($heures, $minutes, $secondes, $mois, $jour, $annee); - return gmdate("Y-m-d\TH:i:s\Z", $time); + return gmdate('Y-m-d\TH:i:s\Z', $time); } - function date_anneemoisjour($d) { if (!$d) $d = date("Y-m-d"); return substr($d, 0, 4) . substr($d, 5, 2) .substr($d, 8, 2); diff --git a/ecrire/inc_presentation.php b/ecrire/inc_presentation.php index e1fcd46665..6babd8f9a0 100644 --- a/ecrire/inc_presentation.php +++ b/ecrire/inc_presentation.php @@ -3183,6 +3183,9 @@ function bouton_spip_rss($op, $args, $fmt='rss') { . "&fmt=ical"; $button = 'iCal'; break; + case 'atom': + $button = 'atom'; + break; case 'rss': default: -- GitLab