/** * Envoi d'une page du wiki au hasard parmi les pages en Français répertoriées dans le json all_wiki_osm.json * Cette liste d'environ 3000 pages du wiki contient toutes les pages francophones, pas seulement les tags. * Utiliser l'argument --force pour réellement envoyer le post avec le compte Curator. * nécessite d'avoir le fichier .env rempli. */ import fs from 'fs'; import path, { dirname } from 'path'; import axios from 'axios'; import { fileURLToPath } from 'url'; import { getSourceOfDescriptorPageContent } from "./osm_get_description_picture.mjs"; import sendPostMastodon, { downloadImage, randomIntFromInterval } from "./libs/utils.mjs"; const __dirname = dirname(fileURLToPath(import.meta.url)); // Charger le fichier JSON const wikiArticles = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'assets', 'documents', 'all_wiki_osm.json'), 'utf8')); // Sélectionner un article au hasard const randomIndex = Math.floor(Math.random() * wikiArticles['elements'].length); console.log('wikiArticles[\'elements\']', wikiArticles['elements'].length) const selectedArticle = wikiArticles['elements'][randomIndex]; console.log('selectedArticle', selectedArticle) // Récupérer le titre et la description de l'article const title = selectedArticle.title; const pageId = selectedArticle.pageid; // Récupérer le contenu de l'article via l'API de MediaWiki const wikiApiUrl = `https://wiki.openstreetmap.org/w/api.php`; const params = { action: 'parse', pageid: pageId, format: 'json', prop: 'text', section: 0 }; const remplacedTitle = title.replace(/ /g, '_'); console.log('url de l article: ', `https://wiki.openstreetmap.org/wiki/` + title) let message = '' let no_picture_found = true; let url_image = '' export function sendMessageWikiOSMOfTheDay(message, url_image) { console.log('envoi du message ............') let configPost = { author: 'curator', image: `${process.cwd()}/assets/blog_posts_medias/assets/osm_post_${randomIntFromInterval(1, 5)}.jpg`, message, } let filePathImage = `${process.cwd()}/assets/blog_posts_medias/osm_wiki_description_page.jpg` if (url_image) { no_picture_found = false; console.log("firstPictureSource found", url_image) let extension = 'png'; if (url_image.indexOf('.jpg') !== -1) { let extension = 'jpg'; } // check if picture already exist console.log('on récupère l image de description : ', filePathImage) let saved_picture = 'post_picture.' + extension downloadImage(url_image, saved_picture) .then((res) => { // suite du poste avec upload d'image console.log('dl image response:', res) console.log('média téléchargé, on envoie le post') configPost.image = res; sendPostMastodon(configPost) }, (err) => { console.log('pas dimage trouvée pour l URL ', url_image, err) sendPostMastodon(configPost) } ) .catch((err) => { console.log('erreur avec cette URL ', url_image, err) sendPostMastodon(configPost) }) } else { console.log('::::::::::::: no image description') filePathImage = `${process.cwd()}/assets/blog_posts_medias/osm_wiki_description_page.jpg` console.log('configPost.image', configPost.image) sendPostMastodon(configPost) } } axios.get(wikiApiUrl, { params }) .then(response => { // console.log('wikiApiUrl', wikiApiUrl) let keys = Object.keys(response.data) // console.log('keys', keys) const articleContent = response.data.parse.text['*']; let resultpicture = getSourceOfDescriptorPageContent(articleContent) console.log(':::::::::: resultpicture', resultpicture) if (resultpicture === "pas d'image de description dans le HTML") { url_image = `${process.cwd()}/assets/blog_posts_medias/osm_wiki_description_page.jpg` } else { url_image = resultpicture } let firstParagraph; if (articleContent.includes('
')) { firstParagraph = articleContent.split('
')[1]?.split('
')[0]; } else { firstParagraph = articleContent.substring(0, 200); } // Sanitizer le texte const sanitizedText = firstParagraph.replace(/<\/?[^>]+(>|$)/g, ''); const sanitizedTextWithoutEntities = sanitizedText // const sanitizedTextWithoutEntities = sanitizedText.replace(/(\d+);/g, (match, code) => { // return String.fromCharCode(code); // }); // console.log('image', url_image) console.log('-----------------') // Générer le message const formules = [ "La page #OSM du jour", "Aujourd'hui sur le wiki #OSM", "Le wiki #OSM a du talent", "Lisons le fabuleux wiki #OSM", "Ho la belle documentation #OSM", "Le wiki #OSM vous présente" ]; const formule = formules[randomIntFromInterval(0, formules.length - 1)]; let suggestion_add_picture = ''; if (!no_picture_found) { suggestion_add_picture = `Une image d'illustration pour cette page sous licence Creative Commons serait bienvenue, participez au wiki.` } message = `${formule} : ${remplacedTitle}. [https://wiki.openstreetmap.org/wiki/${remplacedTitle}](https://wiki.openstreetmap.org/wiki/${remplacedTitle}) ${sanitizedTextWithoutEntities} ${suggestion_add_picture} #openstreetmap #wiki #RTFW `; console.log(message); sendMessageWikiOSMOfTheDay(message, url_image) }) .catch(error => { console.error(error); });