Trouver une Fresque est un outil open source permettant de détecter les ateliers disponibles dans votre département.
Les données sont extraites des billetteries officielles via la technique du scraping. La validité des adresses est vérifiée en utilisant les données d'OpenStreetMap.
Si vous utilisez ce code, merci de respecter la charte de Nominatim.
Si vous êtes l'organisateur d'un atelier Fresque et que votre évènement n'apparaît pas sur la plateforme Trouver une Fresque, merci de lire le tutoriel à destination des organisateurs de fresques.
Ouvrez une issue Github si vous souhaitez signaler un problème non couvert dans le tutoriel, ou suggérer l'intégration d'un nouvel atelier.
Les ateliers actuellement supportés sont listés sur la feuille de route.
Le scraping est effectué en utilisant Selenium, qui s'appuie sur geckodriver pour afficher les données à récupérer. Notre outil peut être installé sur un Raspberry Pi sans problème.
Nix est un gestionnaire de paquets multiplateforme qui vise à permettre la reproducibilité, la robustesse, la portabilité et la stabilité des systèmes d'information.
### Via https://zero-to-nix.com/start/install (recommandé)
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
### Via https://devenv.sh/getting-started/
## Linux
sh <(curl -L https://nixos.org/nix/install) --daemon
## macOS
sh <(curl -L https://nixos.org/nix/install)
## Windows (WSL2)
sh <(curl -L https://nixos.org/nix/install) --no-daemon
## General
nix-env -iA devenv -f https://github.com/NixOS/nixpkgs/tarball/nixpkgs-unstable
## NixOS
# Add the following to your configuration.nix somewhere
environment.systemPackages = [
pkgs.devenv
];
Tout est prêt ! Utilisez la commande devenv shell
pour commencer à développer.
Cette méthode d'installation n'est pas recommandée. Préférez l'utilisation de Nix, qui vous facilitera la tâche et garantira d'avoir toutes les dépendances nécessaires pour lancer le scraper.
Téléchargez la version la plus récente de geckodriver, puis extrayez le binaire geckodriver
dans un dossier bin/
(ou n'importe où sur votre système).
Les librairies suivantes doivent être installées sur votre système:
apt-get install firefox-esr libpq-dev python3-dev
Enfin, téléchargez les dépendances du scraper :
make install
Renommez le fichier de configuration config.json.dist
en config.json
et renseignez les champs.
{
"webdriver": "",
"host" : "",
"port" : "",
"user" : "",
"psw" : "",
"database": "",
"timezone": "Europe/Paris"
}
Le champ webdriver
est à renseigner avec le chemin vers le binaire geckodriver
dans le cas d'une installation sans Nix (manuelle) uniquement.
python scrape.py
À la fin du scraping, un fichier JSON nommé avec le format events_20230814_153752.json
est créé dans le dossier results/
.
L'option --headless
exécute le scraping en mode headless, et --push-to-db
pousse les résultats du fichier json de sortie dans la base de données en utilisant les identifiants définis dans config.json
.
Nous utilisons Supabase pour persister les données scrapées, une alternative open source à Firebase qui fournit une base de données Postgres gratuitement.
Login to the CLI and start the database. When starting the database, if file supabase/seed.sql
is present, the INSERT
statements will be executed to populate the database with testing data.
supabase login
supabase init
supabase start
The supabase/tables.sql
contains SQL statements allowing to create the required tables.
To push some data into the database, use the following command:
python push_to_db.py --input results/output.json
This command will perform the following actions:
- All events are inserted into the historical table
events_scraped
. Settingmost_recent=False
, but maybe the call toupdate_most_recent()
below will change this. - Delete all events from
events_future
before inserting them again, so that they are updated. Settingmost_recent=True
. - The
most_recent
attribute of events inevents_scraped
are set toTrue
if the following conditions are met:- A query identifies rows in the
events_scraped
table that do not have a corresponding entry in theevents_future
table. - For these rows, it finds the most recent
scrape_date
for eachid
andworkshop_type
. - It then updates the
most_recent
column toTRUE
for these rows, but only if thestart_date
of the event is in the past.
- A query identifies rows in the
Pour proposer une modification, un ajout, ou décrire un bug sur l'outil de détection, vous pouvez ouvrir une issue ou une Pull Request avec vos modifications.
Avant de développer, merci d'installer le hook git en suivant les instructions listées dans le fichier CONTRIBUTING. Pour le code en Python, veillez à respecter le standard PEP8 avant de soumettre une Pull Request. La plupart des IDEs et éditeurs de code modernes proposent des outils permettant de mettre en page votre code en suivant ce standard automatiquement.