株価ガジェットの前日比(円)が正しく表示されない

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とかだとちゃんと動作してるんだろうか。