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.4k 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 Do not disturb
      sdetweil @ashishtank
      last edited by sdetweil

      @ashishtank cheerio lib will parse html to json

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      1 Reply Last reply Reply Quote 1
      • 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 Do not disturb
            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
                        • 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