如何更改世界天气在线图标
问题描述:
我使用经典的asp和XML在线实现了天气小部件,并且一切似乎都正常,但我想知道是否有人知道如何更改图标?如何更改世界天气在线图标
感谢
<%
Function getweather(city)
Dim tempC, wDesc, wIcon, currentWeather
Dim wDate, wHigh, wLow, extWeather
url = "http://free.worldweatheronline.com/feed/weather.ashx?q=" & city & ",Canada&format=xml&num_of_days=4&key=********"
set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.open "GET", url, false
xmlhttp.send ""
set objXML = Server.CreateObject("MSXML2.DOMDocument")
objXML.async = false
objXML.loadxml xmlhttp.responseText
set x = objXML.getElementsByTagName("current_condition")
if x.length = 0 then
retStr = "Error"
else
for i = 0 to x.item(0).childNodes.length - 1
if x.item(0).childNodes(i).nodeName = "temp_C" then
tempC = x.item(0).childNodes(i).text & "°C"
end if
if x.item(0).childNodes(i).nodeName = "weatherDesc" then
wDesc = x.item(0).childNodes(i).text
end if
if x.item(0).childNodes(i).nodeName = "weatherIconUrl" then
wIcon = "<img class='wIcon' src=" & x.item(0).childNodes(i).text & " height=45 width=45>"
end if
next
currentWeather = "<div id='curWeather'><span class='city'>" & city & "</span>" & wIcon & "<div class='tempC'>" & tempC & "<br />" & wDesc & "</div>" & "<a href='#' class='clrWeather' title='Clear weather information'><img src='images/clrweather.gif' alt='Clear weather information' /></a><div style='clear: both;'> </div></div>"
'Extended weather
extWeather = "<div class='extWeather'>"
set y = objXML.getElementsByTagName("weather")
for i = 0 to y.length - 1
for j = 0 to y.item(i).childNodes.length - 1
select case y.item(i).childNodes(j).nodeName
Case "date"
wDate = y.item(i).childNodes(j).text
wDate = "<div class='ewDate'>" & WeekdayName(Weekday(wDate), true) & "</div>"
Case "weatherDesc"
wDesc = "<div class='ewDesc'>" & y.item(i).childNodes(j).text & "</div>"
Case "weatherIconUrl"
wIcon = "<img class='ewIcon' src=" & y.item(i).childNodes(j).text & " height=20 width=20>"
Case "tempMaxC"
wHigh = y.item(i).childNodes(j).text & "°"
Case "tempMinC"
wLow = y.item(i).childNodes(j).text & "°"
end select
next
extWeather = extWeather & "<div class='extCol'>" & wDate & wIcon & "<div class='wHigh'>" & wHigh & "/" & wLow & "</div>" & wDesc & "</div>"
next
extWeather = extWeather & "<div style='clear: both;'></div></div>"
retStr = currentWeather & extWeather
end if
set objXML = nothing
set xmlhttp = nothing
getweather = retStr
End function
Function getCities
getCities = "<option value=-1>Select city for weather info</option>" & _
"<optgroup label='ONTARIO'><option value='BARRIE'>BARRIE</option>" & _
"<option value='BRAMPTON'>BRAMPTON</option>" & _
"<option value='CAMBRIDGE'>CAMBRIDGE</option><option value='HAMILTON'>HAMILTON</option><option value='KINGSTON'>KINGSTON</option><option value='LONDON'>LONDON</option><option value='ORILLIA'>ORILLIA</option><option value='OTTAWA'>OTTAWA</option><option value='OWEN SOUND'>OWEN SOUND</option><option value='PETERBOROUGH'>PETERBOROUGH</option><option value='SOUTH PORCUPINE'>SOUTH PORCUPINE</option><option value='SAINT CATHARINES'>ST. CATHARINES</option><option value='SUDBURY'>SUDBURY</option><option value='THUNDER BAY'>THUNDER BAY</option><option value='TIMMINS'>TIMMINS</option><option value='WINDSOR'>WINDSOR</option><optgroup label='NEWFOUNDLAND & LABRADOR'><option value='CORNER *'>CORNER *</option>"
End Function
%>
答
你有两个选择:要么得到的气象数据,XML,你自己分析它,并构建自己的设计,或操纵原始的HTML字符串本身,免去根据图像名称所需的图像与您自己的图像。
我会给第二个选项的代码示例。首先,检查所有可能的图标的名称(例如,获取不同天气的不同城市的天气,直到你全部获得)并保存它。然后,为每个图标,找到你自己的并将其保存在具有相同名称的服务器中。
到这一点,下面的代码应该做的伎俩:
Sub ReplaceIcons(ByRef rawHTML)
Const imagesFolder = "images/"
Dim arrImageNames, arrTemp, x
Dim curSrc, y, curImageName
arrImageNames = Array("black_low_cloud.png", "cloudy_with_light_snow.png")
arrTemp = GetBetween(rawHTML, "src=", " ")
For x=0 To UBound(arrTemp)
curSrc = LCase(arrTemp(x))
If Right(curSrc, 3)="png" Then
For y=0 To UBound(arrImageNames)
curImageName = arrImageNames(y)
If InStr(curSrc, curImageName)>0 Then
rawHTML = Replace(rawHTML, "src=" & curSrc & " ", "src=""" & imagesFolder & curImageName & """ ")
End If
Next
End If
Next
Erase arrTemp
End Sub
Function GetBetween(str, leftDelimeter, rightDelimeter)
Dim tmpArr, result(), x
tmpArr=Split(str, leftDelimeter)
If UBound(tmpArr) < 1 Then
GetBetween=Array() : Exit Function
End If
ReDim result(UBound(tmpArr)-1)
For x=1 To UBound(tmpArr)
result(x-1)=(Split(tmpArr(x), rightDelimeter))(0)
Next
Erase tmpArr
GetBetween=result
End Function
这仅仅是一个例子更换两个图标。如果您的服务器上的图像坐在一个子文件夹中,将其放在imagesFolder
中,否则将其保留为空。在arrImageNames
中放置了所有可能的图标。
使用上述,返回HTML之前叫它:
'...
set objXML = nothing
set xmlhttp = nothing
Call ReplaceIcons(retStr)
getweather = retStr
请阅读如何正确问问题FAQ。您没有提供任何有助于任何人回答此问题的代码或背景信息。请编辑并提供详细信息。 –
哪些图标,并改成什么? – SearchAndResQ