株価ガジェットの前日比(円)が正しく表示されない
Windows 7 株価のガジェットを表示 この記事を見てWindows7に株価ガジェットを追加したが、前日比の金額が正しく表示できていないことに気がつく。それもすべての銘柄ではなく特定の銘柄。
以下の状況より、前日比データのパースに失敗しているのではないかとあたりをつける。
- 前日比(パーセント)は正しく表示されているので、データの取得には成功していると考えられる。
- 前日比が1000円を超えた場合のような気がする。
- 1000円を超えるとカンマで区切られる(1,000のように)。
ざっと、ガジェットのソースを見て、確認。C:\Users\ユーザ名\AppData\Local\Microsoft\Windows Sidebar\Gadgets\Stocks_Windows_SideShow_ja-jp.gadget\js\stocks.jsの413行目でisNaN()で前日比金額の数値チェックを行っている箇所が怪しい。isNaN()の仕様を確認してみると、カンマ区切りはまずいらしい。
403: for(var i = 0; i < tickerList.length; i++) 404: { 405: var thisTicker = new stocks.msn.service.ticker(); 406: thisTicker.Symbol = tickerList[i].getAttribute("symbol"); 407: thisTicker.Name = tickerList[i].getAttribute("name"); 408: thisTicker.Last = tickerList[i].getAttribute("last"); 409: thisTicker.Change = tickerList[i].getAttribute("change"); 410: thisTicker.Percent = tickerList[i].getAttribute("percentchange"); 411: 412: if(isNaN(thisTicker.Last)) thisTicker.Last = "0"; 413: if(isNaN(thisTicker.Change)) thisTicker.Change = "0"; 414: 415: stocks.msn.service.tickerArray.push(thisTicker); 416: }
取得できるデータも確認してみる。
http://money.service.msn.com/StockQuotes.aspx?v=1&symbols=JP:4924
This document had no style information.
change="+13,000.00"となっている。以前はカンマ区切りではなかったのだろう。
カンマ区切りをはずせば問題ないはずなので、xmlからデータを取得する箇所に以下の修正を行う。
408: thisTicker.Last = tickerList[i].getAttribute("last"); 409: thisTicker.Change = tickerList[i].getAttribute("change"); 410: thisTicker.Percent = tickerList[i].getAttribute("percentchange");
↓
408: thisTicker.Last = tickerList[i].getAttribute("last"); 409: thisTicker.Change = tickerList[i].getAttribute("change").replace(",",""); 410: thisTicker.Percent = tickerList[i].getAttribute("percentchange");
このあとガジェットを再起動することで、正しく値が表示されるようになった。
もともとWindows7には正式対応してないガジェットだからしょうがないんだけど、Vistaとかだとちゃんと動作してるんだろうか。