rss-feeder-mobilizon/README.md

5.5 KiB

Event feeder de Mobilizon

Script nodejs permettant de lire un flux RSS présentant des évènements et de les ajouter à une base de données postgresql d'une instance mobilizon.

Veillez à bien configurer les accès postgres dans la config du script.

Installation

Configurez les informations de connexion dans le fichier config.ts

Ce projet utilise nodejs version 16+ et typescript, pour le faire fonctionner, installer les node modules avec:

npm i

Pour comparer les évènements à ajouter et ceux déjà enregistrés, on se connecte à la BDD postgresql de l'installation mobilizon.

ajouter un cronjob qui exécute régulièrement (une fois par jour)

ts-node importers/adl.ts

Sources d'import

Actuellement ce script permet d'importer depuis les sites web suivants:

L'OSM Calendar

  • En cours de réalisation

l'agenda du libre

Prototype fonctionnel, manque les imports de coordonnées géographique ainsi que les url de site web correspondant à l'évènement. Pour s'en servir il faut d'abord récupérer un fichier json qui sera ensuite lu et importé, un par un, toutes les secondes.

Récupération des évènemnts en JSON: ts-node scrapers/ccpl.js


source: - un flux rss de l'agenda du libre, filtré sur les évènements ayant le tag "openstreetmap".

https://www.agendadulibre.org/events.rss?tag=openstreetmap
  • un json de l'API en json

https://www.agendadulibre.org/events.json

qui peut être personnalisé avec des query parameters

https://www.agendadulibre.org/events.json?city=&near%5Blocation%5D=&near%5Bdistance%5D=&region=&tag=openstreetmap


  
---


# Example de requête

Les examples sont mis dans le dossier mocks

- creation

entêtes: { "POST": { "scheme": "http", "host": "localhost:4000", "filename": "/api", "remote": { "Adresse": "127.0.0.1:4000" } } } { "En-têtes de la requête (2,286 Ko)": { "headers": [ { "name": "Accept", "value": "/" }, { "name": "Accept-Encoding", "value": "gzip, deflate" }, { "name": "Accept-Language", "value": "fr,en-US;q=0.7,en;q=0.3" }, { "name": "authorization", "value": "Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJtb2JpbGl6b24iLCJleHAiOjE2NDE4MDg1ODIsImlhdCI6MTY0MTgwNzY4MiwiaXNzIjoibW9iaWxpem9uIiwianRpIjoiYTk5YzE3OTQtNThjZS00YmFhLWJhMTktMjcwYWJjNzFkMGI4IiwibmJmIjoxNjQxODA3NjgxLCJzdWIiOiJVc2VyOjEiLCJ0eXAiOiJhY2Nlc3MifQ.9w7JaWQo7j-xHrDspWF5HqnlRBw2U0uyUxNfYbSc6NihyRLTrKFZSMAGNnR2lgZYPO8I-SgiK043wSWau1GnNQ" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "4454" }, { "name": "content-type", "value": "application/json" }, { "name": "Cookie", "value": "Phpstorm-bbc0ac47=545e6b0c-6c8b-4445-b724-49644b98bd77; ph_mqkwGT0JNFqO-zX2t0mW6Tec9yooaVu7xCBlXtHnt5Y_posthog=%7B%22distinct_id%22%3A%2217c3271b31913d-00bfbf13648a128-30634644-4b9600-17c3271b31a468%22%2C%22%24device_id%22%3A%2217c3271b31913d-00bfbf13648a128-30634644-4b9600-17c3271b31a468%22%7D; BetterErrors-has-used-console=true; _session_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IklqWTNNV0ZrTVRWaVlXSm1PR1UzWkdKalpqTmlPR0k1WmpZd01qRmhObUU1SWc9PSIsImV4cCI6IjIwMjItMTEtMThUMTc6MzY6MjUuNDY0WiIsInB1ciI6ImNvb2tpZS5fc2Vzc2lvbl9pZCJ9fQ%3D%3D--dede57510dc24f4a60db7864eebd7cc14e4b957a; c1ef4f9f9c63250f85741095ba5caaee=m38cfqt2k3ulmdhvbbtk497hde; f8caea90b77b67b82dd50df996d8d229=drm4t2vb5oqa6nlj0odsmsanse; 5ae7feae4c8f8e8d33845d20924ad9ba=itfhk9eumbgthphqrgrs2gpqi2; BetterErrors-2.9.1-CSRF-Token=18e3c443-00f4-4fe1-a9a0-c65a69915fbb; _mastodon_session=K11iR4Tod4FhspHo1Bxe66Ri%2BYqvWb%2F%2BnoO9WXgbpzsmdLMM%2BV6Vso0AjUz96Tu%2BhzK2Wq8KeZxR4VBKUuFNE8v%2FSdfHX9V0cwhxDU7q%2FwDVEJsgQ8xlKiL3W0v9ab%2BPkI7tLZ7SpsJTfxdLG%2BPonKhR9zApU03Q0ep80%2Fxf6F8JUfqFAsIvBMcko2mHaK%2BU9dGcQtYAFCbijSmEegrzmV0hH57w6dKxrGONmGLNTillxvTL%2BVZagOL7xB93s31jCTIGwtp%2FwVl5GN4LO44f79s3X7kVRh74wKOC8poNyvckfMvERCxj48mnn0Vw8fIj2R341fyOmsYKFoNbeGy3Oh0yFvZxQOBKK05z8%2Bi3O%2BbkFYOYPlGGawrSRQM0cOtqq%2FPV4EZxetKDuKZsTv9og%2FvsmEJwafUekbjL2G%2BsEHf4X9js8bquVaOJH2prOWV8kgBsCH7qnggWk9T5pEjVLvRj36AbsSE627iHz8IdRp646SHKz82uO5SMEgUIsMg7dAJ8fhXIHaMvvisNNwGwkEnzNYWLSLnC3Lpxzn0%3D--cmlZi7NsmOxVoFfx--RyGe8OvwX03BezCSH9bs8g%3D%3D" }, { "name": "Host", "value": "localhost:4000" }, { "name": "Origin", "value": "http://localhost:4000" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Referer", "value": "http://localhost:4000/events/create" }, { "name": "Sec-Fetch-Dest", "value": "empty" }, { "name": "Sec-Fetch-Mode", "value": "cors" }, { "name": "Sec-Fetch-Site", "value": "same-origin" }, { "name": "User-Agent", "value": "Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0" } ] } }

---

# data scraping
Fait avec puppeteer, lancer la commande:
`
ts-node scrapers/ccpl.js
`

Pour l'agenda du libre on récupère un fichier json:

`
ts-node scrapers/adl.js
`
on peut aussi filtrer l'agenda par un certain tag en mettant un argument en plus à la commande
`
ts-node scrapers/adl.js openstreetmap
` 

# data import to mobilizon

Il faut que le serveur mobilizon soit fonctionnel (et lancé, avec  `mix phx.server`  ) et que le script node ait les accès à la base de données postgresql. Voir les paramètres dans [config.ts].
Ensuite on fait fonctionner un importateur, comme celui de l'agenda du libre:


---

author: tykayn