diff --git a/assets/icecream.jpg b/assets/icecream.jpg new file mode 100644 index 0000000..acdc35b Binary files /dev/null and b/assets/icecream.jpg differ diff --git a/assets/osm_default.jpg b/assets/osm_default.jpg new file mode 100644 index 0000000..7f7d22f Binary files /dev/null and b/assets/osm_default.jpg differ diff --git a/assets/osm_tag.xcf b/assets/osm_tag.xcf new file mode 100644 index 0000000..487b6b0 Binary files /dev/null and b/assets/osm_tag.xcf differ diff --git a/helpers/utils.js b/helpers/utils.js index cc65a9c..4734290 100644 --- a/helpers/utils.js +++ b/helpers/utils.js @@ -1,17 +1,20 @@ import Masto from "mastodon"; import dotenv from "dotenv"; +import fs from "node-fs"; + let local_node_env_conf = dotenv.config() + // console.log("conf", local_node_env_conf) export function randomIntFromInterval(min, max) { // min and max included return Math.floor(Math.random() * (max - min + 1) + min) } + export function getRandomElementOfArray(listItems) { return listItems[Math.floor(Math.random() * listItems.length)] } - let nowDate = new Date() export let defaultConfigMasto = { @@ -20,11 +23,17 @@ export let defaultConfigMasto = { language: 'fr', sensitive: false, reallySendPost: false, + image: '', message: "Hey coucou! on est le" + nowDate, scheduled_at: "" } +export function tokenForAuthorIsPresentInDotEnv(author) { + console.log(" process.env['TOKEN_' + author.toUpperCase()]", process.env['TOKEN_' + author.toUpperCase()]) + return process.env['TOKEN_' + author.toUpperCase()]; +} + export function sendPostMastodon(config) { // override defaults with input argument @@ -32,71 +41,100 @@ export function sendPostMastodon(config) { ...defaultConfigMasto, ...config, } - // require('dotenv').config(); - if(! config.reallySendPost){ - console.log(" =========== le message ne sera PAS réellement posté sur le compte @" + config.author + "@"+ process.env.INSTANCE_MASTODON +" =========== ")} - console.log(" ") - if (process.env['TOKEN_' + config.author.toUpperCase()]) { - - let visibility = 'public'; - let language = 'fr'; - let sensitive = false; - - let accessToken = process.env['TOKEN_' + config.author.toUpperCase()] - const masto = new Masto({ - access_token: accessToken, - api_url: process.env.INSTANCE_MASTODON + '/api/v1/', - }); - - let params = { - status: config.message, - visibility, - language, - sensitive - } - if (config.cw) { - params['spoiler_text'] = config.cw - } - if (config.scheduled_at && config.scheduled_at_bool) { - let dateschedule = new Date(config.scheduled_at) - params['scheduled_at'] = dateschedule.toISOString() - } - console.log(config) - - /** - * envoi sans fichier joint - */ - if (!config.fichier) { - - if (config.reallySendPost) { - - masto.post('statuses', params).then(rep => { - // console.log('rep', rep) - console.log("posté, yay!") - }, err => { - console.error(err) - }) - } - } - - /** - * envoi avec fichier, - * on doit d'abord faire un upload du fichier, - * puis relier son id de media au nouveau post. - */ - // if (config.fichier) { - // - // masto.post('statuses', params).then(rep => { - // console.log('rep', rep) - // }, err => { - // console.error(err) - // }) - // res.render('index', {bodyReq: config}) - // } + if (!config.reallySendPost) { + console.log(" =========== le message ne sera PAS réellement posté sur le compte @" + config.author + "@" + process.env.INSTANCE_MASTODON + " =========== ") } else { - console.error('pas de token pour ' + config.author, process.env.TOKEN_curator) + + console.log(" ") + if (process.env.INSTANCE_MASTODON && tokenForAuthorIsPresentInDotEnv(config.author)) { + + let visibility = 'public'; + let language = 'fr'; + let sensitive = false; + + let accessToken = process.env['TOKEN_' + config.author.toUpperCase()] + const masto = new Masto({ + access_token: accessToken, + api_url: process.env.INSTANCE_MASTODON + '/api/v1/', + }); + + let params = { + status: config.message, + visibility, + language, + sensitive + } + if (config.cw) { + params['spoiler_text'] = config.cw + } + if (config.scheduled_at && config.scheduled_at_bool) { + let dateschedule = new Date(config.scheduled_at) + params['scheduled_at'] = dateschedule.toISOString() + } + console.log(config) + + /** + * envoi sans fichier joint + */ + if (!config.image) { + + if (config.reallySendPost) { + + masto.post('statuses', params).then(rep => { + // console.log('rep', rep) + console.log("posté, yay!") + }, err => { + console.error(err) + }) + } + } + + /** + * envoi avec fichier, + * on doit d'abord faire un upload du fichier, + * puis relier son id de media au nouveau post. + */ + if (config.image) { + + var id; + console.log("envoi du média", config.image) + if(config.image === 'osm_default.jpg'){ + id = '108787661095227871'; + params.media_ids = [id] + masto.post('statuses', params).then(rep => { + console.log("posté avec l'image osm_default déjà enregistrée") + // console.log('rep', rep) + }, err => { + + console.error(err) + console.log("erreur T_T") + }) + + }else{ + // upload new media + return masto.post('media', {file: fs.createReadStream('assets/' + config.image)}) + .then(resp => { + id = resp.data.id; + params.media_ids = [id] + masto.post('statuses', params).then(rep => { + console.log('rep', rep) + console.log("posté avec une nouvelle image, WOOT") + }, err => { + console.error(err) + + console.log("erreur T_T") + }) + }) + } + + } + + } else { + console.error(`pas de token pour l'auteur "${config.author}" ou pas d'instance mastodon définie`) + } + } } diff --git a/helpers/wiki_osm.mjs b/helpers/wiki_osm.mjs index 93b5477..80491c3 100644 --- a/helpers/wiki_osm.mjs +++ b/helpers/wiki_osm.mjs @@ -1,4 +1,7 @@ // https://www.mediawiki.org/wiki/Manual:Random_page +/** + * Post de page aléatoire du wiki osm avec le compte curator + */ import fetch from "node-fetch" import rp from "request-promise"; import $ from "cheerio"; @@ -8,13 +11,16 @@ import {randomIntFromInterval, sendPostMastodon} from "./utils.js"; const __dirname = path.resolve(); +// select one line of table to override description const selectionOverrideOfSectionTable = 2; const selectionOverrideOfLineTable = 7; +// select randomly a line // const selectionOverrideOfSectionTable = ''; // const selectionOverrideOfLineTable = ''; const reallySendToot = false; +// const reallySendToot = true; function getRandomWikiOSMPage() { @@ -202,7 +208,7 @@ function checkExistenceOfWebPage(url) { function makePostMessageFromObj(result) { return ` -# [Le tag OSM du jour : ${result.key}=${result.value}](${result.link}) +# 🗺️ [Le tag OSM du jour : ${result.key}=${result.value}](${result.link}) 🏷️ ${result.description.trim()} > ${result.long_desc.trim()} #osm #openstreetmap #wiki #rtfw @@ -259,6 +265,7 @@ const res = getElementCartographique() function sendMessageWikiTagOfTheDay(message) { let configPost = { author: 'curator', + image: 'osm_default.jpg', message, // reallySendPost: true, reallySendPost: reallySendToot,