MSAgent.pm。ほぼ Publish::Speech::Win32 のコピペ。こんどは Microsoft Agent でアニメーションとかもさせてます。キモは、
sub feed {
my($self, $context, $args) = @_;
my $character = $self->conf->{character} || 'Merlin';
my $agent = Win32::MSAgent->new($character);
my $char = $agent->Characters($character);
$char->SoundEffectsOn(1);
$char->Show();
$char->MoveTo(300,300);
sleep(5);
if (my $animation = $self->conf->{animation}) {
$char->Play($animation);
}
...
$self->speak( $char, encode($encoding, $args->{feed}->title_text) );
for my $entry ($args->{feed}->entries) {
my $stuff = $entry->title_text . $entry->body_text;
for my $message (split /\n/, $stuff) {
$self->speak( $char, encode($encoding, $message) );
}
}
}
sub speak {
my($self, $character, $message) = @_;
my $request = $character->Speak($message);
my $i = 0;
while (($request->Status == 2) || ($request->Status == 4)) {
$character->Stop($request) if $i >10; sleep(1); $i++;
}
}
アニメーションは config で指定しますが、フィードの内容によってインテリジェントに振舞えるとカッコイイなあ。というわけで、SNMP の通知など、アラートでなごみたい方はどうぞ。