rss-feeder-mobilizon/index.ts

105 lines
3.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// @author tykayn contact@cipherbliss.com www.cipherbliss.com
// imports
var fs = require("fs");
let Parser = require("rss-parser");
let parser = new Parser();
const { Client } = require("pg");
// configuration of the parser
const config = {
rss_feed_url: "https://www.agendadulibre.org/events.rss?tag=openstreetmap",
feeder_mobilizon_user_id: "3", // organizer_actor_id pour rattacher les nouveaux évènements à un utilisateur. 3 est le premier admin créé.
mobilizon_public_url: "https://mobilizon.openstreetmap.fr", // url publique de l'instance mobilizon pour créer les url d'évènements
db_name: "mobilizon_dev",
db_user: "mobilizon",
db_pass: "mobilizon",
};
console.log("configMobilizon", config);
let localMobilizonEventsByTitle = [];
// trouver si un évènement existe déjà par son titre
// TODO à affiner au delà du titre
const doesThisEventAlreadyExistInLocalEvents = (rssEvent) => {
console.log("doesThisEventAlreadyExistInLocalEvents", rssEvent.title);
const eventAlreadyExists =
-1 !== localMobilizonEventsByTitle.indexOf(rssEvent.title);
if (!eventAlreadyExists) {
console.log("ajouter l event ", rssEvent.title);
console.log(" ", rssEvent.content);
addEventQuery(rssEvent);
}
};
let createEventQueries = "";
let counterOfEventsToAdd = 0;
const addEventQuery = (rssEvent) => {
if (!createEventQueries) {
createEventQueries =
"INSERT INTO events(title, description, organizer_actor_id) VALUES ";
}
if (counterOfEventsToAdd) {
createEventQueries += ` , `;
}
createEventQueries += `(${rssEvent.title}, ${rssEvent.content}, ${config.feeder_mobilizon_user_id})`;
counterOfEventsToAdd++;
};
const runCreationQuery = async () => {
if (createEventQueries) {
console.log("⚙️ createEventQueries", createEventQueries);
// const res = await client.query(createEventQueries+';');
}
};
const client = new Client({
host: "localhost",
user: config.db_user,
password: config.db_pass,
database: config.db_name,
});
(async () => {
console.log("⌛ interroger la BDD mobilizon postgresql");
await client.connect();
console.log("✅ OK connecté à postgresql");
console.log(" ");
const res = await client.query("SELECT * from events");
console.log("💾 évènements enregistrés dans mobilizon : ", res.rows.length); // Hello world!
res.rows.forEach((item) => {
localMobilizonEventsByTitle.push(item.title);
console.log(" 🟢 ", item.begins_on, item.ends_on, item.title, item.url);
});
console.log("⌛ lecture du flux rss : " + config.rss_feed_url);
let feed = await parser.parseURL(config.rss_feed_url);
console.log("✅ flux rss obtenu");
console.log(feed.title);
console.log("⚙️ interprétation des évènements");
console.log(
"⌛ trouver les évènements qui ne font pas partie de la BDD mobilizon postgresql"
);
feed.items.forEach((rssEvent) => {
console.log(rssEvent.title);
// console.log('item', item)
doesThisEventAlreadyExistInLocalEvents(rssEvent);
});
console.log(" rajouter les évènements manquants à la base mobilizon");
runCreationQuery();
console.log(" ---------- ");
console.log(counterOfEventsToAdd, " évènements ajoutés ");
console.log(" ---------- ");
console.log("✅ ça c'est fait ");
await client.end();
})();