0

Classic 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 & "&deg;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 & "&deg;"
                    Case "tempMinC"
                        wLow = y.item(i).childNodes(j).text & "&deg;"                   
                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 BROOK'>CORNER BROOK</option>"

End Function


%>
4

1 に答える 1

1

2 つのオプションがあります。気象データを XML として取得するか、自分で解析して独自のデザインを作成するか、生の HTML 文字列自体を操作して、画像名に従って目的の画像を独自の画像に置き換えます。

2 番目のオプションのコード サンプルを示します。まず最初に、可能なすべてのアイコンの名前を確認し (たとえば、すべて取得するまで、さまざまな都市のさまざまな天気の天気を取得します)、それを保持します。次に、アイコンごとに独自のものを取得し、同じ名前でサーバーに保存します。

これがあれば、次のコードでうまくいくはずです。

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

これは、2 つのアイコンを置き換える単なる例です。サーバー上の画像がサブフォルダーにある場合は、それをimagesFolder定数に入れます。それ以外の場合は空のままにします。arrImageNames可能なすべてのアイコンを入れます。

上記を使用するには、HTML を返す前に呼び出すだけです。

'...
set objXML = nothing    
set xmlhttp = nothing 

Call ReplaceIcons(retStr)

getweather = retStr
于 2012-12-18T08:03:38.243 に答える