J'ai fais un script pour trouver mon vaccin

J'ai fais un script pour trouver mon vaccin

28/05/2021

Depuis​‌‍​‌​‌‍​‍ le 11 mai 2021, tous les plus de 18 ans peuvent se faire vacciner s’ils arrivent à trouver un rendez-vous dans les 24 H. et même si des sites ou applications comme vite ma dose font bien le travail, mais il y a une forte latence entre les rendez-vous réputés disponibles et ce l’est vraiment. Ce qui est normal ; à cette échelle, il est difficile d’actualiser les résultats en temps réel.

Dans ma région, c’est Doctolib qui même la danse, j’ai décidé de faire un script me permettant de trouver les rendez-vous disponibles dans les 24 H.

L’idée est venue d’un ami qui avait extrait un appel d’API permettant d’obtenir les rendez-vous disponibles :

1
https://partners.doctolib.fr/availabilities.json?start_date=2021-06-30&visit_motive_ids=2756293&agenda_ids=462767-462746-461961-458000-453116-453117&insurance_sector=public&practice_ids=181675&destroy_temporary=true&limit=7

Analyse

On y retrouve plusieurs arguments qui par chance ont des noms évocateurs. Je ne retiens ici que ceux qui nous intéressent :

  • start_date la date à partir de laquelle on cherche un rendez-vous
  • visit_motive_ids le motif de la visite
  • agenda_ids les calendriers dans lesquelles on recherche
  • practice_ids le lieu d’injection

On remarque que la plupart sont au pluriel, donc on devrait pouvoir passer une liste, on a même un exemple ici ou le - semble être le séparateur.

Mais où trouvons nous ces identifiants ? En cherchant un peu, je trouve finalement une route qui permet de récupérer les informations d’un établissement :

1
https://www.doctolib.fr/booking/${slug or id}.json

Ainsi que la liste des motifs de visite, agendas et lieux d’injection. Un peu de “magie noire” pour associer les lieux aux agendas et les agendas aux motifs de visite et le tour est joué, toutes les données sont là.

En cherchant sur plusieurs centres de vaccination que le motif de visite est toujours organisé de la même manière : ${marque du vaccin} - ${première|seconde} injection. Donc avec un filtre, je suis capable de faire des propositions ciblées.

J’ai donc maintenant un script, qui cherche parmi une liste de centres les doses disponibles à un instant T pour le lendemain. Le problème a cette étape-là, c’est que tout sort dans la console, pas super user-friendly et surtout, j’ai besoin de lancer le script manuellement, bref, ce n’est pas fini.

Alerte

Dans le cadre de mon projet de domotique, j’utilise un système de communication bi-directionnelle qui s’appelle PushBullet. Ça me permet d’envoyer des commandes à ma plateforme domotique depuis mes outils et a ma plateforme de m’envoyer des notifications (alarme, température, fin de charge de mon VE…).

C’est bien intégré, avec toutes les librairies qui vont avec, donc je vais aussi m’en servir pour me notifier quand un rendez-vous est disponible avec un lien pour prendre rendez-vous encore plus rapidement.

Et pour que ça tourne tout seul, je fais une tâche planifiée qui tourne toutes les 5 minutes et j’attends le 10 mai pour voir si un RDV est disponible pour le 11 mai.

Rendez-vous

Le 10 mai à 11 h, je reçois une alerte pour le centre de vaccination près de chez moi pour le lendemain. Je clique sur le lien, bloque le rendez-vous.

Bref, je suis vacciné.

Ouverture

Ce script est ouvert et est disponible sur GitHub https://github.com/neoPix/covid-check. Si vous avez un profil technique et que vous cherchez à vous faire vacciner, vous êtes libre de l’utiliser.

J’ai documenté son usage dans une Lambda AWS afin de le faire fonctionner en 24h/24 et pas uniquement quand votre poste est allumé.

J’ai aussi ajouté la possibilité de notifier par mail et de définir plusieurs profils de recherche, si vous souhaitez chercher en même temps pour un membre de votre famille qui habite a l’autre bout de la France.