Le blog de nlehuby

mai 19, 2014

OpenBeerMap – où trouver ma bière préférée ?

EDIT : pour suivre l'actualité d'OpenBeerMap, suivez le mot-dièse #OpenBeerMap et le journal OSM https://www.openstreetmap.org/user/OpenBeerMapContributor/diary

Parfois, lorsque je sors avec des acolytes, on se retrouve dans un bar qui sert une bière blonde dégueulasse tout juste bonne à faire des panachés classique, et on découvre en sortant que le bar d’à côté sert de la bière belge d’abbaye.

Je ne suis pas une grande amatrice de bière, mais je trouve ça plutôt frustrant.

Et qui dit frustration dit besoin sous-jacent.

Et qui dit besoin dit « il me faut une application pour ça ! »

Bref, c’est ainsi qu’il m’est venu l’idée de faire une carte affichant les bars et les bières qui y sont servies, à partir des données OpenStreetMap bien sûr !

Le résultat est visible ici : http://openbeermap.github.io/

Voici comment ça s’est déroulé.

Bon, j’ai commencé par apprendre les bases du javascript (parce que mon langage de prédilection, c’est plutôt le python, mais c’est quand même nettement moins adapté pour faire des cartes sur le web).

Je suis parti d’un plugin Leaflet (qui est un bibliothèque javascript efficace pour afficher des cartes) pour afficher des données à partir de l’API Overpass.

L’API Overpass (qui est testable sur cet IDE (http://overpass-turbo.eu/) permet de faire des requêtes sur les données OSM avec toutes sortes de filtres.

Dans mon cas, c’est amenity = pub (ou bar ou cafe) et brewery = {nom de ma bière}

Assez rapidement et sans y connaitre grand-chose, j’ai pu faire une joli carte avec des cases à cocher pour les différents types de bière :

image : OBM

Puis, j’ai intégré tout ça dans BootLeaf, une template basé sur Leaflet et Bootstrap, afin d’avoir quelque chose de responsive et surtout de plus joli, notamment sur mes info-bulles

image : OBM

Puis, je me suis rendue compte que j’avais pas beaucoup de bars où l’information était fournie …

Un petit tour sur Taginfo m’apprend qu’il n’y a que 15 objets dans OSM sur toute la France avec le tag brewery de renseigné !

Autant dire qu’il y a du travail de contribution à prévoir si je veux que mon site ait vraiment un intérêt.

Du coup, j’en profite pour rajouter un petit formulaire permettant de renseigner directement sur le site les bières dispo, et les autres infos pertinentes (pour l’instant, j’ai retenu uniquement nom du bar, accès wifi, heures d’ouverture et heures d’happy hours) :

image : OBM

Les informations saisies dans le formulaires partent directement enrichir la base de données OpenStreetMap, ce qui me permet de les re-consommer derrière pour afficher quelles bières sont dispo : un cercle vertueux à consommer sans modération ;)

C'était la partie la plus délicate à réaliser pour moi qui n'était pas familière avec l'API d'édition d'OSM et toute la cinématique nécessaire pour réaliser des modifications ... D'ailleurs, la gestion des conflits a été soigneusement éludée pour le moment...

Bon, j’ai finalement temporairement retiré les heures (opening_hours et happy_hours) car je pense qu’un simple champ texte n’est pas très adapté pour enrichir ce type de donnée : j’oublie moi-même tout le temps le format de ce tag et je n’ai pas très envie d’implémenter une vérification du format dans le formulaire, donc ce n’est pas optimal … affaire à suivre.

Maintenant, y a plus qu’à !

Je compte sur vous pour participer et ajouter les bières servies dans vos débits de boisson favoris.

Et sinon, c’est tout open-source, et toute contribution est la bienvenue !

Par exemple, si une âme charitable avec des compétences en graphisme pouvait me fournir des images (en SVG et libre de droit) des verres à bières, ça serait merveilleux. J’ai essayé de dessiné le verre de la Kwak … mais j’ai renoncé !

EDIT : c'est chose faite, tout juste 4 mois après le lancement du projet : Affligem, Carmélite Triple, Chouffe, Guinness et même Kwak ont leurs icônes intégrées dans OpenBeerMap 

image : kwak

Et l'ergonomie pourrait être améliorée sur le choix des bières (aussi bien sur l'affichage que la contribution) j'imagine.