Jean-Hugues Roy

Expériences | réflexions | scrapbook

Essai d’un nouvel outil: Morph.io

ScraperWiki montre des signes de fatigue. Ce que laisse penser la capture d’écran ci-dessous, en tous cas, n’est pas rassurant pour le site britannique qui a été un des pionniers en journalisme de données au début de la décennie.

ScraperWikiScrapCe que ça montre, c’est qu’un de mes scripts s’est arrêté dès la ligne numéro 5, c’est-à-dire dès la première ligne exécutable!

Et ce que cette première ligne doit exécuter est simple: une commande pour faire fonctionner une bibliothèque appelée « scraperwiki » qui ne fonctionne que sur ScraperWiki. Mais voilà que ScraperWiki est incapable de charger la bibli qui porte son nom! Il y a un problème…

Et puis, hier soir, Chad Skelton a envoyé une question préoccupante sur la liste de discussion NICAR, consacrée au journalisme assisté par ordinateur. Chad se sert de ScraperWiki pour un robot Twitter britano-colombien qui nous a inspirés, Naël Shiab et moi. Il indiquait que:

[…] ScraperWiki has phased out their free trial account, and even their cheaper paid accounts are now gone, leaving only « entreprise accounts » starting at $2,000/month.

Oh oh. Cela pourrait vouloir dire que ce que j’ai hébergé sur ScraperWiki ne fonctionnera plus bientôt.

Heureusement, toujours sur la liste de discussion par courriel de NICAR, quelqu’un d’autre (Ed Ramthun) a proposé une solution de rechange appelée morph.io.

Logo de Morph.ioJe l’ai essayée et je dois dire que j’ai été impressionné. Morph est une création de la Open Australia Foundation, une organisation qui milite pour les données ouvertes, à l’image de Nord Ouvert ici. C’est ni plus ni moins qu’une machine à scraper très bien faite.

Le passage de ScraperWiki à Morph se fait sans heurts, puisqu’ils utilisent la même saveur de SQL, sqlite.

Il y a cependant des différences capitales. D’abord, Morph n’héberge pas lui-même le code, comme le fait ScraperWiki. Quand vous y ouvrez un compte, vous le liez à votre compte Github et c’est le code que vous publiez dans Github qui est exécuté par Morph. Ceci vous force donc, à moins que vous ne possédiez un compte payant dans Github, à rendre public le code de votre extracteur.

Par ailleurs, Morph vous oblige à donner libre accès aux données que vous scrapez, à les rendre publiques.

Un outil qui nous force à la transparence. Excellent!


En quelques minutes, j’ai donc pu faire migrer le script de RoboTribunauxQC sur morph.io et le faire rouler:

MorphSucces

Mais il y a un mais…

Un outil comme celui-là est peu adapté à des robots Twitter, car pour tweeter automatiquement, il faut inclure dans son code différentes clés d’accès secrètes:

Twitter.configure do |config|
  config.consumer_key = "CLÉ1"
  config.consumer_secret = "CLÉ2"
  config.oauth_token = "CLÉ3"
  config.oauth_token_secret = "CLÉ4"
end

Et disons qu’il n’est pas recommandé de laisser trainer ses clés d’accès sur Github, au vu et au su de toute la populaschtroumpf. Je crois que je n’aurai pas le choix de faire migrer RoboTribunauxQC sur mon serveur maison.

Morph.io n’est donc pas utile à court terme. Mais à moyen et long terme, c’est un service vraiment intéressant qui travaille en plein dans l’esprit des données ouvertes, des données dans l’intérêt public.


MISE À JOUR (deux heures plus tard!)

Le créateur de morph.io m’a indiqué qu’il est possible de cacher des variables dans son outil. Il s’agit d’aller dans les « settings » et d’entrer les valeurs qu’on veut garder confidentielles dans autant de variables secrètes, les Secret environment variables dont le nom commence toujours par MORPH_.

Dans le cas qui m’intéresse, j’en ai quatre:

VariablesSecretes

Ensuite, il faut en quelque sorte faire migrer ces variables secrètes de l’environnement de morph.io à notre script en les passant dans des variables locales. Pour ce faire, on peut se servir de la classe ENV de ruby. Voici le code que j’ai écrit:

cle1 = ENV['MORPH_1']
cle2 = ENV['MORPH_2']
cle3 = ENV['MORPH_3']
cle4 = ENV['MORPH_4']

client = Twitter::REST::Client.new do |config|
  config.consumer_key = cle1
  config.consumer_secret = cle2
  config.access_token = cle3
  config.access_token_secret = cle4
end

Ainsi, on peut rendre public du code tout en mettant certains éléments sensibles à l’abri des regards.

À noter qu’il n’y a aucune documentation sur l’utilisation de ces variables secrètes. Les utilisateurs s’en plaignent, d’ailleurs, dans cette discussion sur le github des créateurs de l’outil: « No documentation of how to use secret environment variables » . J’ai partagé ma solution dans le fil de discussion.


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Jean-Hugues Roy [CC] BY-NC-SA, 1988-aujourd'hui Frontier Theme