Ich hatte plötzlich diese fixe Idee, ein paar Minuten später fand ich die wetter.com-API, und wieder 10 Minuten später war es fertig: WeatherVoice.
das folgende Skript liest die Wettervorhersage der nächsten drei Tage für Chios (wo ich gerade bin) vor.
Da ihr sicherlich einen anderen Ort haben möchtet, müsst ihr drei Angaben in der URL ändern: GRXXX0026 zu der ID des Ortes (zu finden auf wetter.com)
Dann braucht ihr einen API-Key. Wenn ihr den habt, tragt ihr statt weathervoice den Namen eures Projektes ein und statt dem nach /cs/ eine md5-Summe von Ort (die ID), Projektname und API-Key (alles ohne irgendein Trennzeichen verbinden und md5en)
Da ich keine deutsche Stimme habe, werden die (deutschen) Angaben von wetter.com ins Englische übersetzt (und MS Sam liest das dann vor).
Spoiler anzeigen
#include <String.au3>
[/autoit] [autoit][/autoit] [autoit]$weather=BinaryToString(InetRead("http://api.wetter.com/forecast/weather/city/GRXXX0026/project/weathervoice/cs/40798025cf6c488f476f1ec63b33c0a6"),4)
$weather=_StringBetween($weather,"<w_txt>","</w_txt>")
$alt=0
sayforday(0,"Today")
Sleep(400)
sayforday(1,"Tomorrow")
Sleep(400)
sayforday(2,"The day after tomorrow")
Sleep(600)
_Say("All in all: Today " & t($weather[4]) & ". Tomorrow " & t($weather[9]) & ". The day after: " & t($weather[14]) & ".")
Func sayforday($i,$day)
If $weather[0+5*$i]=$weather[1+5*$i] And $weather[1+5*$i]=$weather[2+5*$i] And $weather[2+5*$i]=$weather[3+5*$i] Then
_Say($day & ", the whole day " & t($weather[0+5*$i]))
ElseIf $weather[0+5*$i]=$weather[1+5*$i] And $weather[1+5*$i]=$weather[2+5*$i] Then
_Say($day & ", until the afternoon " & t($weather[0+5*$i]) & ", in the night " & t($weather[3+5*$i]))
ElseIf $weather[0+5*$i]=$weather[1+5*$i] And $weather[2+5*$i]=$weather[3+5*$i] Then
_Say($day & ", until noon, " & t($weather[0+5*$i]) & ", later " & t($weather[3+5*$i]))
ElseIf $weather[0+5*$i]=$weather[1+5*$i] Then
_Say($day & ", until noon, " & t($weather[0+5*$i]) & ", in the afternoon " & t($weather[2+5*$i]) & " and in the night " & t($weather[3+5*$i]))
ElseIf $weather[1+5*$i]=$weather[2+5*$i] And $weather[2+5*$i]=$weather[3+5*$i] Then
_Say($day & ", " & t($weather[0+5*$i]) & " in the morning, later it gets" & t($weather[2+5*$i]))
ElseIf $weather[1+5*$i]=$weather[2+5*$i] Then
_Say($day & ", " & t($weather[0+5*$i]) & " in the morning, later it gets" & t($weather[2+5*$i]) & " and in the night " & t($weather[3+5*$i]))
ElseIf $weather[2+5*$i]=$weather[3+5*$i] Then
_Say($day & ", " & t($weather[0+5*$i]) & " in the morning, " & t($weather[1+5*$i]) & " at noon, later it gets" & t($weather[3+5*$i]))
Else
_Say($day & ", " & t($weather[0+5*$i]) & " in the morning, " & t($weather[1+5*$i]) & " at noon, " & t($weather[2+5*$i]) & " in the afternoon and " & t($weather[3+5*$i]) & " at night.")
EndIf
EndFunc
Func _Say($sText, $iRate = 1, $iVolume = 100)
If $iRate > 10 Or $iVolume > 100 Then Return
Local $oTalk = ObjCreate('SAPI.SpVoice')
If Not @error Then
$oTalk.Rate = $iRate
$oTalk.Volume = $iVolume
$oTalk.Speak($sText)
EndIf
ConsoleWrite($sText & @CRLF)
EndFunc
Func t($what)
Switch $what
Case "heiter"
Return "sunny"
Case "leicht bewölkt"
Return "partly cloudy"
Case "wolkig"
Return "cloudy"
Case "regen","Regen"
Return "rainy"
Case Else
Return $what
EndSwitch
EndFunc