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.

    Stocks

    Scheduled Pinned Locked Moved Utilities
    36 Posts 15 Posters 33.6k Views 14 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
      alexyak @ZTA0796
      last edited by

      @ZTA0796 Could you show your code?

      Z 1 Reply Last reply Reply Quote 0
      • Z Offline
        ZTA0796 @alexyak
        last edited by

        @alexyak Sure…see below.

        In the node_helper.js:

        getStocks: function (url) {
        var self = this;

          request({ url: url, method: 'GET' }, function (error, response, body) {
              if (!error && response.statusCode == 200) {
                
                  var result = JSON.parse(body);
                  console.log(result.query.results.row);  //prints the JSON as expected to the terminal
                  self.sendSocketNotification('STOCKS_RESULT', result);
              }
          });
        

        },

        //Subclass socketNotificationReceived received.
        socketNotificationReceived: function(notification, payload) {
        if (notification === ‘GET_STOCKS’) {
        this.getStocks(payload);
        }
        }

        });

        in stocks.js:

        getDom: function() {
        
            var wrapper = document.createElement("table");
            wrapper.className = 'normal regular small';
            
            var count = 0;
        
            var _this = this;
        
        	console.log("in the DOM function");
        	console.log("result is " + this);  //prints [object Object]
        	console.log("result is " + _this); //prints [object Object]
        	console.log("result length is " + this.result.length); //prints 0
        
            if (this.result.length > 0){
                this.result.forEach(function(stock) {
        			//since length=0, it never gets in this loop
                                   //
        			//
        },
        
        scheduleUpdate: function(delay) {
        	console.log("scheduled update check");
        	var nextLoad = this.config.updateInterval;
        	if (typeof delay !== "undefined" && delay >= 0) {
        		nextLoad = delay;
        	}
        
        	var self = this;
        	setInterval(function() {
        		self.getStocks();
        	}, nextLoad);
        },
        
        roundValue: function(value) {
           return Math.round(value*100)/100; 
        },
        
        getStocks: function () {
            var url = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20csv%20where%20url%3D%27http%3A%2F%2Fdownload.finance.yahoo.com%2Fd%2Fquotes.csv%3Fs%3D' + this.config.stocks + '%26f%3Dsl1d1t1c1ohgv%26e%3D.csv%27%20and%20columns%3D%27symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Ccol2%27&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys';
            this.sendSocketNotification('GET_STOCKS', url);
        },
        
        
        socketNotificationReceived: function(notification, payload) {
            if (notification === "STOCKS_RESULT") {
        		console.log("notification received");
        		console.log(payload);  //prints Object { query: Object }
                this.result = payload;
                this.updateDom(self.config.fadeSpeed);
            }    
        },
        
        1 Reply Last reply Reply Quote 0
        • Z Offline
          ZTA0796
          last edited by

          Upon looking at it further-- in the “socketNotificationReceived: function(notification, payload)” function in the module.js file, it seems that when I run console.log(this.result), it outputs my JSON:

          Object { symbol: “MSFT”, price: “62.30”, date: “12/16/2016”, time: “4:00pm”, change: “-0.28”, col1: “62.95”, high: “62.95”, low: “62.12”, col2: “42453083” }

          When I go to the “getDom” function and run “console.log(this.result)”, I get:

          [object Object]

          I’m just not sure why that change occurs, but that seems to be my issue. Any help is massively appreciated!

          A 1 Reply Last reply Reply Quote 0
          • A Offline
            alexyak @ZTA0796
            last edited by

            @ZTA0796 The object that you get int the stocks.js is the deserialized javascript object. In your case it’s going to be a single row object. You could just access the properties list this:

            this.result.symbol, this.result.price, etc…

            -Alex

            Z 1 Reply Last reply Reply Quote 0
            • Z Offline
              ZTA0796 @alexyak
              last edited by

              @alexyak So that’s what I expected as well. Unfortunately, it is somehow getting messed up between the “socketNotificationReceived” function and the “getDom” function.

              socketNotificationReceived: function(notification, payload) {
                  if (notification === "STOCKS_RESULT") {
                      this.result = payload;
                      console.log(this.result);  //prints my JSON correctly console
                      this.updateDom(self.config.fadeSpeed);
                  }       
              

              So the above works correctly. Below, however, it doesn’t seem to maintain and I can’t figure out why.

              getDom: function() {
              
                  var wrapper = document.createElement("table");
                  wrapper.className = 'normal regular small';
                  
                  var count = 0;
              
                  var _this = this;
              
              	console.log("result is " + this.result); //prints "result is [object Object]"
              	console.log("result length is " + this.result.length); //prints "result length is 0"
              	console.log(this.symbol);  //prints "undefined"
                  }
              

              I apologize if I’m being thick, but I can’t figure out why it’s not working…

              1 Reply Last reply Reply Quote 0
              • Z Offline
                ZTA0796
                last edited by

                Ok, so I think i figured it out. Still not sure why it worked, but for some reason, running a console.log("descriptive text " + this) seems to corrupt or change the type of “this”. If I put two consecutive console.log() calls–first with descriptive text, second with just “this”–then it works. Basically in the example above, if I just comment out the first two console.log() calls, then it no longer prints “undefined” and instead prints “MSFT”. Sorry for all the trouble!

                1 Reply Last reply Reply Quote 0
                • Mitch1138M Offline
                  Mitch1138
                  last edited by

                  Several weeks ago this module seemed to stop working. It doesn’t generate any errors, just won’t display. Has anyone else seen this?

                  Thanks, Dave

                  pugslyP Mykle1M 2 Replies Last reply Reply Quote 0
                  • pugslyP Offline
                    pugsly @Mitch1138
                    last edited by

                    @Mitch1138 Yes same for me, this module no longer works.

                    1 Reply Last reply Reply Quote 0
                    • Mykle1M Offline
                      Mykle1 Project Sponsor Module Developer @Mitch1138
                      last edited by

                      @Mitch1138 said in Stocks: > Has anyone else seen this?

                      @pugsly > Yes same for me, this module no longer works.

                      At first glance, putting the url into a browser results in a 404 error
                      http://finance.google.com/finance/info?client=ig&q=.DJI,MSFT,AAPL,GOOG,INTC,CICS,TSLA,FB

                      Create a working config
                      How to add modules

                      homebrewH 1 Reply Last reply Reply Quote 0
                      • cowboysdudeC Offline
                        cowboysdude Module Developer
                        last edited by

                        The url in the module no longer works… it won’t give an error it’s a 404 error…

                        I’m seeing if I can find a url replacement…

                        homebrewH 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