Un des plus gros problèmes avec la procrastination structurée c'est que quand il s'agit de résoudre des problèmes on choisit souvent la façon la plus dure de faire!
Les logiciels de base de données des médicaments ce n'est pas ce qui manque et sur plein de plateformes mais toujours est-il qu'un logiciel Tunisien gratuit comprenant des mises-à-jour régulières des médicaments ayant l'AMM sur le territoire Tunisien eh bien finalement y en a pas un qui m'ait satisfait..
Alors que faire?
La réponse m'est apparue comme une évidence grand partisan du DIY que je suis: se coller soi-même à la tâche..
Mais par où commencer? Quelle source pour ma base de données?
Le ministère de la santé publique a bien une base de données des médicaments mais comment l'avoir?
Cette base de données des médicaments qu'offre si généreusement le ministère de la santé publique pose deux problèmes:
- Elle serait offerte au titre d'une convention avec la société désirant avoir la base; particuliers non?! Je ne sais pas: je ne suis pas allé au delà demander.
- Elle aurait comme corollaire une charte; donc encore plus de questions...
On est assez loin quand-même de la base de données publique des médicaments française disponible directement au téléchargement sur un site dédié.. C'est une appli gratuite pour mon utilisation personnelle; pourquoi se compliquer la vie?? Le site de la Direction de la Pharmacie et du Médicament offre la possibilité de consulter les fiches des médicaments; Eurêka! C'est là que j'irai piocher..
Il m'a suffi d'aller sur la page Médicament, sous la liste des médicaments, recherche par DCI, paracétamol pourquoi pas.. allez une fiche au hazard.. Trop facile! Chaque fiche est codée déjà dans l'URL; exemple:
http://www.dpm.tn/Francais/aspmed/fiche.asp?cod_medic=9524
Donc de la forme:
http://www.dpm.tn/Francais/aspmed/fiche.asp?cod_medic=xxxxxx
où xxxxxx correspond donc au numéro de la fiche..
Côté HTML rien de bien compliqué: un petit tableau avec par exemple la ligne pour la Spécialité:
<tr>
<td width="30%" bgcolor="#F3F3F3" align="right" <font face="Arial" Size="2"> <b>Spécialité : </b></td>
<td width="70%" bgcolor="#F3F3F3" align="left" <b><font face="Arial" color="#008000" Size="4">ADOL</font></b></td>
</tr>
RegEx mon bon vieux RegEx comment avoir la spécialité?
Spécialité[\s\S]*?Size="4">(.+?)<\/font\>
Tiens on essaye en Javascript pour voir:
console.log('<tr>\n <td width="30%" bgcolor="#F3F3F3" align="right" <font face="Arial" Size="2"> <b>Spécialité : </b></td>\n <td width="70%" bgcolor="#F3F3F3" align="left" <b><font face="Arial" color="#008000" Size="4">ADOL</font></b></td>\n</tr>'.match(/Spécialité[\s\S]*?Size="4">(.+?)<\/font\>/i)[1]);
BINGO!
Bon pour le traitement des fiches c'est réglé: il suffit de faire une boucle pour télécharger les fiches une par une et les traiter en RegEx; mais que faire de ces données? Il faudrait bien les mettre dans une base de données après... SQLite pour HTML5 oui voilà ma réponse..
Une petite implémentation pour voir..
Un problème cependant avec les navigateurs récents: ils sont trop sécurisés; je ne pourrais utiliser ni Ajax ni des iframes à cause de la restriction cross site scripting (XSS). Que faire? J'utiliserais un navigateur qui soit "moins" sûr de ce côté-là.. J'avais plusieurs choix mais puisqu'on y est autant utiliser la classe QWebView du framework Qt (Qt Webkit) et régler sa sécurité via la classe QWebSettings en une ligne:
view->settings()->setAttribute(QWebSettings::XSSAuditingEnabled,0);
Tout ce boulot pour avoir la base de données consultable en ligne de la DPM; oui il fallait le faire! Et mon code est sur ce dépôt Git si ça peut vous servir.. Très bientôt peut-être l'application multiplatforme à laquelle j'aspire!