Read the statement by Michael Teeuw here.
module that displays a certain text from a website, the text on the website is updated daily
-
@ashishtank cheerio lib will parse html to json
-
well, I’ll get started then. Keep your fingers crossed.
-
i installed cheerio, but i don’t know how to use it.
do I have to put this now in my “MMM-PoemOfTheDay.js” ?
-
@Amoniak gotta go read the library usage
-
It gonna be harder than u think as your text is changing daily. Just follow the the pattern.
Every day this is changed( https://wol.jw.org/hr/wol/h/r19/lp-c).
new day new text.
Text is in :
div id=“dailyText”
but if you ignore reference in text as (Mat. 16:24, 25; Ivan 15:20) located in a class it’s gonna be more easier.
And with cheerio u can complete this. -
so, this is what my NodeHelper.js looks like. like i thought, the screen is black.
const axios = require("axios"); const DetectLanguage = require("detectlanguage"); module.exports = NodeHelper.create({ socketNotificationReceived: async function(noti, payload) { if (noti === "START") { if (payload.updateInterval < 120000) { payload.updateInterval = 120000; } const self = this; (async function displayWatchtower () { const poem = await getWatchtower(payload); self.sendSocketNotification("UPDATE", poem); setTimeout(displayPoem, payload.updateInterval); })(); } } }); const cheerio = require("cheerio"); const axios = require("axios").default; const fethHtml = async url => { try { const { data } = await axios.get(url); return data; } catch { console.error(`ERROR: An error occurred while trying to fetch the URL: ${url}`); } }; const extracWatchtower = selector => { const theme = selector .find(".tabContent active") .find("[class='themeScrp'] > [class='b']) .text() .trim(); const text = selector .find(".bodyTxt") .find("[class='section']") .text() .trim(); return { theme, text }; }; const scrapWatchtower = async () => { const watchtowerUrl = "https://wol.jw.org/hr/wol/h/r19/lp-c"; const html = await fethHtml(watchtowerUrl); const selector = cheerio.load(html); const searchResults = selector("body") .find("#dailyText" ); const deals = searchResults.map((idx, el) => { const elementSelector = selector(el); return extractDeal(elementSelector) }) .get(); return Watchtower; };
-
@Amoniak there are lots of missing pieces… add console.log with some message in each function and see how the flow works.
-
Try to do something with this code. It will retrieve data from current day. Modifying that node_helper is not great idea.
const url= 'https://wol.jw.org/hr/wol/h/r19/lp-c'; request({ url: url, method: 'GET' }, (error, response, body) => { if (error) { return console.error(error) }; var $ = cheerio.load(body); //console.log($.html()); const data = $('div[class="tabContent"]').first(); let header = $(data).find('h2').text(); let title = $(data).find('p').first().text(); let text = $(data).find('div.pGroup>p').text(); //console.log(header,title,text); var recivedData={ header, title, text }; //console.log(recivedData); });
-
I bet you could use the same technique to see if any playstation 5 are in stock on websites?
-
@lolo thank you for the code.
I used the “MagicMirror-Module-Template” to create a new file and the associated folder.
this is my js:‘’’
Module.register(“dnevni_citat”, {
defaults: {
updateInterval: 60000,
retryDelay: 5000
},requiresVersion: "2.1.0", // Required version of MagicMirror start: function() { var self = this; var dataRequest = null; var dataNotification = null; //Flag for check if module is loaded this.loaded = false; // Schedule update timer. this.getData(); setInterval(function() { self.updateDom(); }, this.config.updateInterval); }, const url= 'https://wol.jw.org/hr/wol/h/r19/lp-c'; request({ url: url, method: 'GET' }, (error, response, body) => { if (error) { return console.error(error) }; var $ = cheerio.load(body); //console.log($.html()); const data = $('div[class="tabContent"]').first(); let header = $(data).find('h2').text(); let title = $(data).find('p').first().text(); let text = $(data).find('div.pGroup>p').text(); //console.log(header,title,text); var recivedData={ header, title, text }; //console.log(recivedData); } },
‘’’
what am I doing wrong?