let utils,parserConfig,uuidv4,htmlEscape,Parser,Client;_6c2‍.w("./utils.ts",[["default",["utils"],function(v){utils=v}]]);_6c2‍.w("./config.ts",[["default",["parserConfig"],function(v){parserConfig=v}]]);_6c2‍.w("uuid",[["v4",["uuidv4"],function(v){uuidv4=v}]]);_6c2‍.w("escape-goat",[["htmlEscape",["htmlEscape"],function(v){htmlEscape=v}]]);_6c2‍.w("rss-parser",[["default",["Parser"],function(v){Parser=v}]]);_6c2‍.w("pg",[["Client",["Client"],function(v){Client=v}]]);// @author tykayn contact@cipherbliss.com www.cipherbliss.com // imports let parser = new Parser(); // @ts-ignore _6c2‍.g.console.log(' ==============================================='.blue); // @ts-ignore _6c2‍.g.console.log(' ==== Rss Feeder for mobilizon - by tykayn ===='.blue); // @ts-ignore _6c2‍.g.console.log(' ==============================================='.blue); if (parserConfig.debug) { // @ts-ignore _6c2‍.g.console.log('configMobilizon'.blue, config); } let localMobilizonEventsByTitle = []; // trouver si un évènement existe déjà par son titre // TODO à affiner au delà du titre const doesThisEventAlreadyExistInLocalEvents = (rssEvent) => { const eventAlreadyExists = -1 !== localMobilizonEventsByTitle.indexOf(rssEvent.title); if (!eventAlreadyExists) { if (parserConfig.debug) { _6c2‍.g.console.log('ajouter l event ', htmlEscape(rssEvent.title)); } addEventQuery(rssEvent); } }; let createEventQueries = ''; let counterOfEventsToAdd = 0; const addEventQuery = (rssEvent) => { if (!createEventQueries) { createEventQueries = 'INSERT INTO events(title, description, organizer_actor_id,inserted_at,updated_at, uuid, url, status, category, options,participants_stats, begins_on, ends_on) VALUES '; } if (counterOfEventsToAdd) { createEventQueries += ` , `; } let title = '\'' + htmlEscape(rssEvent.title) + '\''; let content = '\'' + htmlEscape(rssEvent.content) + '\''; let uuid = uuidv4(); let uuidString = '\'' + uuid + '\''; let eventUrl = '\'' + parserConfig.mobilizon_public_url + '/events/' + uuid + '\''; let begins_on = '\'' + uuid + '\''; let ends_on = '\'' + utils.convertRssDate(rssEvent.date) + '\''; let baseOptions = '{"offers": [], "program": null, "attendees": [], "show_end_time": true, "show_start_time": true, "comment_moderation": "allow_all", "anonymous_participation": true, "participation_condition": [], "show_participation_price": false, "maximum_attendee_capacity": 0, "remaining_attendee_capacity": 0, "hide_organizer_when_group_event": false, "show_remaining_attendee_capacity": false}'; let baseStats = '{"creator": 1, "rejected": 0, "moderator": 0, "participant": 0, "not_approved": 0, "administrator": 0, "not_confirmed": 0}'; // TODO complete with date conversion // begins_on , ends_on expecting date format like this: "2020-12-17 23:00:00" createEventQueries += `( ${title}, ${content}, ${parserConfig.feeder_mobilizon_user_id}, 'now()','now()', ${uuidString}, ${eventUrl}, 'confirmed' , 'meeting', ${baseOptions}, ${baseStats} )`; counterOfEventsToAdd++; }; const runCreationQuery = async () => { createEventQueries = createEventQueries + ';'; if (createEventQueries) { console.log(' '); console.log(' ⚙️⚙️⚙️ '); console.log(' '); console.log(' createEventQueries'); _6c2‍.g.console.log(createEventQueries); const res = await client.query(createEventQueries); _6c2‍.g.console.log('res', res); return res; } }; const client = new Client({ host : 'localhost', user : parserConfig.db_user, password: parserConfig.db_pass, database: parserConfig.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'); _6c2‍.g.console.log('💾 évènements enregistrés dans mobilizon : ', res.rows.length); // Hello world! res.rows.forEach((item) => { localMobilizonEventsByTitle.push(item.title); _6c2‍.g.console.log(' 🟢 ', item.begins_on, item.ends_on, item.title, item.url); }); if (parserConfig.askAgendaDuLibre) { // @ts-ignore _6c2‍.g.console.log(' ===================================================='.blue); // @ts-ignore _6c2‍.g.console.log(' ==== demander à l\'agenda du libre son flux RSS ===='.blue); // @ts-ignore _6c2‍.g.console.log(' ===================================================='.blue); _6c2‍.g.console.log('⌛ lecture du flux rss : ' + parserConfig.rss_feed_url); let feed = await parser.parseURL(parserConfig.rss_feed_url); console.log('✅ flux rss obtenu'); _6c2‍.g.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) => { _6c2‍.g.console.log(rssEvent.title); // console.log('item', item) doesThisEventAlreadyExistInLocalEvents(rssEvent); }); } if (parserConfig.askOsmCal) { // @ts-ignore _6c2‍.g.console.log(' ===================================================='.blue); // @ts-ignore _6c2‍.g.console.log(' ==== demander à l\'agenda du libre son flux RSS ===='.blue); // @ts-ignore _6c2‍.g.console.log(' ===================================================='.blue); } if (parserConfig.runAddQueriesToMobilizon) { // @ts-ignore _6c2‍.g.console.log('➕ rajouter les évènements manquants à la base mobilizon'.blue); await runCreationQuery(); // @ts-ignore _6c2‍.g.console.log(' ---------- '.green); // @ts-ignore _6c2‍.g.console.log(counterOfEventsToAdd, ' évènements ajoutés '.green); // @ts-ignore _6c2‍.g.console.log(' ---------- '.green); // @ts-ignore _6c2‍.g.console.log('✅ ça c\'est fait '.green); } await client.end(); })(); exports = () => { _6c2‍.g.console.log('hey ho', this); };