notes·de·pit - Mot-clé - scriptParfois j'apprends à pêcher à des gens qui n'aiment pas le poisson2023-06-13T11:41:09+02:00PiTurn:md5:45526db4e4cfb511098640352c276065DotclearRécupérer la dernière image instagramurn:md5:70993c5aab46347c15cbac4517f13f3e2015-07-29T12:14:00+02:002015-07-29T11:50:40+02:00PiTMes doigts dans le clavierdebiangeekscript<p><img src="https://blog.namok.be/public/images/divers/2015/__haunted___by_wargusestor.jpg" alt="Haunted" /></p>
<p>Je ne veux pas me créer de compte <a href="http://instagram.com">instagram</a> pour diverses raisons. Je veux
quand même pouvoir voir les photos de l'un ou l'autre compte sans devoir aller
voir sur le site.</p>
<p>Il n'existe pas de <a href="https://fr.wikipedia.org/w/index.php?title=Souscription_%C3%A0_du_contenu&redirect=no">flux Atom /RSS</a> chez <a href="http://instagram.com">instagram</a>. Leur idée (je
pense) est d'encourager (forcer) les utilisateurs à installer l'application.
Il n'est donc pas possible de voir lorsqu'une nouvelle photo est postée sur un
compte. De plus lorsque je me rends sur une page <a href="http://instagram.com">instagram</a>, je ne « sais
» pas (facilement) sauvegarder l'image.</p>
<p>Comment faire ?<br />
Ça devient un peu technique.</p>
<p><a href="http://curl.haxx.se/">Curl</a> me permet de récupérer du contenu web mais il ne permet pas
d'exécuter du <a href="http://namok.be/blog/?q=javascript">javascript</a>. Si je regarde un peu le contenu de la page
générée par <a href="http://instagram.com">instagram</a>, je vois pas mal de <em>javascript</em>. En fait le <code>body</code>
de la page html n'est qu'un script <em>javascript</em>.</p>
<p>Pour exécuter du <em>javascript</em> en ligne de commande, c'est <strong><a href="http://phantomjs.org">Phantomjs</a></strong> la
solution. Dans les exemples, je vois qu'il est facile de parcourir le DOM de
la page et d'accéder aux éléments de la pages. Par exemple (issu du <a href="http://phantomjs.org">site
officiel</a>), pour récupérer le titre de la page, il suffit d'écrire:</p>
<p><code>javascript
var page = require('webpage').create();
page.open(url, function(status) {
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
phantom.exit();
});</code></p>
<p>Pour l'exercice, choisissons une page <em>instagram</em> au hasard en entrant dans un
moteur de recherche une requête de la forme <code>chaton site:instagram.com</code><sup id="fnref:f1"><a href="https://blog.namok.be/?post/2015/07/29/recuperer-derniere-image-instagram#fn:f1" rel="footnote">1</a></sup>.</p>
<p>En parcourant le DOM de la page <em>instagram</em> (en utilisant <a href="http://getfirebug.com/">Firebug</a>
par exemple) je vois que les <code>div</code> contenant les images s'appellent
<code>pImage_<i></code>.</p>
<p><a href="https://blog.namok.be/public/images/divers/2015/screenshot-instagram-1.png" title="screenshot-instagram-1.png"><img src="https://blog.namok.be/public/images/divers/2015/.screenshot-instagram-1_m.png" alt="screenshot-instagram-1.png" style="margin: 0 auto; display: block;" title="screenshot-instagram-1.png, juil. 2015" /></a></p>
<p>Je vois aussi que l'objet <code>pImage_<i></code> contient un attribut <code>src</code> dont la
valeur est l'url de l'image.</p>
<p><a href="https://blog.namok.be/public/images/divers/2015/screenshot-instagram-2.png" title="screenshot-instagram-2.png"><img src="https://blog.namok.be/public/images/divers/2015/.screenshot-instagram-2_m.png" alt="screenshot-instagram-2.png" style="margin: 0 auto; display: block;" title="screenshot-instagram-2.png, juil. 2015" /></a></p>
<p>C'est (presque) fini. On a toutes les infos nécessaires pour écrire un script
qui sera lancé toutes les minutes / heures c'est selon. J'adapte le code
javascript d'exemple pour obtenir cette url et je fais ensuite un <a href="http://www.gnu.org/software/wget/">wget</a>
afin d'obtenir l'image. J'écris un petit script qui sera pris en charge par
<code>cron</code>. Ce script vérifie que l'image n'est pas déjà téléchargée et, sinon, la
télécharge.</p>
<p>La solution complète se trouve <a href="https://github.com/Pinkilla/instagramget">sur github | instagramget</a>.</p>
<p>Enjoy !</p>
<p><br/></p>
<p><em>Crédit photo chez <a href="http://deviantart.com">DeviantArt</a> par <a href="http://wargusestor.deviantart.com/art/Haunted-98214282">WargusEstor</a>.
L'originalité d'un fantôme.</em></p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:f1">
<p>D'accord, j'ai remplacé « chaton » par un nom au hasard ! <a href="https://blog.namok.be/?post/2015/07/29/recuperer-derniere-image-instagram#fnref:f1" rev="footnote">↩</a></p>
</li>
</ol>
</div>
Twitter met à jour son API et rien ne va plusurn:md5:bec3b58d372fbda171965e637aee30392012-10-19T13:44:00+02:002012-10-19T13:03:54+02:00PiTMes doigts dans le claviergeekscripttwitter<p>Depuis quelques jours, l'affichage sur mon site d'une partie de mes tweets ne fonctionne plus. <a href="http://twitter.com">Twitter</a> nous informe que l'on peut inclure notre <em>timeline</em> dans notre site web avec une <strong>meilleure expérience utilisateur</strong> (<a href="https://dev.twitter.com/blog/embedded-timelines-howto">How to embed Twitter timelines on your website</a>)</p> <div class="center">
<a class="twitter-timeline" href="https://twitter.com/Pinkilla" data-widget-id="259249248212754432">Tweets by @Pinkilla</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
<p>Par contre, si l'on veut que ça reste <strong>discret</strong> ça ne fonctionne plus :-(</p>
<p>Un peu de recherche plus tard, <a href="http://www.clarkcommunications.ca/wordpress-twitter-widget-not-loading/">Clark</a> me donne la solution … Il ne faut plus faire appel a l'API Twitter par le biais de <code>http://twitter.com/statuses/user_timeline</code> mais plutôt <strong><code>http://api.twitter.com/statuses/1/user_timeline</code></strong>.</p>
<p>Modifier cet appel dans vos scripts devrait résoudre le problème …</p>
<h5>Liens</h5>
<ul>
<li><a href="https://dev.twitter.com/blog/embedded-timelines-howto">How to embed Twitter timelines on your website</a></li>
<li><a href="http://www.clarkcommunications.ca/wordpress-twitter-widget-not-loading/">Clark</a></li>
<li><a href="https://dev.twitter.com/discussions/10633">Embedded Timelines Questions</a></li>
</ul>Notification d'emails notify-mailurn:md5:5a5c76e1a46888735b9d2505860623e92011-03-17T15:55:00+01:002011-03-17T16:42:23+01:00PiTMes doigts dans le clavierdebiandiversesigeekinutileperlpratiquescript<p><a href="https://blog.namok.be/public/images/divers/2011/screenshot-notify-send2.png"><img src="https://blog.namok.be/public/images/divers/2011/.screenshot-notify-send_t.jpg" alt="screenshot-notify-send.png" style="float:right; margin: 0 0 1em 1em;" title="screenshot-notify-send.png, mar. 2011" /></a></p>
<p>Je lisais quelque part qu'il était très simple de <strong>notifier</strong> un message à l'écran. Il suffit d'installer le paquet <code>libnotify</code> et la commande <code>notify-send</code> est disponible. Sa syntaxe est toute simple puisqu'il suffit d'écrire ...</p>
<pre>
notify-send "Mon titre" "Mon message" -i /elsewhere/monicone.png
</pre>
<p>Il ne m'en faut pas plus pour jouer un peu ...</p> <p>... je me rappelle avoir écrit un script permettant de tester le nombre de mails contenu dans une <em>mailbox</em> (de type <code>mailbox</code>). En reprenant ce script et en le modifiant un peu, j'obtiens un petite notification chaque fois que je reçois un nouveau message.</p>
<blockquote><p>You have got a message</p></blockquote>
<p>Voici le script</p>
<pre class="perl"><span style="color: #808080; font-style: italic;">#!/usr/bin/perl -w </span>
<span style="color: #808080; font-style: italic;"># Biff mailboxe and notify</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Script for checking mailbox (mbox format) and notify result. </span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Require: libnotify </span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Usage:</span>
<span style="color: #808080; font-style: italic;"># notify-mail MBOX</span>
<span style="color: #808080; font-style: italic;"># MBOX : mbox file (/var/spool/user or anything else)</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Author: Pierre BETTENS, <pb@namok.be></span>
<span style="color: #808080; font-style: italic;"># Thanks to Moshe Kaminsky <kaminsky@math.huji.ac.il>, </span>
<span style="color: #808080; font-style: italic;"># Version: 0.1</span>
<span style="color: #808080; font-style: italic;"># Copyright: Use it ... </span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #000000; font-weight: bold;">use</span> strict ;
<span style="color: #808080; font-style: italic;"># Import for lock file</span>
<span style="color: #000000; font-weight: bold;">use</span> Fcntl <span style="color: #ff0000;">':flock'</span>;
<span style="color: #808080; font-style: italic;"># Config</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$usage</span> = <span style="color: #ff0000;">"Usage : notify-mail <mboxfile> <span style="color: #000099; font-weight: bold;">
</span>"</span> ;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$icon_file</span> = <span style="color: #ff0000;">"/elsewhere/email_icon.jpg"</span>;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mboxfile</span> ;
<span style="color: #0000ff;">$mboxfile</span> = <span style="color: #000066;">shift</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #0000ff;">$usage</span> ;
<span style="color: #000066;">open</span> MBOX_FILE, <span style="color: #0000ff;">$mboxfile</span>
<span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span> <span style="color: #ff0000;">"Failed to open folder: $mboxfile"</span> ;
<span style="color: #808080; font-style: italic;"># Ok, I count mails</span>
<span style="color: #808080; font-style: italic;"># Thanks to Moshe Kaminsky <kaminsky@math.huji.ac.il>, </span>
<span style="color: #808080; font-style: italic;"># I stole him the idea of "Status: R". </span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mails</span> = <span style="color: #cc66cc;">0</span> ;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$oldmails</span> = <span style="color: #cc66cc;">0</span> ;
<span style="color: #000066;">flock</span><span style="color: #66cc66;">(</span>MBOX_FILE,LOCK_EX<span style="color: #66cc66;">)</span>; <span style="color: #808080; font-style: italic;"># lock </span>
<span style="color: #b1b100;">while</span> <span style="color: #66cc66;">(</span><span style="color: #009999;"><MBOX_FILE></span><span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span>
<span style="color: #0000ff;">$mails</span>++ <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">/</span>^From <span style="color: #66cc66;">/</span>o;
<span style="color: #0000ff;">$oldmails</span>++ <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">/</span>^Status: R<span style="color: #66cc66;">/</span>o;
<span style="color: #66cc66;">}</span>
<span style="color: #000066;">flock</span><span style="color: #66cc66;">(</span>MBOX_FILE,LOCK_UN<span style="color: #66cc66;">)</span>; <span style="color: #808080; font-style: italic;"># unlock </span>
<span style="color: #000066;">close</span> MBOX_FILE;
<span style="color: #808080; font-style: italic;"># Work is done ... notify</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$nmessages</span> = <span style="color: #0000ff;">$mails</span>-<span style="color: #0000ff;">$oldmails</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">(</span> <span style="color: #0000ff;">$nmessages</span> <span style="color: #66cc66;">></span> <span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">)</span> <span style="color: #66cc66;">{</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$message</span> = <span style="color: #ff0000;">"You have got "</span>
. <span style="color: #0000ff;">$nmessages</span> . <span style="color: #ff0000;">" message <span style="color: #000099; font-weight: bold;">
</span>(in "</span> . <span style="color: #0000ff;">$mboxfile</span> .<span style="color: #ff0000;">")"</span>;
<span style="color: #808080; font-style: italic;"># I must add export DISPLAY because cron don't know my display :-(</span>
`export DISPLAY=:<span style="color: #cc66cc;">0.0</span> \n <span style="color: #66cc66;">&&</span> notify-<span style="color: #000066;">send</span> <span style="color: #ff0000;">"Notify mail"</span> <span style="color: #ff0000;">"$message"</span> -i <span style="color: #0000ff;">$icon_file</span>`;
<span style="color: #66cc66;">}</span></pre>
<p>J'apporte une petite précision. Je ne reçois <strong>une</strong> de notification <strong>dès</strong> que je reçois un mail mais je reçois une notification chaque fois que je décide de regarder si j'ai reçu un mail et ceci tant que le mail reste non lu ^^. Je dois donc ajouter mon script comme tache <code>cron</code> (<a href="http://fr.wikipedia.org/wiki/Cron">Qu'est-ce ?</a>). J'ajoute donc ma tâche afin qu'elle s'exécute toutes les 2 minutes<sup>[<a href="https://blog.namok.be/?post/2011/03/17/Notification-d-emails-notify-mail#pnote-1128-1" id="rev-pnote-1128-1">1</a>]</sup>.</p>
<pre>
$ crontab -e
*/2 * * * * /home/pit/bin/notify-mail /var/spool/mail/pit
</pre>
<p>Et <strong>bam</strong> ! Mon script ne fonctionne plus. Une <a href="http://crunchbanglinux.org/forums/topic/10602/cron/">petite recherche plus tard </a> et tout roule. Il faut spécifier à <code>cron</code> quel <em>display</em> utiliser<sup>[<a href="https://blog.namok.be/?post/2011/03/17/Notification-d-emails-notify-mail#pnote-1128-2" id="rev-pnote-1128-2">2</a>]</sup>.</p>
<p>Enjoy ...</p>
<p><strong>À lire également</strong></p>
<ul>
<li><a href="https://blog.namok.be/blog/index.php?post/2009/04/01/229-facebook-notification">Facebook notification</a></li>
</ul>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="https://blog.namok.be/?post/2011/03/17/Notification-d-emails-notify-mail#rev-pnote-1128-1" id="pnote-1128-1">1</a>] Ce qui peut être assez intrusif ...</p>
<p>[<a href="https://blog.namok.be/?post/2011/03/17/Notification-d-emails-notify-mail#rev-pnote-1128-2" id="pnote-1128-2">2</a>] D'où le <code>export</code> ajouté dans le script</p></div>
Goobook et groupesurn:md5:8ac6e53b5333333d4c2e801f201efed62011-01-24T11:08:00+01:002011-01-24T11:15:02+01:00PiTMes doigts dans le clavierdebiandiversesigeekgoobookperlscript<p>J'utilise <a href="http://blog-marcel.eu/index.php?article34/goobook-l-ami-de-mutt-l-imap-et-gmail">Goobook </a> pour accéder à mes contacts <a href="http://gmail.com">GMail</a> via mon lecteur de mail, <em>aka</em> <a href="http://mutt.org">Mutt</a> ... c'est mon choix ;-) Les utilisateurs de clients mail web ou plus graphiques peuvent passer leur chemin :-)</p>
<p>GMail permet de rassembler des contacts par groupes, ce dont j'use et abuse. Et il est donc naturel de vouloir envoyer un mail à tous les membres d'un groupe. Pour l'instant Goobook ne le permet pas.</p> <p>Si je fais un <code>goobook query Friends</code>, j'obtiens un résultat de la forme</p>
<pre>
Mon ami <('email@example.com', 'groupe principal')>,
Mon deuxième ami <('email@example.com', 'groupe principal')>,
</pre>
<p>et mutt me l'interprête comme suit</p>
<pre>
Mon ami <>, Mon deuxième ami <>
</pre>
<p>ce qui ne m'arrange par pour leur envoyer un mail.</p>
<p>J'ai posé la question à <a href="http://blog-marcel.eu/index.php?article62/goobook-perd-mes-contacts/#c1295805869-1">Marcel </a> <sup>[<a href="https://blog.namok.be/?post/2011/01/24/Goobook-et-groupes#pnote-1119-1" id="rev-pnote-1119-1">1</a>]</sup> qui me propose de régler ça à coup de <em>sed</em> ... mais ça ne fonctionne pas pour moi car ça ne me retourne que le premier contact. Comme je ne trouve pas mon erreur et que je ne parviens par à faire un <em>foreach</em> avec sed, je propose ce p'tit script <a href="http://perl.org">perl</a> qui fera l'affaire le temps que Goobook ne fasse ça proprement.</p>
<pre>
$> cat goobook-hack.pl
#!/usr/bin/perl
while ( <> ) {
@junk = split />, /;
foreach $i (@junk) {
$i =~ s/(.*) <\('(.*)',(.*)/"$1" <$2>/g;
print "$i,";
}
}
</pre>
<p>Il reste à placer ce script quelque part (dans <code>~/bin</code> par exemple) et de modifier son fichier <code>muttrc</code> comme suit;</p>
<pre>
#set query_command="goobook query '%s'"
set query_command="goobook query '%s' | ~/bin/goobook-hack.pl "
</pre>
<p>Enjoy</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="https://blog.namok.be/?post/2011/01/24/Goobook-et-groupes#rev-pnote-1119-1" id="pnote-1119-1">1</a>] Pas mon collègue, un autre.</p></div>
Tweet comme une imageurn:md5:24e5db70156bef3539a56a2e08f0e1132011-01-09T01:48:00+01:002011-01-09T02:55:21+01:00PiTMes doigts dans le clavierdiversgeekphpscripttwitter<p>Jusqu'à il y a peu, j'utilisais <a href="http://twitstamp.com">TwitStamp </a> pour ajouter mon status <a href="https://blog.namok.be/?post/2011/01/09/http;//twitter.com">Twitter </a> comme signature sur un forum. Le site est malheuseusement <em>down</em>. Il n'est pas possible d'ajouter une signature dynamique sur un forum. Le texte que l'on écrit l'est une fois pour toute.</p>
<p>Par contre il est possible d'y ajouter une image ... et si par magie cette image change réguièrement (en conservant le même nom), alors je vois apparaître mon status comme signature du forum.</p>
<p>Inutile donc indispensable.</p> <p>J'avais choisi TwitStamp car il me permettait de générer une image très sobre. Il existe moults autres sites offrant ce service ... mais ces sites ne laissent pas choisir l'image en question. On peut citer</p>
<ul>
<li><a href="http://www.twitsig.com">TwitSig </a></li>
</ul>
<p><img src="https://blog.namok.be/?post/2011/01/09/ http://twitsig.com/Pinkilla.jpg " alt="" /></p>
<ul>
<li><a href="http://www.tweetbars.com/get.php?u=pinkilla">TweetBars </a></li>
</ul>
<p><img src="https://blog.namok.be/?post/2011/01/09/ http://bar.tweetbars.com/pinkilla.gif " alt="" /></p>
<ul>
<li><a href="http://www.twiimg.com/">TwiImg </a> qui ne semble pas fonctionner à l'heure où j'écris ces lignes.</li>
<li><a href="http://www.twittersignaturestyles.com/">Twitter Signature Styles </a> qui est l'un des seuls à encore proposer plusieurs choix de styles.</li>
</ul>
<p><img src="http://twittersignaturestyles.com/twittersig.php?id=pinkilla&style=7" alt="" />
<img src="http://twittersignaturestyles.com/twittersig.php?id=pinkilla&style=8" alt="" />
<img src="http://twittersignaturestyles.com/twittersig.php?id=pinkilla&style=2" alt="" /></p>
<ul>
<li><a href="http://twitimg.com">TwitImg </a></li>
</ul>
<p><img src="http://twitimg.com/pinkilla.png" alt="" /></p>
<ul>
<li>... et peut-être encore d'autres.</li>
</ul>
<p>Bref, je ne vois là rien qui m'interesse lorsque je tombe sur [cet article |
http://oeuvres.artlibre.org/Numerique/Logiciel/2502.html] relatant l'existence d'un script écrit en son temps (2009) par <a href="http://logz.org/">LoZ </a>. Ce script, <strong><a href="http://logz.org/tweetimg">TweetImg</a></strong> fait le boulot en utilisant les librairies <a href="https://blog.namok.be/?post/2011/01/09/magpierss.sourceforge.net">MagpieRSS </a> et GQ en <a href="http://php.net">PHP </a>.</p>
<p>Même s'il me fourni une image assez moche, elle est suffisament simple que pour me plaire et surtout me permet de modifier à ma guise le script fourni.</p>
<p><img src="http://logz.org/tweetimg/tweetimg.php?user=pinkilla" alt="" /></p>
<blockquote><p>TweetImg est un script utilisant la librairie gd et magpierss pour convertir le dernier tweet de votre fil rss de status, en images png, que l'on peut ensuite facilement intégrer sur un blog etc.</p></blockquote>
<p>Je passe en revue le code $$Je me permet de renommer le script en <code>tweetimglight.php</code> car je vais le simplifier au maximum pour mes simple besoin. Je veux simplement que mon status soi afficher sans (trop) de couleur, sans bord. Je n'ai pas besoin de permettre de le modifier en ligne ... je veux <strong>quelque chose de très simple</strong>.</p>
<p>En passant je renomme les variables (<code>s/CouleurFond/backgroundColor/</code>) et j'indente un peu mieux. Voilà, c'est hébergé et ça donne ça:</p>
<p><img src="http://namok.be/tweetimglight/tweetimglight.php?user=Pinkilla" alt="" /></p>
<p>J'avais dit: "Simple".</p>
<p>Le code (sans la librairie MagpieRSS) -> (Je le posterai demain car ça me génère une erreur 500 ?)</p>Script createODT permettant la création de fichiers ODT en masseurn:md5:b8c869915840d9542ba70381454e8f1c2010-10-04T11:35:00+02:002010-10-04T10:43:11+02:00PiTMes doigts dans le clavieresigeekscript<p>J'utilise <a href="http://openoffice.org">Openoffice</a> pour faire des <strong>fiches de correction individuelles</strong> pour mes étudiants. Ces fiches contiennent mes remarques sur les exercices faits (ou pas) et un récapitulatif des cotes.</p>
<p>Un étudiant a accès à sa fiche quand il le désire et la conserve pendant tout son cursus et moi je mets à jour au fur et à mesure ... rien de bien exceptionnel, j'ai sans doute plein de collègues qui font le même genre de chose.</p>
<p>Ce qui est assez <del>chiant</del> répétitif c'est de devoir créer une fiche par étudiant en début d'année; je veux utiliser un style (donc un modèle), insérer la photo de l'étudiant, ses nom et prénom ... (c'est lourd) ... Il y a un moment où il faut arrêter de cliquer sur "Nouveau document" / Insérer photo, éditer le nom, ...</p>
<p>Il faut écrire un p'tit script qui fait le boulot :-)</p> <p>Pour info donc le format <strong>odt</strong> est en fait une archive <strong>zip</strong> qui contient <em>tout le merdier</em> (le contenu, les styles, les images ...). Donc si je crée un document <code>MODELE.ott</code> que je le dézippe, que je change l'image, que je change le prénom, le nom et que je rezippe (sous un autre nom), c'est bon.</p>
<p>À coup de dezip et de sed, on obtient un script permettant d'écrire</p>
<pre>
createODT Juste Leblanc ALG3ir /elsewhere/tasvutatete.png
</pre>
<p>Et je suis content ... j'ai perdu 2h pour en gagner moults ensuite.</p>
<p>Le script:</p>
<pre>
#!/bin/bash
#
# Script permettant de créer des fichiers ODT sur base d'un modèle.
#
# Le script remplace la photo, le prénom, le nom et le nom du cours
# Voir le fichier MODELE-FICHE.ott
#
# Author Pierre 'Pit' Bettens (pbettens(à)heb.be)
# Config
FILE="/home/pit/home/fiches/MODELE_FICHE.ott"
BASENAME='MODELE_FICHE.ott'
YEAR='2010-2011'
FROMDIR=`pwd`
TMP=/tmp/odt
if [ -d $TMP ] ; then
rm -fr $TMP
fi
mkdir $TMP
# Check params
if [ ! $# -eq 4 ] ; then
echo 'Args missing'
echo 'Snopsis: createODT <fist name> <name> <course> <picture>'
exit
fi
FIRSTNAME=$1
NAME=$2
COURSE=$3
PICTURE=$4
if [ ! -e $PICTURE ] ; then
echo "I can't find file" $PICTURE
exit
fi
# Check if file model exist
if [ ! -e $FILE ] ; then
echo 'File missing'
echo 'I would like manage this file' $FILE
exit
fi
##cp $FILE $TMP
cd $TMP
##unzip $BASENAME
unzip $FILE -d $TMP
sed "s/Prénom/$FIRSTNAME/" content.xml | \r
sed "s/NOM/$NAME/" | \r
sed "s/AAAA-AAAA/$YEAR/" | \r
sed "s/COURS/$COURSE/" > contentTMP.xml
mv contentTMP.xml content.xml
# I must use odt filename
PICTUREFILE=`ls Pictures`
cp $PICTURE Pictures/$PICTUREFILE
zip -r $FIRSTNAME$NAME.odt *
mv $FIRSTNAME$NAME.odt $FROMDIR
rm -fr $TMP
</pre>