• 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.

Problems with rss

Scheduled Pinned Locked Moved Development
4 Posts 2 Posters 1.9k Views 2 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.
  • R Offline
    retroflex Project Sponsor Module Developer
    last edited by retroflex Nov 22, 2017, 12:13 PM Nov 22, 2017, 12:11 PM

    This is my first attempt at a module using a node_helper.js. My goal is to get an rss and output all rss items on the mirror. I have got the basics working, which is a function in node_helper.js which sends items over to the module js file:

    loadFeed: function(url) {
        var items = [];
        items.push( { title: 'test title', description: 'test description' } );
        
        this.sendSocketNotification('ITEMS', {
          items: items
        });
    },
    

    Output:
    0_1511351554749_087d9f1a-6667-4f48-9602-44b9843419db-image.png

    But when I try to read and parse an rss, I get nothing… Code:

    const FeedMe = require('feedme');
    const http = require('http');
    
    ...
    
    loadFeed: function(url) {
        var items = [];
        
        items.push( { title: 'before', description: 'before' } );
           
        http.get('http://www.npr.org/rss/rss.php?id=1001', (res) => {
          var parser = new FeedMe();
          parser.on('title', (title) => {
            items.push( { title: 'feedtitle', description: 'feedtitle' } );
          });
          parser.on('item', (item) => {
            items.push( { title: 'feeditem', description: 'feeditem' } );
          });
          res.pipe(parser);
        });
    
        items.push( { title: 'after', description: 'after' } );
        
        this.sendSocketNotification('ITEMS', {
          items: items
        });
    },
    
    

    Output:
    0_1511351947298_0176f83f-2af5-45ed-8d09-bb4781d79036-image.png

    “ls node_modules” show that both feedme and http is installed. No relevant errors in .pm2/logs/mm-error-0.log or mm-out-0.log.

    So I tried with another rss parser:

    const parser = require('rss-parser');
    
    ...
    
    loadFeed: function(url) {
        var items = [];
        
        items.push( { title: 'before', description: 'before' } );
           
        parser.parseURL('http://www.npr.org/rss/rss.php?id=1001', function(err, parsed) {
          parsed.feed.entries.forEach(function(entry) {
            items.push( { title: 'entrytitle', description: entry.title } );
          });
        });
    
        items.push( { title: 'after', description: 'after' } );
        
        this.sendSocketNotification('ITEMS', {
          items: items
        });
    },
    

    Same output as above. No log errors. And rss-parser is installed in node_modules. Also this last code works fine in npm RunKit:
    https://runkit.com/embed/q4ucjhbbzpw3

    Any ideas what is failing? Or how to debug?

    ? 1 Reply Last reply Nov 22, 2017, 12:20 PM Reply Quote 0
    • ? Offline
      A Former User @retroflex
      last edited by A Former User Nov 22, 2017, 2:09 PM Nov 22, 2017, 12:20 PM

      @retroflex I didn’t look inside deeply, but I think it might be caused by asynchronous problem.
      I suspect sendNotification is performed before parsing rss(item.push)
      Test it with console.log() before sendNotification and item pushing.

      R 1 Reply Last reply Nov 23, 2017, 8:49 AM Reply Quote 2
      • R Offline
        retroflex Project Sponsor Module Developer @Guest
        last edited by Nov 23, 2017, 8:49 AM

        @Sean Thanks! Logging shows your suspicions were correct:

        MYMODULE Thu Nov 23 2017 09:43:15 GMT+0100 (CET): start of method
        MYMODULE Thu Nov 23 2017 09:43:15 GMT+0100 (CET): end of method
        MYMODULE Thu Nov 23 2017 09:43:16 GMT+0100 (CET): parsed an rss entry
        MYMODULE Thu Nov 23 2017 09:43:16 GMT+0100 (CET): parsed an rss entry
        MYMODULE Thu Nov 23 2017 09:43:16 GMT+0100 (CET): parsed an rss entry
        ...
        

        Now I will try to find out if the rss parsers have a finished callback and put the sendSocketNotifications in there…

        R 1 Reply Last reply Nov 23, 2017, 1:01 PM Reply Quote 0
        • R Offline
          retroflex Project Sponsor Module Developer @retroflex
          last edited by Nov 23, 2017, 1:01 PM

          To follow up… I got it to work by comparing parsed.feed.entries.length to the number of parsed entries, and when all entries were passed I called a callback that sent the notifications.

          I’m new to javascript so there’s still a lot to learn.

          1 Reply Last reply Reply Quote 0
          • 1 / 1
          1 / 1
          • First post
            1/4
            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