作者共發了3篇帖子。 內容轉換:不轉換▼
 
點擊 回復
243 2
【代码】适用于XP的边栏中,天气小工具从网络加载天气部分的JavaScript代码
一派護法 十九級
1樓 發表于:2016-1-3 16:34
该代码位于weather.js的128~184行左右。
MSNWeather.prototype={
    SearchByCode:function(locCode){
        var self = this;
        var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async=true;
        xmlDoc.onreadystatechange = function() {
            if (xmlDoc.readyState == 4)
            {
                if(xmlDoc.parseError.errorCode != 0)
                {

                }
                else
                {
                    var wdata = new WeatherData();
                    wdata.Latitude    = parseFloat(xmlDoc.selectSingleNode("/weatherdata/weather/@lat").value);
                    wdata.Longitude   = parseFloat(xmlDoc.selectSingleNode("/weatherdata/weather/@long").value);
                    wdata.Location    = xmlDoc.selectSingleNode("/weatherdata/weather/@weatherlocationname").value;
                    wdata.Attribution = xmlDoc.selectSingleNode("/weatherdata/weather/@attribution").value;
                    wdata.Attribution2= xmlDoc.selectSingleNode("/weatherdata/weather/@attribution2").value;
                    wdata.Url         = xmlDoc.selectSingleNode("/weatherdata/weather/@url").value;
                    wdata.SkyCode     = parseInt(xmlDoc.selectSingleNode("/weatherdata/weather/current/@skycode").value);
                    wdata.SkyText     = getWeatherState(wdata.SkyCode, xmlDoc.selectSingleNode("/weatherdata/weather/current/@skytext").value);
                    wdata.Temperature = parseInt(xmlDoc.selectSingleNode("/weatherdata/weather/current/@temperature").value);
                    if (self.Celsius)
                      wdata.Temperature = convert(wdata.Temperature);
                    else
                        wdata.Temperature = isNaN(wdata.Temperature)?0:wdata.Temperature;
                    for (var i = 1; i <= 5; i++)
                    {
                        var node = xmlDoc.documentElement.childNodes[0].childNodes[i];
                        var SkyCode = parseInt(node.getAttribute("skycodeday"));
                        var SkyText = getWeatherState(SkyCode, node.getAttribute("skytextday"));
                        var High    = parseInt(node.getAttribute("high"));
                        if (self.Celsius)
                          High = convert(High);
                        else
                            High = isNaN(High)?0:High;
                        var Low     = parseInt(node.getAttribute("low"));
                        if (self.Celsius)
                          Low = convert(parseInt(Low));
                        else
                            Low = isNaN(Low)?0:Low;
                        var Date    = node.getAttribute("date");
                        var Day     = node.getAttribute("day");
                        wdata.makeForeCast(i-1, SkyCode, SkyText, High, Low, Date, Day);
                    }
                    wdata.RetCode = 200;
                    wdata.Count = 1;
                    self.OnDataReady(wdata);
                }
            }
        };
        xmlDoc.load("http://weather.service.msn.com/data.aspx?src=vista&wealocations="+locCode);
    },
    OnDataReady:function(data){}
}
由此可见,该小工具访问的网址是:
http://weather.service.msn.com/data.aspx?src=vista&wealocations=位置数据
一派護法 十九級
2樓 發表于:2016-1-3 16:35
直接访问上述网址,得到的XML数据为:
<weatherdata><weather weatherlocationcode="wc:USDC0001" weatherlocationname="Washington,  D.C." url="http://a.msn.com/54/en-US/ct38.9,-77.023?ctsrc=vista" imagerelativeurl="http://blob.weather.microsoft.com/static/weather4/en-us/" degreetype="F" provider="Foreca" attribution="http://www.foreca.com/" attribution2="Foreca" lat="38.9" long="-77.023" timezone="-5" alert="" entityid="35854" encodedlocationname="Washington"><current temperature="31" skycode="31" skytext="Clear" date="2016-01-03" observationtime="03:05:00" observationpoint="Washington" feelslike="31" humidity="90" winddisplay="2 mph Southeast" day="Sunday" shortday="Sun" windspeed="2 mph"/><forecast low="33" high="47" skycodeday="31" skytextday="Clear" date="2016-01-02" day="Saturday" shortday="Sat" precip=""/><forecast low="34" high="48" skycodeday="32" skytextday="Sunny" date="2016-01-03" day="Sunday" shortday="Sun" precip="0"/><forecast low="26" high="36" skycodeday="26" skytextday="Cloudy" date="2016-01-04" day="Monday" shortday="Mon" precip="0"/><forecast low="29" high="35" skycodeday="32" skytextday="Sunny" date="2016-01-05" day="Tuesday" shortday="Tue" precip="0"/><forecast low="31" high="39" skycodeday="32" skytextday="Sunny" date="2016-01-06" day="Wednesday" shortday="Wed" precip="0"/><toolbar timewindow="60" minversion="1.0.1965.0"/></weather></weatherdata>
一派護法 十九級
3樓 發表于:2016-1-3 16:36
1楼的代码是我改过的。我把原来的toChineseString替换成了getWeatherState。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:243 回複數:2
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-1-3 16:36
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。