Le scraper de 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.
Flox est un gestionnaire de paquets multiplateforme qui vise à permettre la reproducibilité, la robustesse, la portabilité et la stabilité des systÚmes d'information. Cette approche permet d'installer les paquets Python et dépendances systÚme en une seule fois.
Suivez les instructions pour installer Flox sur votre systĂšme ici. Tout est prĂȘt ! Utilisez la commande flox activate
dans ce dossier pour commencer à développer.
Vérifiez que tout fonctionne:
python -c "import trouver_une_fresque_scraper as m; print(m.__file__)"
Cette méthode d'installation n'est pas recommandée. Préférez l'utilisation de Flox, 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 install firefox-esr libpq-dev python3-dev
Enfin, suivez les instructions pour installer uv
ici et créez un environnement Python:
uv venv .venv --python 3.13
Activez l'environnement:
source .venv/bin/activate
Installez le scraper avec:
uv sync
Vérifiez que tout fonctionne:
python -c "import trouver_une_fresque_scraper as m; print(m.__file__)"
Avant de contribuer au projet, assurez-vous d'avoir lu le document CONTRIBUTING.md.
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 Flox (= manuelle avec uv
uniquement) uniquement.
python -m trouver_une_fresque_scraper.scrape
# or
python -m trouver_une_fresque_scraper.scrape --headless --country ch --skip-dirty-check
à 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
cd tests
python scrape_tests.py
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.