Read the statement by Michael Teeuw here.
Stocks
-
@ZTA0796 Could you show your code?
-
@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); } }, -
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!
-
@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
-
@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…
-
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!
-
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
-
@Mitch1138 Yes same for me, this module no longer works.
-
@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 -
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…
-
@alexyak
can’t seem to get this updating on the MM display, any ideas? Was there any change to the original code? -
@cowboysdude
Did you find a working URL replacement?
Have you been using another Stocks module instead? -
@homebrew No sorry I haven’t. I don’t use stock modules :) I don’t do stocks LOL
BUT if you can find a url that works I can look at the module for you…
-
@Mykle1
have you found a replacement url or just using another stocks module? -
Like @cowboysdude, I don’t use stock modules. My interest in this topic was to troubleshoot for @Mitch1138 3 months ago. The API that was being used is no longer available. Cowboysdude and I both looked for a free API but there didn’t seem to be one available at the time.
If you can find a free API then I’ll certainly collaborate with Cowboysdude if he wanted some assistance
-
@homebrew
i’m too - i can’t see anything on my display if i use the Stocks module.
I‘m useing mm 2.2.1 on a raspberry pi. -
I’ve found a web service which provides free intraday stock quotes. You will only need to register to get an API key.
https://www.alphavantage.co/support/#api-key
The code in the module will need to be modified though to parse a different payload result. I will try to update it today or tomorrow.
-
@alexyak
Many Thanks - i‘m looking forward.
If you update your code - i will Test it ;) -
I’ve updated the code to support the new API’s from https://iextrading.com/developer/docs/#stocks. Which BTW, doesn’t even require registration.
-
Alexyak this is great thanks! The iex API seems to only support US stocks. Any chance of integrating Alphavantage into this great module? Would love to get some CDN ( TSX ) stocks into it
Thanks!
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login