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-devEnfin, suivez les instructions pour installer uv ici et créez un environnement Python:
uv venv .venv --python 3.13Activez l'environnement:
source .venv/bin/activateInstallez le scraper avec:
uv syncVé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 startThe 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.jsonThis 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_futurebefore inserting them again, so that they are updated. Settingmost_recent=True. - The
most_recentattribute of events inevents_scrapedare set toTrueif the following conditions are met:- A query identifies rows in the
events_scrapedtable that do not have a corresponding entry in theevents_futuretable. - For these rows, it finds the most recent
scrape_datefor eachidandworkshop_type. - It then updates the
most_recentcolumn toTRUEfor these rows, but only if thestart_dateof the event is in the past.
- A query identifies rows in the
cd tests
python scrape_tests.pyPour 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.