Created
November 11, 2015 20:43
-
-
Save hollie/f86d1026e9eedd2970fa to your computer and use it in GitHub Desktop.
Scrape the 'kustweerbericht' local weather page and convert it to speech
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Category=Weather | |
# noloop=start | |
my $kwb_file = "$config_parms{data_dir}/web/kwb.html"; | |
my $kwb_voice = "/Volumes/Media/speech/kustweer.wave"; | |
my $last_fetched_kwb; # To keep track of the last type of fetched weather report | |
my $weerbeeld; | |
my $kwb_player = "keuken"; # Default player | |
$v_get_kwb = new Voice_Cmd "[korte,volledige] weerbericht"; | |
$v_process_kwb = new Voice_Cmd "Speel weerbericht in [keuken,slaapkamer,zolder]"; | |
$fetch_kwb = new Process_Item "get_url http://www.kustweerbericht.be/nl/home.asp $kwb_file"; | |
$say_kwb = new Process_Item; | |
# noloop=stop | |
if ($state = said $v_get_kwb) { | |
$last_fetched_kwb = $state; | |
# Fetch new data | |
unlink $kwb_file; | |
# Get the correct URL | |
my $url = 'http://www.kustweerbericht.be/nl/home.asp'; | |
$url = 'http://www.kustweerbericht.be/nl/professionele.gebruikers.algemeen.asp' if $state eq 'volledige'; | |
set $fetch_kwb "get_url $url $kwb_file"; | |
start $fetch_kwb; | |
print_log "Fetching kustweerbericht $state"; | |
} | |
if ($state = said $v_process_kwb or done_now $fetch_kwb){ | |
my $html = file_read($kwb_file); | |
if (defined($state)) { | |
::print_log("weer", "Voorlezen kuststweer in $state\n"); | |
$kwb_player = $state; | |
} | |
# Gewoon kustweerbericht | |
my $weerbeeld; | |
$state = $v_process_kwb->state(); | |
if ($last_fetched_kwb eq 'korte' && $html =~ /Weerbeeld\s:\s<\/strong>\s+(.*?)<\/p>/s){ | |
$weerbeeld = $1; | |
$weerbeeld =~ s/N/noord /g; # idem for wind directions | |
$weerbeeld =~ s/O/oost /g; | |
$weerbeeld =~ s/Z/zuid /g; | |
$weerbeeld =~ s/W/west /g; | |
$weerbeeld = "Hier volgt het korte kustweerbericht: " . $weerbeeld; | |
} | |
if ($last_fetched_kwb eq 'volledige' && $html =~ /(Mariene meteoverwachting.*?)\(De in de tekst/s){ | |
$weerbeeld = $1; | |
} | |
print_log "Weerbeeld: $weerbeeld"; | |
# Parse if we found something | |
if ($weerbeeld ne '') { | |
$weerbeeld =~ s/<.*?>//sg; # strip HTML code | |
$weerbeeld =~ s/\s{2,}/ /g; # strip extra spaces | |
$weerbeeld =~ s/°C/graden Celcius/g; # ensure temperature units can be TTSed | |
$weerbeeld =~ s/Bft/Beaufort/g; # and units | |
$weerbeeld =~ s/\((\d)\)/$1 Beaufort /g; | |
} else { | |
$weerbeeld = "Kon het weerbericht niet terugvinden, mijn parser moet waarschijnlijk aangepast worden"; | |
next; | |
} | |
print_log "Converted to '$weerbeeld'"; | |
unlink $kwb_voice; | |
set $say_kwb "say \"$weerbeeld\" -o $kwb_voice"; | |
start $say_kwb; | |
print_log "Started conversion"; | |
} | |
if (done_now $say_kwb) { | |
print_log("Conversion done, starting playback"); | |
my $player; | |
if ($kwb_player eq "keuken") { | |
$player = $sb_keuken; | |
} elsif ($kwb_player eq "zolder") { | |
$player = $sb_zolder; | |
} else { | |
$player = $sb_wekker; | |
} | |
$player->play_notification($kwb_voice, 80); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment