De l’automatisation de la mise à jour d’un site

Dans le cadre de l’activité Premier Samedi du Libre, Parinux, dont je suis le président, maintient à jour le site susmentionné. Le mettre à jour tous les mois est une vraie plaie pour moi qui n’aime pas beaucoup le web et encore moins les tâches répétitives.

Nous avons la chance d’utiliser Wordpress, enfin, surtout le fait que celui-ci supporte XML-RPC. Ceci va nous faciliter le travail. Comme j’aime bien Python, allons y avec Python.

Tout d’abord, l’outillage :

pip3.3 show python-wordpress-xmlrpc

J’ai choisi cette mise en œuvre comme étant la plus complète, il fallait gérer à la fois des pages et des articles.

En route pour le code :

#!/usr/bin/python3
# coding: utf-8
import datetime
from wordpress_xmlrpc import WordPressPage
from wordpress_xmlrpc import WordPressPost
from wordpress_xmlrpc.methods import posts
from wordpress_xmlrpc.methods import pages
from wordpress_xmlrpc import Client
import locale
locale.setlocale(locale.LC_ALL, 'fr_FR.utf8')
def premier_samedi(type):
    y = datetime.date.today().year
    j = 1
    m = datetime.date.today().month
    if m == 12:
        y += 1
    while datetime.date(y, m + 1, j).strftime("%A") != 'samedi':
        j += 1
    if type == 'url':
        return datetime.date(y, m + 1, j).strftime("%B-%Y")
    elif type == 'court':
        return datetime.date(y, m + 1, j).strftime("%B %Y")
    else:
        return datetime.date(y, m + 1, j).strftime("%e %B %Y")
client = Client('https://premier-samedi.org/xmlrpc.php',User,Password)
accueil = client.call(posts.GetPost(730))
accueil.content = 'Un long texte qui présente les premier samedis \le ' + premier_samedi('long') + \'……’
client.call(posts.EditPost(accueil.id, accueil))
post = WordPressPost()
post.title = premier_samedi(court)
post.content = Date : samedi + premier_samedi(long) + 
\n\Horaires : de 14h00 à 18h00
 …’post.id = client.call(posts.NewPost(post))
post.post_status = publish
client.call(posts.EditPost(post.id, post))

Edit : Après cette première version, j’ai relu et on peut refactoriser le code avec l = list(map((lambda s: [s.year,s.month,s.day]), rrule(MONTHLY,byweekday=SA(1))[:5])) ou mieux encore : rrule(MONTHLY,dtstart=date.today(),byweekday=SA(1),count=1)[0]

La version complète se trouve sur un dépot git.

Tagcloud
Ubuntu automontage kernel authentification orgcamp NetworkManager Internet identification PSL Science-Fiction JDLL postfix Opinions Gentoo Éducation Iptables OSM rubber sympa GNU-Linux Educ Libre PlanetUbuntuFr PlanetUbuntu nfs UbuntuFr Mathématiques auto hébergement Python compilation dovecot Mozilla Mandriva Emacs Perso eCryptfs April Drupal beamer automatisation shell DNS Voile Mutt orgmode Société LDAP Réflexions SNCF configuration Épinay redmine sqlite php CAPES Spam OpenVPN CPL dotclear ISN vélo mail installation OpenSSL GCC X.org sudo ArchLinux fail vserver IPv6 Debian Coups de gueule LaTeX Admin Sys Free Parinux RaspberryPi Vie numérique Essai sieve gpg vim fun Randonnée SPF OpenStack Informatique Coup de gueule Lectures Paris Web imap RATP Technique CLI code KDE roundcube Munin