WeatherVoice - Lass dir das Wetter vorlesen

  • 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
    [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit]

    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]) & ".")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Das ist wirklich praktisch. Deutsche Stimmen gibt es bei Microsoft (für den MS-Reader) oder hier (unter RealSpeak) Beide Stimmen laufen aber nur mit 32bit-Skripten. Wenn AutoIt als x64 ausgeführt wird, können sie nicht verwendet werden.

    Um die MS-Stimme auch ohne Reader zu installieren, muss man den Installer überlisten ;)

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    #AutoIt3Wrapper_usex64=n
    RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ebook","Version")
    If @error Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ebook","Version","REG_SZ","2.2")
    If MsgBox(36,'SAPI Language Install Patch',"Open Download-Page for TTS-Languages ?") = 6 Then ShellExecute("http://www.microsoft.com/reader/developers/downloads/tts.aspx")
    MsgBox(0, 'SAPI Language Install Patch', "Now install the Language-Pack from " & @CRLF & "http://www.microsoft.com/reader/developers/downloads/tts.aspx" & @CRLF & @CRLF & "Then click OK after installation.")
    RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ebook")
    Else
    MsgBox(0, 'SAPI Language Install Patch', "You already ahve installed the Microsoft Reader, so no Patch is needed. "&@CRLF&"possibly you have to download the newest version from "&@CRLF&"http://www.microsoft.com/reader/")
    EndIf

    [/autoit]
  • Langfristig ist es mein Ziel, eine Art "Sekretär" zu erstellen: Wenn ich den Rechner morgens aufklappe, soll er mir Wetter, Nachrichten, Batteriestatus, Anzahl neuer Mails, etc. vorlesen :D

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.