• 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.
  • 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
                  • L Offline
                    lolo
                    last edited by Jan 24, 2021, 6:43 PM

                    Now create MMM-Dnevni_citat.js
                    Inside you need first to registar module

                    Module.register("MMM-Dnevni_citat", {
                    	defaults: {
                    		updateInterval:  10 x  60 x 1000,       //  minute ,seconds ,milliseconds
                    		//retryDelay: 5000          // not needed for now
                    	},
                    

                    Then first function will be start function

                       start: function () {
                            Log.info("Starting module: " + this.name);
                            requiresVersion: "2.1.0";
                            this.loaded = false;
                            this.scheduleUpdate();
                    
                        },
                    

                    with first function we are calling second ( scheduleUpdate) , how often will fetch data.

                       scheduleUpdate: function () {
                            setInterval(() => {
                                this.getData();
                            }, this.config.updateInterval);
                            this.getData();
                        },
                    

                    Then we are calling getData function. Sending socketNotification to node_helper.

                    getData: function () {
                            this.sendSocketNotification(''GET_TEXT_DATA'', this.config);
                        },
                    

                    Whe node_helper send back, next function will check if data is received and update DOM

                    socketNotificationReceived: function (notification, payload) {
                           if (notification === "TEXT_RESULT") {
                               this.textDataRecived = payload;
                               this.loaded = true;
                          },this.updateDom();
                    

                    Now only is left to create DOM

                        getDom: function () {
                            var wrapper = document.createElement("div");
                    
                            if (!this.loaded) {
                                wrapper.innerHTML = "LOADING";
                                return wrapper;
                            }
                            if (this.loaded) {
                           // here to add elements and styling
                               return wrapper;
                           }
                        },
                    
                    A 1 Reply Last reply Jan 24, 2021, 7:19 PM Reply Quote 0
                    • A Offline
                      Amoniak @lolo
                      last edited by Jan 24, 2021, 7:19 PM

                      @lolo
                      i did that. it is still not displayed
                      i added this configuration in the config.js file:

                      {
                      module: “MMM-Dnevni_citat”,
                      position: “middle_center”

                      L 1 Reply Last reply Jan 25, 2021, 11:25 AM Reply Quote 0
                      • 1
                      • 2
                      • 3
                      • 4
                      • 3 / 4
                      3 / 4
                      • First post
                        21/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