Le Kerlandrier est un site affiche. Il a vocation à agréger et mettre à disposition les événements sur le territoire de la CCA (et plus si affinités). Ce dépôt stocke du code utile pour un administrateur du projet. Ce sont essentiellement des aides à la mise à jour du contenu du projet Kerlandrier.
Le Kerlandrier utilise un calendrier Openagenda et son api pour générer son contenu à chaque ouverture de la page.
La mise à disposition des événements se veut numérique et physique. Numérique via la page web statique du Kerlandrier. Physique via un usage Web2Print qui permet d'imprimer le contenu sur un format papier (A5, A4, A4, A0 pour les plus ambitieux).
L'agrégation des événements est l'obstacle principal à la réussite du projet.
.ical
) à partir de son URL > import_ics.js
uid-externe
est mise à jouruid-externe
est trouvé dans Openagenda, on fait une mise à jour (à débattre, on pourrait aussi ne rien faire)uid-externe
)csv/import_csv_template.csv
BeautifulSoup
scraping
csv
location_uid
via location_name
_OpenAgenda oblige à fournir un location_uid
à la création d'un événement (pour les événements dits physiques)._
_Dans le cadre d'un importics (Ga, Fb events) ou d'un import csv, on ne dispose que d'un location_name
_
On expérimente des fonctionnalités pour trouver le lieu dans le base de données OpenAgenda correspondant au nom du lieu trouvé dans la nature.
getOaLocations.js
Récupérer tous les lieux OpenAgenda avec name
et address
Fuzzy search de l'input (ics ou csv) sur les lieux Open Agenda
Si correspondance avec un bon score, prendre le meilleur score
Sinon, créer un nouveau lieu en utilisant le geocoding de l'API OpenAgenda
Si le lieu créé n'est pas en Bretagne, emergency rollback de l'extrême
TODO: Apprivoiser
Fuse.js
, sa configuration (location
,distance
,threshold
,ignoreLocation
... ) et l'interprétation duscore
pour éviter les faux positifs e.g. "Fuse.js fait matcherMédiathèque Tourc'h
avecMédiathèque Tregunc
parce queMédiathèque Tourc'h
n'existe pas dans OpenAgenda"
[TO DO]
validate_locations.js
$ npm i
Demander à une bonne âme un .env
Pour les secrets Open Agenda (API pub & secret keys):
$ node ics/import_ics.js
$ node validation_locations.js
$ node csv/import_csv.js filename.csv
node ics/import_ics.js
Script qui prend l'URL d'un calendrier au format .ics
/.ical
et qui intéragit avec l'utilisateur pour éviter les doublons.
node csv/import_csv.js filename.csv
Script qui prend un fichier csv et crée une événement par ligne du csv.
Pas d'interaction avec l'utilisateur, soit on trouve un uid-externe
identique et on update, soit on crée.
location_uid
) et un horaire (start_date
, end_date
)
A DEFINIR
pour simplifier (puis on modifie dans OpenAgenda pour trouver ou créer le lieu, cf. ici pour les méthodes plus sioux)YYYY-MM-DDTHH:mm:ss+0200
(+0200 pour le fuseau horaire France)title | desc | long_desc | start_date | end_date | location_uid | link | img | keyword | location_name | book_link |
---|---|---|---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Nom principal | (Très) courte description | Longue description | 2024-08-07T19:00:00+0200 | 2024-08-07T20:30:00+0200 | Laisser vide si inconnu | url externe d'info | url image d'illustration | Type d'événement | Lieu format Google Agenda si pas de location uid | Lien d'inscription |
On construit un
uid-externe
(filename
+row_index
) pour éviter les doublons en cas d'update frénétique et incontrôlable (peu probable parce que c'est déjà chiant de le faire une fois).
resources/getOaLocation.js
Fonction qui prend une nom de lieu et qui trouve une correspondance ou crée le lieu si possible.
const { getCorrespondingOaLocation } = require("../resources/getOaLocation")
const main = async () => {
const OaLocation = await getCorrespondingOaLocation("your_location_string")
}
main()
Le projet dit oui à votre assistance si vous :
To do