Flickr feeds and feedparser
Gunnar asked this morning on #swig how to handle Flickr feeds, and especially images and thumbnails with feedparser. I remembered I hacked it once to make it work, but lost my changes with a server crash … hopefully I submitted a bug report about it.
Adding these 2 methods make it works as needed[1]:
def _start_media_content(self, attrsD):
url = attrsD.get('url')
if url:
self._save('media_content', url)
def _start_media_thumbnail(self, attrsD):
url = attrsD.get('url')
if url:
self._save('media_thumbnail', url)
Then, you can get thumbnails from Flickr feeds:
>>> import feedparser
>>> d = feedparser.parse("http://api.flickr.com/services/feeds/photos_public.gne?id=33669349@N00&format=rss_200")
>>> print d['entries'][0]['media_thumbnail']
http://farm1.static.flickr.com/83/268382663_a5102bc6dd_s.jpg
Notes
[1] In case you don’t have any Python XML parser you will need to rename the second one _start_thumbnail, yet I didn’t check how to make the first one work in that case.
Plugins Dotclear2 et patterns d’URL
Après avoir ajouté le support des flux RSS 1.0 sous Dotclear 2 en modifiant le source (oui, je sais c’est moche), je m’attaque à la même chose, plus propre, sous forme de plug-in, qui sera probablement la première brique d’un plugin Web Sémantique pour Dotclear2 (waouh !).
L’API de DC2 pour l’écriture de plugins permet entre autre de définir des patterns d’URLs pour lesquels des actions vont être déclenchées. Problème: définir un pattern d’URL déjà pris en charge par un autre composant de DC2, via une autre expression rationnelle. Dans mon cas ^feed/(.+)/rdf$ déjà reconnue par ^feed/(.+)$ (dans la gestion des flux). La solution réside dans le nom que vous donnez à la forme de base de l’URL, à savoir le 2nd paramètre de la fonction register.
En effet, DC2 ordonne la liste des patterns d’URL par ordre alphabétique inverse de ces identifiants.
Dans le cas présent, la forme pour le matching de flux étant simplement feed, le fait d’identifier la nouvelle URL par feed/rdf fera que l’expression régulière associée sera matchée avant l’expression classique de traitement des flux, et qu’ainsi le plug-in "surchargera" le coeur de DC2 à ce niveau, le nouveau pattern-matching étant appelé avant celui pour les flux classique:
Edit 15:30: … j’avais oublié le pattern pour les tags, nommé feed/tag. Pour régler l’ordre, il faut donc dans ce cas - par exemple - nommer l’URL feed_rdf pour régler le problème, afin d’appeler le pattern avant celui nommé feed/tag:
$core->url->register('rdf_feed','feed_rdf','^feed((.+)rdf(.*))$',array('dcSemwebURL','rdf_feed'));
