Difficulté: Niveau intermédiaire
Objectif: Être alerté par mail lorsque vos amis publient de nouvelles notes.
Principe: Lire chacune de leurs pages, y récupérer ce qui ressemble à des liens
vers des billets, comparer
ces liens à ceux récupérés lors de la dernière
tentative, faire un résumé des nouveautés et l'envoyer par mail, et enfin
remplacer l'ancienne liste par la nouvelle pour la prochaine itération.
Première étape: Récupérer la liste des adresse des blogs de vos amis. La page
http://www.vivelesrondes.com/VotrePseudo/profile contient toutes les
informations nécessaires à ce sujet. On commence donc par la télécharger:
Ceci va créer un fichier profile dans le répertoire en cours, duquel nous
pourrons extraire la liste d'amis.
Code: |
grep '/profile/' profile |
On récupère toutes les lignes contenant
/profile/ dans le fichier profile, c'est à dire les deux lignes contenant la
liste de vos amis pour la première, et la liste de ceux qui vous ont comme amis
dans la seconde.
On n'en garde que la première, c'est à dire la liste des
liens vers les profils de vos amis.
On remplace les virgules par des retours à la ligne.
C'est plus simple d'avoir un ami par ligne.
Code: |
sed 's/\/profile//g' |
On remplace les liens vers les profils par des
liens vers les pages d'accueil de blogs (En enlevant simplement la partie
"/profile" dans chaque lien).
Code: |
wget -i - -O blogs.txt --force-html |
Enfin, on télécharge toutes ces pages d'accueil, et on enregistre le tout dans un fichier nommé blogs.txt
Résumé de la première étape:
Code: |
grep '/profile/' profile | head -n1 | sed 's/,/\n/g' | sed 's/\/profile//g' | wget -i - -O blogs.txt --force-html |
Deuxième étape: Récupérer tout ce qui peut ressembler à un lien vers un billet.
Ils sont de la forme "http://www.vivelesrondes.com/<pseudo>/<Numéro>"
Code: |
grep -E 'http://www.vivelesrondes.com/[A-Za-z0-9]+/[0-9]+/' blogs.txt > links.new |
On enregistre cette liste de liens dans un fichier nommé
links.new que l'on pourra comparer avec le fichier links.old créé à l'itération
précédente.
Troisième étape: On compare la nouvelle liste avec l'ancienne pour trouver les
changements depuis la dernière vérification.
Code: |
diff links.old links.new |
On obtient les nouveaux billet (rajoutés),
ainsi que les anciens billets disparus de la page principale, qui ne nous
intéressent pas.
On ne garde que les lignes commencant par > , car elles
indiquent ce qui a été rajouté.
Code: |
sed 's/^>//g' | sed 's/ /\n/g' | sed "s/'/\n/g" | sed 's/"/\n/g' |
Grand nettoyage: On supprime le > du début de ligne, on remplace les espaces et
les guillements simples et doubles par des retours à la ligne, pour isoler les
adresses internet sur leurs lignes. (Toujours plus simple de travailler par
lignes)
On ne garde que les lignes contenant une adresse
internet.
Code: |
grep -v post_comment > mail.txt |
On retire les liens proposant de
poster un nouveau commentaire, et on enregistre cette liste de liens dans un
fichier mail.txt prêt à être envoyé par mail.
Résumé de la troisième étape:
Code: |
diff links.old links.new | grep '^> ' | sed 's/^>//g' | sed 's/ /\n/g' | sed "s/'/\n/g" | sed 's/"/\n/g' | grep http | grep -v post_comment > mail.txt |
Quatrième étape: Envoyer le mail
Rien de bien magique. Tout a déjà été préparé, y'a juste à envoyer.
Code: |
mv links.new links.old |
On met à jour notre base de connaissances,
afin de pouvoir comparer depuis le nouvel état dans la prochaine itération.
Cinquième étape: Planifier l'exécution.
On rajoute une ligne dans les tâches planifiées.
Code: |
00 08 * * * /home/user/update.sh >/dev/null
00 20 * * * /home/user/update.sh >/dev/null |
On demande une exécution tous les jours à 8h et 20h.
Résumé: Le fichier update.sh complet
Code: |
#!/bin/bash
rm -f blogs.txt profile mail.txt
echo "Fetching list of friends"
wget http://www.vivelesrondes.com/VotrePseudo/profile
echo "Fetching pages (This could take a while)"
grep '/profile/' profile | head -n1 | sed 's/,/\n/g' | sed 's/\/profile//g' | wget -i - -O blogs.txt --force-html
echo "Querying titles"
grep -E 'http://www.vivelesrondes.com/[A-Za-z0-9]+/[0-9]+/' blogs.txt > links.new
echo "Checking for update"
diff links.old links.new | grep '^> ' | sed 's/^>//g' | sed 's/ /\n/g' | sed "s/'/\n/g" | sed 's/"/\n/g' | grep http | grep -v post_comment > mail.txt
echo "Sending the mail"
/bin/mail -s "Mise a jour des blogs VLR" "[email protected]" < mail.txt
echo "Updating new state"
mv links.new links.old
|
N'oubliez pas de modifier VotrePseudo et [email protected].
Pour rendre le script exécutable.
Voilà. Il ne vous reste plus qu'à passer sous Linux.