Code:
'===============================
'Erstellt mit [ABP]AVS 1.0.5
'AnGelBot Visual Scripting
'Visit us online @ http://www.angelbot-portal.de/
'===============================
'Programmiert von Sp33d
'===============================
'Verfügbar Variablen (case-sensitive!):
' %TIME% - Uhrzeit der Information
' %DATE% - Datum der Information
' %CITY% - Stadt mit der zugehörigen PLZ
' %TEMP% - Aktuelle Temperatur
' %DRUCK% - Druck in hPa
' %WIND% - Windrichtung (Nord, Süd, West, Ost,...)
' %WIND_BFT% - Windstärke in Bft (Beaufort Skala)
' %WIND_STR% - Windstärke als Text, abgeleitet vom Bftwert (mäßiger Wind, Sturm,...)
' %WIND_MS% - Windgeschwindigkeit in m/s, abgeleitet vom Bftwert
' %WIND_KNT% - Windgeschwindigkeit in Knoten, abgeleitet vom Bftwert
Const vMessage = "(%TIME%) %CITY%: Aktuelle Temperatur beträgt %TEMP% bei einem Luftdruck von %DRUCK%. Der Wind weht aus %WIND% mit %WIND_BFT% Bft (%WIND_STR%; %WIND_MS% m/s; %WIND_KNT% Knoten)."
Const WetterHost = "www.wetter.com"
Dim Searches()
Sub Init()
Script "Wetterscript 1.0b by Sp33d"
Hook "Priv_Msg"
Hook "Chan_Msg"
ReDim Searches(0)
End Sub
Sub Priv_Msg(Nick, RegUser, Line)
Chan_Msg Nick, Nick, RegUser, Line
End Sub
Sub Chan_Msg(Chan, Nick, RegUser, Line)
Line = Strip(Line)
If LCase(Param(Line, 1)) = "!wetter" Then
If Param(Line, 2) <> "" Then
If IsNumeric(Param(Line, 2)) Then
For i = 1 To UBound(Searches)
If Searches(i).Finished = 1 Then
Searches(i).Index = i
Searches(i).Recipient = Chan
Searches(i).PLZ = Param(Line, 2)
Searches(i).Special = GetRest(Line, 3)
Searches(i).Finished = 0
Searches(i).DoSearch
Exit Sub
End If
Next
ReDim Preserve Searches(UBound(Searches) + 1)
i = UBound(Searches)
Set Searches(i) = New Search
Searches(i).Index = i
Searches(i).Recipient = Chan
Searches(i).PLZ = Param(Line, 2)
Searches(i).Special = GetRest(Line, 3)
Searches(i).Finished = 0
Searches(i).DoSearch
End If
End If
End If
End Sub
Class Search
Public Index, Recipient, PLZ, Finished, Special
Private Recieved, URL
Public Sub SockEvent(vSock, SEvent, SData)
Select Case SEvent
Case SE_Connected
SockWrite vSock, "GET http://" & WetterHost & URL & " HTTP/1.0" & vbCrLf & vbCrLf
Case SE_Read
Recieved = Recieved & SData
Case SE_Closed
SockClose vSock
If Instr(1, Recieved, "aktuelle Ortszeit") > 0 Then
Dummy = "f" & Chr(34) & "><span class=" & Chr(34) & "tabHeadline" & Chr(34) & ">"
Results = Right(Recieved, Len(Recieved) - Instr(1, Recieved, Dummy) - Len(Dummy) + 1)
res_Ort = Left(Results, Instr(1, Results, "</span>") - 1)
Dummy = "<div class=" & Chr(34) & "headlineHell2" & Chr(34) & ">"
Results = Right(Recieved, Len(Recieved) - Instr(1, Recieved, Dummy) - Len(Dummy) + 1)
Dummy = "<br>"
res_Datum = Left(Results, Instr(1, Results, Dummy) - 1)
Results = Right(Results, Len(Results) - Instr(1, Results, Dummy) - Len(Dummy) + 1)
res_Time = Left(Results, 5) & " Uhr OZ"
Dummy = "<span class=" & Chr(34) & "tabHeadline" & Chr(34) & ">"
Results = Right(Results, Len(Results) - Instr(1, Results, Dummy) - Len(Dummy) + 1)
res_Himmel = Left(Results, Instr(1, Results, "</span>") - 1)
Dummy = "<span class=" & Chr(34) & "tabBody" & Chr(34) & ">"
Results = Right(Results, Len(Results) - Instr(1, Results, Dummy) - Len(Dummy) + 1)
res_Temperatur = Left(Results, Instr(1, Results, "</span>") - 1) & "° C"
Dummy = "<td align=" & Chr(34) & "right" & Chr(34) & "><span class=" & Chr(34) & "tabBody" & Chr(34) & ">"
Results = Right(Results, Len(Results) - Instr(1, Results, Dummy) - Len(Dummy) + 1)
res_Luftdruck = Left(Results, Instr(1, Results, "</span>") - 1) & " hPa"
Dummy = "2" & Chr(34) & "><span class=" & Chr(34) & "tabBody" & Chr(34) & ">"
Results = Right(Results, Len(Results) - Instr(1, Results, Dummy) - Len(Dummy) + 1)
res_Windrichtung = Left(Results, Instr(1, Results, "</span>") - 1)
Dummy = "t" & Chr(34) & "><span class=" & Chr(34) & "tabBody" & Chr(34) & ">"
Results = Right(Results, Len(Results) - Instr(1, Results, Dummy) - Len(Dummy) + 1)
res_Windstaerke = Left(Results, Instr(1, Results, "</span>") - 1)
Dummy = Replace(vMessage, "%TIME%", res_Time)
Dummy = Replace(Dummy, "%CITY%", res_Ort)
Dummy = Replace(Dummy, "%DATE%", res_Datum)
Dummy = Replace(Dummy, "%TEMP%", Replace(res_Temperatur, " ", ""))
Dummy = Replace(Dummy, "%DRUCK%", res_Luftdruck)
Dummy = Replace(Dummy, "%WIND%", res_Windrichtung)
Dummy = Replace(Dummy, "%WIND_BFT%", res_Windstaerke)
Dummy = Replace(Dummy, "%WIND_STR%", BftToStr(res_Windstaerke))
Dummy = Replace(Dummy, "%WIND_MS%", BftToMs(res_Windstaerke))
Dummy = Replace(Dummy, "%WIND_KNT%", BftToKnt(res_Windstaerke))
SendLine "PRIVMSG " & Recipient & " :" & Dummy, 2
ElseIf Instr(1, Recieved, "nicht bekannt...") > 0 Then
SendLine "PRIVMSG " & Recipient & " :" & Chr(3) & "5* " & PLZ & " not found in database", 3
ElseIf Instr(1, Recieved, "PLZ-SUCHE") > 0 Then
SendLine "PRIVMSG " & Recipient & " :" & Chr(3) & "5* No or several cities found for " & PLZ, 3
End If
Recieved = vbNullString
Finished = 1
End Select
End Sub
Public Sub DoSearch()
If PLZ <> "" And Recipient <> "" And Finished <> 1 Then
If Special = "" Then
URL = "/home/structure/control.php?sessionID=&Lang=DE&ms=1&ss=1&sss=2&search=" & PLZ
TheSock = SockConnect(WetterHost, 80, "Searches(" & Index & ").SockEvent")
If TheSock = 0 Then
SpreadFlagMessage 0, "+m", "" & Chr(3) & "5*** WetterScript Error: Socket couldn't be opened."
SendLine "PRIVMSG " & Recipient & " :" & Chr(3) & "5Sry, but an error occured while opening the socket. Try again later."
End If
Else
If LCase(Param(Special, 1)) = "forecast" Then
Select Case Param(Special, 2)
Case Else
SendLine "PRIVMSG " & Recipient & " :" & Chr(3) & "5* Die Syntax ist: !wetter <PLZ> [<forecast> [<2|5|10>]]", 3
End Select
Else
SendLine "PRIVMSG " & Recipient & " :" & Chr(3) & "5* Die Syntax ist: !wetter <PLZ> [<forecast> [<2|5|10>]]", 3
End If
End If
End If
End Sub
End Class
Function BftToStr(vBft)
If vBft <> "" Then
If IsNumeric(vBft) Then
Select Case vBft
Case 0
BftToStr = "Windstille"
Case 1
BftToStr = "schwache Brise"
Case 2
BftToStr = "leichte Brise"
Case 3
BftToStr = "schwacher Wind"
Case 4
BftToStr = "mäßiger Wind"
Case 5
BftToStr = "frischer Wind"
Case 6
BftToStr = "starker Wind"
Case 7
BftToStr = "steifer Wind"
Case 8
BftToStr = "stürmischer Wind"
Case 9
BftToStr = "Sturm"
Case 10
BftToStr = "schwerer Sturm"
Case 11
BftToStr = "orkanartiger Sturm"
Case 12
BftToStr = "Orkan"
Case Else
BftToStr = "??"
End Select
End If
End If
End Function
Function BftToMs(vBft)
If vBft <> "" Then
If IsNumeric(vBft) Then
Select Case vBft
Case 0
BftToMs = "0 - 0,2"
Case 1
BftToMs = "0,3 - 1,5"
Case 2
BftToMs = "1,6 - 3,3"
Case 3
BftToMs = "3,4 - 5,4"
Case 4
BftToMs = "5,5 - 7,9"
Case 5
BftToMs = "8,0 - 10,7"
Case 6
BftToMs = "10,8 - 13,8"
Case 7
BftToMs = "13,9 - 17,1"
Case 8
BftToMs = "17,2 - 20,7"
Case 9
BftToMs = "20,8 - 24,4"
Case 10
BftToMs = "24,5 - 28,4"
Case 11
BftToMs = "28,5 - 32,6"
Case 12
BftToMs = "mehr als 32,7"
Case Else
BftToMs = "??"
End Select
End If
End If
End Function
Function BftToKnt(vBft)
If vBft <> "" Then
If IsNumeric(vBft) Then
Select Case vBft
Case 0
BftToKnt = "weniger als 1"
Case 1
BftToKnt = "1 - 3"
Case 2
BftToKnt = "4 - 6"
Case 3
BftToKnt = "7 - 10"
Case 4
BftToKnt = "11 - 16"
Case 5
BftToKnt = "17 - 21"
Case 6
BftToKnt = "22 - 27"
Case 7
BftToKnt = "28 - 33"
Case 8
BftToKnt = "34 - 40"
Case 9
BftToKnt = "41 - 47"
Case 10
BftToKnt = "48 - 55"
Case 11
BftToKnt = "56 - 63"
Case 12
BftToKnt = "mehr als 64"
Case Else
BftToKnt = "??"
End Select
End If
End If
End Function