mercredi 23 octobre 2013

Créer une jolie liste d'URL

Pour créer cette page, j'ai choisi d'utiliser Python plutôt que Bash. J'y suis plus à l'aise.

J'ai utilisé en entrée un fichier txt unique contenant une url par ligne, avec au début de chaque bloc de lignes le nom de la langue, précédé d'une *
Cela donne un fichier du type :
*Français
http://lemonde.fr/...
...
...
*Anglais
*Allemand
http://www.heise.de/...
...

Voici le script (sans les indentations, obligatoires en Python) :


#!/usr/bin/python
# -*- coding: utf-8 -*-
import codecs
import re
import unicodedata


# Attention, le tableau de résultats fait actuellement 700px de large
# Pour l'intégrer sur le blog, il doit faire 500px de large. A modifier manuellement à la publication.
#pour insérer le fichier html résultant de ce script dans le blog, il suffit de prendre uniquement le body.
#attention au charset

def tableau_url():
### ouverture fichier
file=codecs.open('liste_url.txt','r',encoding="utf-8")
fichier_sortie=codecs.open('tableau_url.html','w',encoding='utf-8')

### nettoyage fichier
file2=[]
for line in file:
if line=="\r\n":
line="\n"
line = re.sub("\t", "", line)
line = re.sub("\r", "", line)
line = re.sub("\n", "", line)
if line=="" or line==" ":
serarien=0
else:
file2.append(line)

### init sortie
sortie=[]
sortie.append(u'<!DOCTYPE html><html>')
sortie.append(u'<!-- Cette page a été générée automatiquement par un script python')
sortie.append(u'Pour des raisons de lisibilité dans le script, et pouvoir être intégré dans le blog, les attributs css sont souvent placés directement au niveau des balises.')
sortie.append(u'C\'est très laid, mais plus pratique.--><head>')
sortie.append(u'<meta http-equiv="Content-Type" content="text/html; charset=utf-8">')
sortie.append(u'<title>Sortie URL</title><body><p style="text-align:center;">La liste des url de notre projet 11 Septembre.</p>')
#le réglage de la largeur du tableau se règle à la fin de la ligne ci-dessous
sortie.append(u'<table style="border:3px grey solid;border-collapse:collapse;margin-left:auto;margin-right:auto;width:700px;">')
sortie.append(u'<tr><th colspan="2" style="background:#DDDDDD;padding:5px">Liste des URL</th></tr>')


### récup url
i=0
for line in file2:
print line
if line[0]=="*": #cas nom de langue
i=0
sortie.append(u'<tr><td colspan="2" style="padding:5px;font-style:italic;background:#EEEEEE; border:solid black 1px;text-align:center;">'+line[1:]+u'</td></tr>')
else: #cas normal, ligne url
i+=1
sortie.append(u'<tr><td style="padding:5px;border:solid black 1px;text-align:center;">'+str(i)+u'</td><td style="padding:5px;border:solid black 1px;text-align:center;"><a href="'+line+'">'+line[0:60]+u'...</a></td></tr>')



### fin sortie
sortie.append(u'</table></body></html>')

### sortie
strsortie=''
for line in sortie:
strsortie=strsortie+line+"\n"


fichier_sortie.write(strsortie)
fichier_sortie.close

return "done"



J'ai rencontré quelques problèmes d'encodage, évidemment, mais heureusement facilement résolus par la conversion de toutes les chaines de caractères en chaines unicodes : u'string'

Un autre problème : pour pouvoir être intégré sur le blog, ce tableau doit pouvoir fonctionner indépendamment de toute information contenue dans le head ou dans un fichier css quelconque. Le résultat est que toutes les informations css sont intégrées dans les balises, ce qui est très laid, et provoque beaucoup de redondance dans le tableau final. Mais cela fonctionne, j'ai donc privilégié cette méthode.

Aucun commentaire:

Enregistrer un commentaire