• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

module that displays a certain text from a website, the text on the website is updated daily

Scheduled Pinned Locked Moved Requests
36 Posts 6 Posters 9.9k Views 7 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    Amoniak
    last edited by Jan 20, 2021, 7:56 PM

    well, I’ll get started then. Keep your fingers crossed.

    1 Reply Last reply Reply Quote 0
    • A Offline
      Amoniak
      last edited by Amoniak Jan 20, 2021, 10:34 PM Jan 20, 2021, 10:11 PM

      i installed cheerio, but i don’t know how to use it.
      do I have to put this now in my “MMM-PoemOfTheDay.js” ?
      Bild 20.01.21 um 23.10.jpg

      S 1 Reply Last reply Jan 20, 2021, 10:19 PM Reply Quote 0
      • S Offline
        sdetweil @Amoniak
        last edited by Jan 20, 2021, 10:19 PM

        @Amoniak gotta go read the library usage

        Sam

        How to add modules

        learning how to use browser developers window for css changes

        1 Reply Last reply Reply Quote 0
        • L Offline
          lolo
          last edited by Jan 20, 2021, 11:01 PM

          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.

          1 Reply Last reply Reply Quote 0
          • A Offline
            Amoniak
            last edited by Jan 21, 2021, 4:12 PM

            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;
            
            };
            
            1 Reply Last reply Reply Quote 0
            • A Offline
              ashishtank Module Developer
              last edited by Jan 21, 2021, 4:35 PM

              @Amoniak there are lots of missing pieces… add console.log with some message in each function and see how the flow works.

              1 Reply Last reply Reply Quote 0
              • L Offline
                lolo
                last edited by Jan 21, 2021, 8:21 PM

                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);
                            
                      
                    });   
                
                A 1 Reply Last reply Jan 24, 2021, 5:19 PM Reply Quote 0
                • F Offline
                  fordi
                  last edited by Jan 24, 2021, 7:35 AM

                  I bet you could use the same technique to see if any playstation 5 are in stock on websites?

                  1 Reply Last reply Reply Quote 0
                  • A Offline
                    Amoniak @lolo
                    last edited by Jan 24, 2021, 5:19 PM

                    @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?

                    1 Reply Last reply Reply Quote 0
                    • L Offline
                      lolo
                      last edited by Jan 24, 2021, 6:10 PM

                      This should be your node_helper.

                      const NodeHelper = require("node_helper");
                      const cheerio = require("cheerio");
                      const request = require('request');
                      
                      module.exports = NodeHelper.create({
                      
                          start: function () {
                              self = this;
                              console.log("Starting node_helper for: " + this.name);
                          },
                      
                          getData: function () {
                              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);
                                  
                      			self.sendSocketNotification('TEXT_RESULT', recivedData);
                              });
                          },
                      
                          socketNotificationReceived: function (notification, payload) {
                      
                              if (notification === 'GET_TEXT_DATA') {
                                  self.getData();
                              }
                          },
                      });
                      
                      
                      1 Reply Last reply Reply Quote 1
                      • 1
                      • 2
                      • 3
                      • 4
                      • 2 / 4
                      2 / 4
                      • First post
                        19/36
                        Last post
                      Enjoying MagicMirror? Please consider a donation!
                      MagicMirror created by Michael Teeuw.
                      Forum managed by Sam, technical setup by Karsten.
                      This forum is using NodeBB as its core | Contributors
                      Contact | Privacy Policy