Julien De Bona
Free Software, Cooking, and Everything


Comptage de moutons

Publié le 2014-11-12.

Il fut un temps où mes réalisations étaient bien plus tordues chez moi qu'au travail.  D'un côté je cherchais une boucle bien cachée dans un réseau à géométrie variable de 3 machines, de l'autre tout était plus conventionnel et marchait au poil.  Au fil des années et des fusions, la PME principalement sous Linux est devenue une multinationale avec une informatique un rien plus grégaire où les produits de Microsoft sont omniprésents.  Au passage, cela me permet de me targuer d'une expérience variée, sans pour autant passer pour un gars instable qui change en permanence d'employeur.

Mais revenons à nos moutons, animaux grégaires s'il en est.  Je me retrouve donc intégré dans une équipe disséminée aux quatre coins de l'Europe.  Etant le seul avec une formation de programmeur, diverses tâches d'automatisation me sont confiées.

Il y a une activité particulièrement soporifique dans ce milieu: le comptage de licenses.  Dans ce cas particulier, il s'agit de récupérer depuis le site web de Microsoft la liste de nos licenses MSDN, et de les faire correspondre à nos propres données.  Mettre les deux en correspondance n'est pas sorcier, récupérer le fichier était fait manuellement et c'est cette tâche qu'il m'a fallu automatiser.  Mon collègue en relation avec Microsoft me transmet les explications de son contact, du genre "Ca peut se faire, vous montrez à votre programmeur comment vous téléchargez le fichier et il vous l'automatisera.".

Je me dis que si c'est automatisable, il doit y avoir des APIs quelque part.  J'en trouve une pour m'authentifier avec un compte Microsoft (anciennement Microsoft Passport, .NET Passport, Windows Live ID - liste non exhaustive), je récupère un cookie que j'inclus dans ma requête sur l'URL de la liste et le tour est joué.  Sauf que ... pas d'API qui ressemble à ce que je cherche.

Après plusieurs tentatives vaines, je me résous à piloter un navigateur complet, avec support de Javascript et tout et tout ...  La solution finale me permet de rentrer dans la ligne éditoriale de ce site et inclut:

  • PhantomJS, un navigateur Webkit headless, pilotable en Javascript et multi-plateforme.  Il tient en un exécutable ne nécessitant pas d'installation et c'est ce que j'ai trouvé de plus abouti.
  • L'implémentation des TOTP de Gauth Authenticator depuis que Live.com nécessite une double authentification.
  • Beaucoup de temps et d'énergie

En conclusion, quelques techniques de développement web pour m'énerver incluent:

  • servir des pages vides remplies par Javascript,
  • nommer les champs de formulaires i0116, i0118 ...,
  • multiplier les cookies,
  • traduire des données destinées à un traitement informatique,
  • utiliser la même URL pour tous les documents, en déterminant celui à servir sur base d'un cookie

Au final, tout cela est bien dégueulasse et risque de casser au moindre remaniement du site de Microsoft, mais ça marche et il paraît que c'est un outil très utile, avec des économies à la clé.  Si je dois encore le modifier, je jetterai un oeil du côté de Selenium pour piloter PhantomJS, en espérant qu'il me permette d'éliminer le code spaghetti.