// https://www.mediawiki.org/wiki/Manual:Random_page import fetch from "node-fetch" import rp from "request-promise"; import $ from "cheerio"; import fs from "fs"; import path from 'path'; import {getRandomElementOfArray, randomIntFromInterval} from "./utils.js"; const __dirname = path.resolve(); function getRandomWikiOSMPage() { // get all FR tags // const url = "https://wiki.openstreetmap.org/w/index.php?title=Special:Categories&offset=FR&limit=500" const url = "https://wiki.openstreetmap.org/wiki/Special:AllPages?from=&to=&namespace=202&limit=500" // get a random page wich is not a discussion // const url = "https://wiki.openstreetmap.org/wiki/Special:Random?namespace=all-discussions%3B1%3B2%3B3%3B5%3B7%3B9%3B11%3B120%3B121%3B122%3B123%3B201%3B203&invert=1&limit=10&days=1&enhanced=1&namespace__202_color=c1&urlversion=2" rp(url) .then(function (html) { //success! const wikiUrls = []; const filteredHtml = $('.mw-spcontent ul li a', html) console.log("filteredHtml.length", filteredHtml.length) // .filter(elem => { // return (elem.attribs.title.indexOf('description for') === -1) // }) for (let i = 0; i < filteredHtml.length; i++) { // const contentCurated = filteredHtml[i] const contentCurated = filteredHtml[i].attribs.href wikiUrls.push(contentCurated); } console.log(wikiUrls); return wikiUrls; }) .catch(function (err) { //handle error console.error(err) }); } export default function getElementCartographique() { const url = "https://wiki.openstreetmap.org/wiki/FR:%C3%89l%C3%A9ments_cartographiques" const titleLink = "#toc a" const listElementSelector = "#toc a" // prendre un lien dans la table des matières de la page, extraire l'id du lien. // prendre une ligne de tableau au hasard correspondant à l'ID de la section const titleSelector = "" return fs.readFile(__dirname + '/assets/documents/elements_carto_osm.html', 'utf8', function (err, html) { if (err) { return console.log(err); } // console.log(data); //success! const wikiUrls = []; const listOfLinks = $(titleLink, html) console.log("filteredHtml.length", listOfLinks.length) const selectedTocLink = getRandomElementOfArray(listOfLinks).attribs.href; console.log("selectedTocLink", selectedTocLink) const listOfTableRows = $('.wikitable', html); let keys = Object.keys(listOfTableRows); let randNumber = randomIntFromInterval(1, keys.length) // let randNumber = 3 console.log("rand", randNumber) const foundLine = $(listOfTableRows[randNumber]).find('tr'); // console.log("randomTable",foundTable) // on regarde les lignes du tableau keys = Object.keys(foundLine); randNumber = randomIntFromInterval(0, keys.length) console.log("lignes de tableau", keys.length) console.log("ligne sélectionnée", randNumber) let cells = $(foundLine[randNumber]).find('td') keys = Object.keys(cells); console.log("cellules trouvées", keys.length) let result = { key: '', value: '', description: '' } cells.each((i, element) => { console.log("cell element", i, $(element).text().trim()) if (i === 0) { result.key = $(element).text().trim(); } if (i === 1) { result.value = $(element).text().trim(); } if (i === 3) { result.description = $(element).text().trim(); } // let cell = $(element).find("td"); // console.log($(cell[0])); }) // const tableRow = foundTable[randNumber] // get one of all tables but the TOC // console.log("keys", keys) // console.log("foundTable[0]", foundTable[0].text()) // console.log("foundTable.attribs", foundTable.attribs) // console.log("tableRow", $( 'td' ,foundTable).text()) // console.log("tableRow",tableRow.data) // const tableCells = $('td', tableRow) // console.log("tableRow.length", tableCells.length) // console.log("tag key value", cells[1].text()) // console.log("Description", cells[3]) // // console.log("icone", tableCells[4]) // console.log("photo", cells[5].find('img')?.attribs.href) result.link = `https://wiki.openstreetmap.org/wiki/FR:Tag:${result.key}=${result.value}` console.log("result", result) // aller chercher le lien // image de description: let imgSelector = ".description a.image img" const message = makePostMessageFromObj(result) console.log("message", message) return result; }); } function makePostMessageFromObj(result) { return ` # [Le tag OSM du jour : ${result.key}=${result.value}](${result.link}) > ${result.description.trim()} #osm #openstreetmap #wiki #rtfw ` } function getQuery() { // var url = "https://wiki.openstreetmap.org/w/api.php"; var url = "https://fr.wikipedia.org/w/api.php"; var params = { action: "query", format: "json", list: "random", enhanced: "1", hiderobot: "1", urlversion: "2", invert: "1", rnnamespace: "all-discussions%3B1%3B2%3B3%3B5%3B7%3B9%3B11%3B120%3B121%3B122%3B123%3B201%3B203", // WIKI et FR: lang: "FR", rnlimit: "5" }; url = url + "?&origin=*"; Object.keys(params).forEach(function (key) { url += "&" + key + "=" + params[key]; }); return fetch(url) .then(function (response) { return response.json(); }) .then(function (response) { const randoms = response.query.random; for (let ii = 0; ii < randoms.length; ii++) { // console.log(randoms[ii].title); console.log("randoms[ii]", randoms[ii]) } }) .catch(function (error) { console.log(error); }); } // run const res = getElementCartographique() console.log("res", res)