zeroclickinfo-goodies/lib/DDG/Goodie/HistoricalEvents.pm

80 lines
1.9 KiB
Perl

package DDG::Goodie::HistoricalEvents;
use strict;
use warnings;
use DDG::Goodie;
use YAML::XS 'LoadFile';
zci answer_type => 'historical_events';
zci is_cached => 1;
my $events = LoadFile(share('events.yml'));
my %queries;
# build query/answer hash by iterating over events YAML
foreach my $event ( keys %$events ) {
my $event_obj = $events->{$event};
my $link = $event_obj->{link};
while ( my($query, $answer) = each %{$event_obj->{queries}} ) {
if ($query =~ m/_event_/) {
# replace _event_ with $article $event
my $article = $event_obj->{article};
$query =~ s/_event_/$article $event/;
$answer =~ s/_event_/$article $event/;
$queries{lc $query} = {
link => $link,
answer => $answer
};
# additional trigger without '$article ' for triggering flexibiilty
$query =~ s/$article //;
$queries{lc $query} = {
link => $link,
answer => $answer
};
}
else {
$queries{$query} = {
link => $link,
answer => $answer
};
}
}
};
my @triggers = map { ("$_", "$_?") } keys %queries;
triggers start => @triggers;
handle remainder_lc => sub {
# ensure no remainder, query == trigger
return if $_;
my $query = lc $req->matched_trigger;
$query =~ s/\?//;
my $answer = $queries{$query}{answer};
my $link = $queries{$query}{link};
return "Yes, $answer: $link",
structured_answer => {
data => {
title => 'Yes',
subtitle => $answer,
url => $link
},
meta => {
sourceUrl => $link,
sourceName => "Wikipedia"
},
templates => {
group => 'info'
}
};
};
1;