我常用氣象API是奇摩與微軟,奇摩有利用這樣的API開發桌面WIDGET程式,而微軟在vista上 也有Sidebar Gadget顯示目前戶外的氣象
奇摩氣象網址:http://xml.weather.yahoo.com 在這個網站找到你所在的都市的天氣,上面的RSS有提供目前戶外的天氣與預報資訊,
可以利用這個RSS來開發。


而本篇文章是介紹使用微軟提供氣象API來撰寫程式




微軟氣象網址:http://weather.msn.com/ 一樣的在這個網站找到你所在的都市的天氣,上面的RSS有提供目前戶外的天氣與預報資訊,
,你可以利用這個RSS來做開發,只不過這個RSS的架構並沒有將氣象的個別資訊,一個一個分別放在XML不同的節點(或屬性)裡,
而是將所有資料經HTML排版後,放在一個資料節點裡,老實說要解析這些HTML不容易,將來格式變了資料又找不到了。


我在Vista的Sidebar 氣象小工具的原始檔裡發現了它並非是呼叫上述的RSS來做解析,而是呼叫了http://weather.msn.com/data.aspx
這一支程式,網址列參數的傳法與RSS的傳法一樣,這一支還傳了一個好用的XML,可以輕易的開發目前戶外的天氣與預報程式。


首先呢我們先看參數的傳法,它需要指定是哪一個都市代碼與使用華氏或是攝氏,以下是我們使用的範例:
http://weather.msn.com/data.aspx?wealocations=wc:TWXX0021&weadegreetype=C
一般我們習慣使用的是weadegreetype=C,當然你也可以改成 weadegreetype=F
wealocations 參數要傳入都市代碼,你可以到http://weather.msn.com/region.aspx?wealocations=Taiwan
查看這個API提供了哪些都市供查詢,我想大部分的人看到這些地名的拼音,應該是猜不出來是哪裡吧!
沒關係,我在網路上發現了有好心人士把它翻譯成中文的地名,我再加上代碼方便大家查用


Taipei, TWN:台灣-台北 wealocations=wc:TWXX0021
Pan-ch’iao, TWN:台灣-台北-板橋市 wealocations=wc:10028648
San-ch’ung, TWN:台灣-台北-三重市 wealocations=wc:29496
Yung-ho, TWN:台灣-台北-永和市 wealocations=wc:37364
Hsin-chuang, TWN:台灣-台北-新莊市 wealocations=wc:14392
Hsin-tien, TWN:台灣-台北-新店市 wealocations=wc:TWXX0010
Chilung, TWN:台灣-基隆 wealocations=wc:TWXX0003
T’ao-yuan, TWN:台灣-桃園 wealocations=wc:TWXX0025
Chung-li, TWN:台灣-桃園-中壢市 wealocations=wc:7371127
Hsin-chu, TWN:台灣-新竹 wealocations=wc:TWXX0009
Chu-tung, TWN:台灣-新竹-竹東鎮 wealocations=wc:TWXX0006
Chu-nan, TWN:台灣-苗栗-竹南鎮 wealocations=wc:10034496
T’aichung, TWN:台灣-台中 wealocations=wc:TWXX0019
Chang-hua, TWN:台灣-彰化 wealocations=wc:TWXX0001
Chiayi, TWN:台灣-嘉義 wealocations=wc:TWXX0002
T’ainan, TWN:台灣-台南 wealocations=wc:32433
Yung-k'ang, TWN:台灣-台南-永康市 wealocations=wc:10480429
Kaohsiung, TWN:台灣-高雄 wealocations=wc:16133
Feng-shan, TWN:台灣-高雄-鳳山市 wealocations=wc:10209491
P’ingtung, TWN:台灣-屏東 wealocations=wc:24933
O-luan-pi, TWN:台灣-屏東-鵝鑾鼻 wealocations=wc:7365022
T’ai-tung, TWN:台灣-台東 wealocations=wc:32435
Ch’eng-kung-chen, TWN:台灣-台東-成功鎮 wealocations=wc:7372779
Pei-nan, TWN:台灣-台東-卑南鄉 wealocations=wc:10209499
Hua-lien, TWN:台灣-花蓮 wealocations=wc:TWXX0011
Yu-li, TWN:台灣-花蓮-玉里鎮 wealocations=wc:7359057
Fu-li, TWN:台灣-花蓮-富里鄉 wealocations=wc:7370247
Kuang-fu, TWN:台灣-花蓮-光復鄉 wealocations=wc:10209389
Makung, TWN:台灣-澎湖-馬公市 wealocations=wc:10107142
Wu-shih-pi, TWN 台東縣-烏石鼻 wealocations=wc:7359486


其實有些地方還蠻神奇的,在程式撰寫時,做個下拉選單,就可以切換各地的天氣。


接下來我們來看看回傳的XML架構,


<?xml version="1.0" ?>


- <weatherdata>



- <weather weatherlocationcode="wc:TWXX0021" weatherlocationname="Taipei, TWN" zipcode="" url="http://weather.msn.com/local.aspx?wealocations=wc:TWXX0021" imagerelativeurl="http://st.msn.com/as/wea3/i/en-US/" degreetype="C" provider="Foreca" attribution="Data provided by Foreca" attribution2="© Foreca" lat="25.038772600000001" long="121.5091858" timezone="8" alert="">



<current temperature="25" skycode="28" skytext="Mostly Cloudy" date="2007-03-15" day="Thursday" observationtime="17:00:00" observationpoint="Sungshan / Taipei" feelslike="25" humidity="74" windspeed="8" winddisplay="8 km/hr NW" />


<forecast low="17" high="27" skycodeday="32" skytextday="Clear" date="2007-03-15" day="Thursday" precip="15" />


<forecast low="16" high="23" skycodeday="11" skytextday="PM Rain" date="2007-03-16" day="Friday" precip="25" />


<forecast low="14" high="16" skycodeday="11" skytextday="Showers" date="2007-03-17" day="Saturday" precip="70" />


<forecast low="15" high="18" skycodeday="9" skytextday="Sprinkles" date="2007-03-18" day="Sunday" precip="80" />


<forecast low="13" high="16" skycodeday="11" skytextday="Showers" date="2007-03-19" day="Monday" precip="70" />


<toolbar timewindow="60" minversion="1.0.1965.0" />

</weather>

</weatherdata>

temperature為目前溫度沒問題,skycode為天氣概況編碼,可以利用這個編碼顯示出氣象狀態的小圖,方法如下
"http://st.msn.com/as/wea3/i/en-US/law/" + skyCode + ".gif"


skytext為氣象概況文字,若是我想顯示英文那就沒問題,若是想顯示中文就難了,因為根本不知道有幾種,沒辦法寫中英對應表
我看到對岸有人用了一個方法,因為skycode為連續的編號,所以他把所有氣象狀態的小圖都秀出來,自己看著圖翻譯成中文
還蠻妙的..我寫了Function方便使用:


Function toChineseString(ByVal skyCode As String) As String


Select Case skyCode


Case "26", "27"


Return ""


Case "35", "39", "45", "46"


Return "小雨"


Case "19", "20", "21", "22"


Return ""


Case "29", "28", "30", "33"


Return "多雲"


Case "5", "13", "14", "15", "16", "18", "25", "41", "42"


Return ""


Case "1", "2", "3", "4", "37", "38", "47"


Return "雷雨"


Case "31", "32", "34", "36", "44"


Return ""


Case "23", "24"


Return "中到大風"


Case "9", "10", "11", "12", "40"


Return "中到大雨"


Case "6", "7", "8", "17"


Return "冰雹"


Case Else


Return ""


End Select


End Function



其他的部分只要將數值秀到畫面上去就大功告成啦..


 


來源: http://www.ithome.com.tw/plog/index.php?op=ViewArticle&articleId=9712&blogId=418


nelman 發表在 痞客邦 PIXNET 留言(0) 人氣()