Need a volunteer to code some parsing in my Dotclear RSS2 feed
23 02 2005Since yesterday, thanks to Olivier, Dotclear’s creator, it is now possible to generate an RSS2 feed on a Dotclear blog. However, there is still one thing missing to be able to use that feed easily for podcasting: the parsing required with the tag enclosure.
So, I brought up the question on the Dotclear forum, and I’m bringing it up here. The php file that generates the RSS2 feed is available by clicking on this link. What is missing is the parsing that locates the enclosure tags found in the posts used for podcasting (as rel=”enclosure” within the url tag to the mp3 file) and generates an enclosure element in the RSS2 feed that matches the requirements of the spec, which is as follows:
<enclosure> sub-element of <item>
<enclosure> is an optional sub-element of <item>.
It has three required attributes. url says where the enclosure is located, length says how big it is in bytes, and type says what its type is, a standard MIME type.
The url must be an http url.
<enclosure url=”http://www.scripting.com/mp3s/weatherReportSuite.mp3″ length=”12216320″ type=”audio/mpeg” />
Any volunteers in the house?






lut
code$taille=filesize($fichier); /code
Pour le reste un simple
echo “<enclosure url=”$url.”length=”.$taille.” type=\”audio/mpeg\” />”;
//$url correspont à l’url du fichier qui doit ce trouver quelques parts…
arf zut j’ai pas fait gaffe que c’etait en format wiki… Saleté de bbcode
suis trop accros aux forums
Bloguetages - parce que c’est plus beau que blogueries - matinaux
Quelques billets qui m’ont accroché lors de ma tournée quotidienne…
J’ai écrit autrefois pour me souvenir un jour du comment je faisais le rss sur le site qui se dit au coeur de la sciences, voici l’article
Tu pourras y trouver ceci :
Quand j’ai essayé de valider ton flux rss2, on peut s’apercevoir que tes balise enclosure sont vides.
cela doit provenir, du fait que tu n’as pas la présence d’un fichier à “enclosurer”, dans chaque billet.
Soit tu essaies de coder la présence ou non d’un fichier à mettre entre les balises enclosure.
Soit tu balances sur le forum
Avec une copie du fichier rss2.php
tiens bizarre la citation n’a pas marché pourtant ca marchait avec prévisualiser
Présentement, le fil sortant est en RSS1, alors si tu as testé avec les fils tels qu’ils sont indiqués, pas étonnant que tu n’aies pas eu d’enclosure reconnue.
Si tu regardes le fil rss audio, teste celui-ci: http://www.benoitbisson.com/blog/rss2.php?cat=11
Tu verras un écran avec message d’erreur. C’est parce que je suis en train d’essayer de faire ce que Tehu recommande dans le forum comme façon de base pour afficher l’enclosure. Le topo dans le forum est ici: http://www.dotclear.net/forum/viewtopic.php?id=7527
Si tu fais view source, tu verras que ça marche en partie, c’est-à-dire qu’une première instance d’enclosure ressort, mais qu’après ça foire. J’en suis rendu là.
Et il faut que je vois ce qui foire avec le wiki dans les commentaires. Grr… Il y a des matins, je te jure…
arf zut a oublier les balises codes…
function getRSS2PostItem(&$news) { if ($news->f('post_chapo') != '') { $desc = strip_tags($news->f('post_chapo')); } else { $desc = util::cutString(strip_tags($news-> f('post_content')),200).'...'; } $enclosure = explode("|",$news->f('post_notes')); $enclosure1;// enclosure $enclosure2;// http://benoitbisson.com /blog/podcasts/podcast-21-02-2005.mp3 $enclosure3;// 4324298 $enclosure4;// audio/mpeg $enclosure =”‹enclosure url=”.$enclosure2 .” length=”.$enclosure3.” type= “.$enclosure4.” /›”; return ‘<item>’.” “. ‘ <title>’.$news->blog->toXML ($news->f(’post_titre’)).”</title> “. ‘ <link>’.$news->getPermURL().’< /link>’.” “. ‘ <pubDate>’.strftime(’%a, %d %b %Y %H:%M: %S GMT’,$news->getTS()).”</pubDate> “. ‘ <guid>’.$news->getPermURL().”< /guid> “. ‘ <dc:creator>’.htmlspecialchars($news-> getUserCN()).”</dc:creator> “. ‘ <dc:subject>’.htmlspecialchars($news-> f(’cat_libelle’)).”</dc:subject> “. ‘ <description>’.$news->blog->toXML ($desc).”</description> “. ‘ <content:encoded><![CDATA['.$news-> f('post_chapo').' '.$news->f('post_content')."]]> </content:encoded> “. ‘ ‘.$enclosure.” “. ‘</item>’.” “;Bon, j’ai essayé de formatter tout ça pour ici, mais il a fallu mettre plein de retours pour que ça ne débarre pas du cadre.
J’ai ajouté des trucs sur le forum Dotclear (adresse mentionnée dans un commentaire précédent). Ça fonctionne et valide, mais il reste UN truc à régler si je veux utiliser le fil RSS2 pour d’autres catégories que celles audio (ayant des enclosures). Il faut que ça ne génère PAS de code enclosure si la section Note est vide, sinon ça provoque une erreur dans le RSS.
Merci beaucoup RV! Ce n’est pas un plugin, mais c’est nettement plus simple que tous les détours par FeedBurner et autres.
Bon, dernières nouvelles sur ce sujet pour aujourd’hui: le fil RSS audio dans la colonne de droite est en RSS2 avec l’enclosure fonctionnelle pour des logiciels tels que Ipodder ou Poddler. J’en parlerai plus en détail dans un billet séparé.
J’ai modifié la fonction getRSS2PostItem pour permettre de poster d’autres formats que du mp3 et adapter le type de l’enclosure le code est ci-dessous
function getRSS2PostItem(&$news) { if ($news->f('post_chapo') != '') { $desc = strip_tags($news->f('post_chapo')); } else { $desc = util::cutString(strip_tags($news->f('post_content')),200).'...'; } $enclosure_string=""; $content = $news->f('post_chapo')."<br />".$news->f('post_content');if( preg_match_all( “((http://(([:punct:]|[:alnum:])*))\”(.*)?(rel=\”enclosure\”))” ,$content,$result,PREG_SET_ORDER));
{ for ($i=0; $i< count($result); $i++) {
if (remote_filesize($result$i1)!=’unknow’){ $length=remote_filesize($result$i1);} else { $length=0; } eregi(”\.(mov|avi|mpg|mp3)$”,$result$i1,$regs); switch($regs1){ case “mov”: $type = “video/quicktime”; break; case “avi”: $type = “video/x-msvideo”; break; case “mp3″: $type = “audio/mpeg”; break; case “mpg”: $type = “video/mpeg”; break; default: $type = “audio/mpeg”; } $enclosure_string .=’<enclosure url=”‘.$result$i1.’” type=”‘.$type.’” length=”‘.$length.’”/>’; $lenght = 0; $type = “”;
} } return ‘<item>’.” “. ‘ <title>’.$news->blog->toXML($news->f(’post_titre’)).”</title> “. ‘ <link>’.$news->getPermURL().’</link>’.” “. ‘ <pubDate>’.strftime(’%a, %d %b %Y %H:%M:%S GMT’,$news->getTS()).”</pubDate> “. ‘ <guid>’.$news->getPermURL().”</guid> “. ‘ <dc:creator>’.htmlspecialchars($news->getUserCN()).”</dc:creator> “. ‘ <dc:subject>’.htmlspecialchars($news->f(’cat_libelle’)).”</dc:subject> “. ‘ <description>’.$news->blog->toXML($desc).”</description> “. ‘ <content:encoded><![CDATA['.$news->f('post_chapo').' '.$news->f('post_content').']]>’.
‘ </content:encoded>’.” “.
‘ ‘.$enclosure_string.” “. ‘</item>’.” “; }
Merci, Exocet! Je vais voir à intégrer. Je jetterai un oeil sur le forum Dotclear pour m’assurer que c’est là aussi.
‘it is now possible to generate an rss2 feed on a dotclear blog’, c’est yout ?
Je ne saurais dire. Je n’utilise plus Dotclear depuis un bon moment.