traitement des flux RSS dans la RC2+
Auteur Sujet

Post 
Bonjour,
voilà, j'ai compris comment marchait les flux RSS dans la .8 et comment personnaliser l'affichage de ces flux mais j'avais envie de faire quelque chose de vraiment super innovant genre mettre une étoile à coté du titre si la news datait de moins d'une journée par exemple (je sais, concept super novateur, j'en suis encore tout retourné). Mais voilà, en regardant les champs date, je m'apercois que c'est un peu le bazar là-dedans.

Si je regarde la spec RSS 2.0, je dois avoir une champs pubDate avec une date genre
  1. <pubDate>Mon, 28 Jan 2008 19:53:16 +0100</pubDate> 

Je regarde sur un flux généré par Spip (en 2.0) et j'obtient
  1. <dc:date>2008-01-30T06:00:00Z</dc:date> 

pour un troisième par une autre moteur (en 0.91 sois disant)
  1. <date>2008-01-15 09:47:50</date> 

Mouais, comme quoi cela n'a pas l'air facile de comparer une simple date dans les RSS, quelqu'un a une idée ?

modifié par : xbee, 31 Jan 2008 - 16:21

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Bonjour,

Je ne saurais trop te dire lequel est le meilleur ou le "plus" compatible, mais lorsque j'ai créé un flux rss récemment j'ai utilisé les spécifications rss 2.0 et j'ai généré des dates du genre :
  1. D, d M Y H:i:s +0200 


Ca fonctionnait parfaitement ! icon_wink

-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil

Post 
Mon problème n'est pas de le générer mais de traiter des flux "entrants", j'ai besoins de comparer des dates genre $daterss > $dateref mais si $daterss à un format assez divers, je ne sais pas si cela va fonctionner correctement. Ma question était donc de savoir si qqun avait déjà fait le test ou avait une fonction magique genre
  1. compareDateRFC822($daterss,$dateref) 
  2. ... 

Je me pose peut être trop de question ...

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
tu n'auras pas un format divers dans TON flux rss puisque c'est toi qui le crée.

A toi ensuite de créer un plugin au thème pour mettre ensuite ta petite étoile.

Si tu as besoin d'aide pour créer le plugin, on pourra t'aider.

Je trouve ton idée d'étoile très bien, je trouve !

a+


Gilles  ><>°
Données personnelles Accueil

Post 
Hélas, hélas, afficher mes flux RSS, ce n'est pas vraiment intéressant dans mon cas, le flux vient de Spip et d'un autre CMS donc je ne controle pas le format que je dois afficher. Mais je vais essayer de comparer les dates simplement, je n'ai pas beaucoup de format à prendre en compte dans mon cas, c'est juste que cela sera moins "généraliste".

Merci

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Pour synthétiser la chose:

  • Tu utilises PostNuke .8
  • Le module Feeds

Tu affiches des flux sur une page php normale, mais tu désires rajouter une petite étoile avant les éléments datants de moins d'un jour.


C'est ca ?


Gilles  ><>°
Données personnelles Accueil

Post 
Voilà, voilà, mais quand je regarde ce que contient le champs pubDate, j'ai l'impression de c'est assez divers et varié comme format même en RFC822 et je ne parle pas des sites qui ne le respecte pas. Donc, ma question était simplement de savoir si quelqu'un avait une fonction magique pour s'être confronté au problème ou pas. Mais peut être que je me pose des questions existentielles pour rien, je n'ai pas essayé encore ...

P.S.: la fonction "M'avertir lorsqu'une réponse est envoyée" est censée envoyer un mail à chaque réponse ? Parce que je l'ai plusieurs fois cochée et je n'ai jamais rien reçu ... :(

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Alors,

pour résoudre ton problème il va falloir créer un plugin et utiliser smarty.

dans le dossier plugins de Feeds/templates/ créer un fichier function.markstar.php

et dedans mettre
  1. <?php 
  2. function smarty_function_markstar($params,&$smarty) 
  3.  
  4. $date = $params['date']; 
  5. //faire la détection de la date (la mettre en timestamp) 
  6.  
  7. //déterminer si date_actuelle (timestamp) - 1 jour < date feed 
  8.  
  9. si oui return <img src="aaa' /> 
  10. sinon return false 
  11.  


dans ton template (que je t'invite à copier dans ton thème : modules/Feeds/pntemplates le déplaceer dans /themes/modules/Feeds)

tu met à l'endroit ou tu veux l'étoile :
<!--[markstar date=$date]-->



Gilles  ><>°
Données personnelles Accueil

Post 
C'est fait (avant même de voir ta réponse) et cela a l'air de marcher, je vois des étoiles partout ... (non, non, je n'ai rien pris de particulier :))

Merci

Aller voilà ma copie, il y a certainement une façon de faire + simple

  1. /** 
  2. * Smarty function to check feed date 
  3. * Example 
  4. * <!--[assign var=date value=$feeditem->get_date()]--> 
  5. * <!--[is_newfeed date=$date ref=2 assign=isnew]--> 
  6. * <!--[if $isnew eq 'yes']--> 
  7. * ... 
  8. * ;@author       xbee 
  9. * ;@since        01/2008 
  10. * ;@param        array       $params      All attributes passed to this function from the template 
  11. * ;@param        object      &$smarty     Reference to the Smarty object 
  12. */ 
  13. function smarty_function_is_newfeed($params, &$smarty) 
  14.     extract($params); 
  15.      
  16.     // pas de bras, pas de chocolat ... 
  17.     if (!isset($date)) 
  18.     { 
  19.         return "no"; 
  20.     } 
  21.  
  22.     // par défaut un jour 
  23.     if (!isset($ref)) 
  24.     { 
  25.         $ref =  1; 
  26.     } 
  27.  
  28.     // on vire le "local time format" en fonction de la plateforme (pour le strtotime) 
  29.     // la date d'un flux RSS 2.0 devant être en RFC822 soit en anglais 
  30.     if (stristr(getenv('OS'), 'windows')) 
  31.     { 
  32.         setlocale(LC_TIME, 'eng'); 
  33.     } 
  34.     else 
  35.     { 
  36.         setlocale(LC_TIME, 'en_US'); 
  37.     } 
  38.  
  39.     $now = time(); // récup timestamp courant 
  40.     $olddate = strtotime($date); // conversion date à vérifier en timestamp 
  41.     $diff = ($now - $olddate) / (3600 * 24); 
  42.  
  43.     $ret = "no"; 
  44.     if ($diff <= $ref) 
  45.     { 
  46.         $ret = "yes"; 
  47.     } 
  48.      
  49.     setlocale (LC_TIME, pnConfigGetVar('locale')); 
  50.     if (isset($assign)) 
  51.     { 
  52.         $smarty->assign($assign, $ret); 
  53.     } 
  54.     else 
  55.     { 
  56.         return $ret; 
  57.     } 


"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Citation :

Aller voilà ma copie, il y a certainement une façon de faire + simple

oui, je pense...

tente de reprendre le plugin que j'ai commencé, ensuite, fait une expression régulière pour rechercher le format (s'il y a un +, un Z, qu'un seul espace).
Ensuite, extrait-en la date, crée le timestamp et fait une comparaison !

J'ai l'impression que dans ton plugin, la gestion des différents cas est difficile...


++


Gilles  ><>°
Données personnelles Accueil
Post 
Mon but n'est pas de faire qqchose qui va marcher partout, cela fonctionne (enfin je pense) chez moi et cela me suffit. Mon (véritable) problème était d'identifier les choses à prendre en compte, quel champs de la classe simplepie que fournit le module Feeds, quel "locale" utiliser, quelle fonction pour convertir en timestamps. Maintenant que cela "marche", j'ai tellement d'autres problèmes sur mon nouveau site en .8 que je vais laisser cela comme cela tant que cela marche. Maintenant si cela peut être utile à qqun comme base par la suite, il y a un bout de code qui existe ... :)

Merci !

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil