[WM 修練]MyStock v1.0 - Windows Mobile 6.5 Widget
[i love dotblogs]
Widget是新版的Windows Mobile 6.5有一個新的功能之一,詳細的功能介紹可以參考bauann大大的Widgets in Windows Mobile 6.5 - 簡介這篇文章,裡面有很詳細又很優的介紹。
在Widget眾多特色中,有一個很好用的就是支援XMLHttpRequest物件操作,就是我們常常說的AJAX啦,在有網路連線的情況下可以允許你的程式非同布的存取網路上資源。有了這個功能,可以使得我們的程式不一定只能顯示自己本機上的資料,還可以透過操作XMLHttpRequest物件將網路上的資料擷取下來,放在我們客制的Widget程式中顯示。
接下來就來示範如果用Widget支援的XMLHttpRequest物件來抓取Yahoo股市的股票資料。
config.xml
<?xml version="1.0" encoding="utf-8" ?>
<widget xmlns="http://www.w3.org/ns/widgets" id="" version="1.0">
<name>MyStock v1.0</name>
<author href="http://www.dotblogs.com.tw/jon/" >jon</author>
<content src="stock.html" type="text/html"/>
<access network="true"/>
<icon src="DotBlogsLogo.gif" />
<description>MyStock v1.0</description>
</widget>
stock.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My Stock v1.0</title>
<script src="setting.js" type="text/javascript"></script>
   1:  
		2: <script src="js.js" type="text/javascript">
   1: </script>
		
   2: </head>
		
   3: <body>
		
   4:  
		5: <div id="divState">
   6: </div>
		7: <div id="divStock">
   8: </div>
		
   9:  
		
  10: <script>
		
  11: ReadSetting();        
		</script>
		</body>
</html>
setting.js,原本是用另一個xml檔來設定要抓取的股票代號,但部署到wm 6.5的模擬器測試的時候,發現widget好像抓不到那個xml,所以改用js的寫法。Setting的stock陣列裡面填寫要抓取的股票的代碼,stockUrl是抓取的位置。
var Setting = {
		
    'Stock': ['2303', '2890', '2845'],
		
    'StockUrl': 'http://tw.stock.yahoo.com/q/q?s='    
		};
js.js,主要的程式都寫在這隻檔案裡面。首先先取得Setting裡面Stock和StockUrl的設定,在用迴圈循序的透過XMLHttpRequest物件取回Yahoo網頁的內容,再parse網頁的內容找到股票名稱、股票代碼、成交價和漲跌資訊顯示在stock.html上。
function ReadSetting() {
		
    var s = document.getElementById("divStock");
		
    
		
    s.innerHTML = "";    
		
    for (var i = 0; i < Setting.Stock.length; i++) {
		
        GetStock(Setting.Stock[i]);
		
    }
		}
function GetStock(num) {    
		
    
		
    var xmlhttp = new XMLHttpRequest();
		
    xmlhttp.open("GET", Setting.StockUrl + num);
		
    xmlhttp.onreadystatechange = function() {
		
        if (xmlhttp.readyState == 4) {
		
            var result = xmlhttp.responseText;
		
            var s = document.getElementById("divStock");
		
            var state = document.getElementById("divState");
		
            state.innerHTML = "";
		
            
		
            var clr = "#000000"; //平盤黑色
		
            var html = "";
		
            var direction = "";
		
            var val = "";
		
            var regex = new RegExp("△.+"); //上漲
		
            var ar = regex.exec(result);
		
            if (ar != null) {
		
                direction = ar[0];
		
                clr = "#ff0000"//紅色
		
            }
		
            regex = new RegExp("▽.+"); //下跌
		
            ar = regex.exec(result);
		
            if (ar != null) {
		
                direction = ar[0];
		
                clr = "#00ff00"//綠色
		
            }
		
            html = "<font style=\"color:" + clr + "\">";
		
            var regex = new RegExp("name=\"stkid\" value=\".+\""); //股票代碼
		
            var ar = regex.exec(result);
		
            if (ar != null) {
		
                html += ar[0].split('"')[3] + " "
		
            }
		
            regex = new RegExp("name=\"stkname\" value=\".+\""); //股票名稱
		
            ar = regex.exec(result);
		
            if (ar != null) {
		
                html += ar[0].split('"')[3] + " "
		
            }
		
            regex = new RegExp("<b>.+</b>"); //成交價
		
            ar = regex.exec(result);
		
            if (ar != null) {
		
                html += ar[0] + " "
		
                val = ar[0];
		
            }
		
            if (direction == "")    //漲跌
		
                html += val//平盤
		
            else
		
                html += direction
		
            html += "</font>"
		
            s.innerHTML += html + "<br />";
		
            delete xmlhttp;
		
        }
		
        else {
		
            var state = document.getElementById("divState");
		
            state.innerHTML = "連結中";
		
        }
		
    };
		
    
		
    xmlhttp.send();    
		}
執行畫面
參考資料
http://msdn.microsoft.com/en-us/library/dd721906.aspx
http://www.dotblogs.com.tw/bauann/archive/2009/06/15/8821.aspx
http://www.dotblogs.com.tw/puma/archive/2009/07/04/mobile-6.5-widget-menu.aspx
http://www.dotblogs.com.tw/puma/archive/2009/07/07/mobile-6.5-widget-javascript-object-menu.aspx
---------------
這是簽名檔,I love Dotblogs