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 10.2k 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

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

      1 Reply Last reply Reply Quote 0
      • A Offline
        Amoniak
        last edited by Amoniak

        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 Reply Quote 0
        • S Offline
          sdetweil @Amoniak
          last edited by

          @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

            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

              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

                @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

                  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 Reply Quote 0
                  • F Offline
                    fordi
                    last edited by

                    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

                      @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

                        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
                        • First post
                          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