検索結果のRSSを出力します。
[search rss]
%command_do への追加
my %command_do = ( read => \&do_read, edit => \&do_edit, adminedit => \&do_adminedit, adminchangepasswordform => \&do_adminchangepasswordform, adminchangepassword => \&do_adminchangepassword, write => \&do_write, index => \&do_index, searchform => \&do_searchform, search => \&do_search, create => \&do_create, createresult => \&do_createresult, FrontPage => \&do_FrontPage, comment => \&do_comment, rss => \&do_rss, diff => \&do_diff, interwikibox => \&do_interwiki_box, # Walrus add [InterWikiBox] searchrss => \&do_searchrss, # yakty add [search rss] );
do_searchrss() 追加
# yakty add [search rss] start sub do_searchrss { my $rss = new Yuki::RSS( version => '1.0', encoding => $charset, ); $rss->channel( title => $modifier_rss_title, link => $modifier_rss_link, description => $modifier_rss_description, ); my $word = &escape($form{mymsg}); my $counter = 0; my $case_sense = ($form{mycasesense} eq '1') ? 1 : 0; my $combination = ($form{mysearchcombo} eq 'or') ? 'or' : 'and'; my $search_target = (grep {$_ eq $form{mysearchtarget}} qw(title page part)) ? $form{mysearchtarget} : 'part'; $_ = $form{mymsg}; s/(?:\x0D\x0A|[\x0D\x0A])?$/ /; my @search_words = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} (/("[^"]*(?:""[^"]*)*"|[^ ]*) /g); @search_words = grep { length($_) != 0 } @search_words; if (@search_words) { my $opt = {'margin' => 30, 'case_sense' => $case_sense, 'combination' => $combination}; my @pages = ($sort_case_sense) ? (sort keys(%database)) : sort {lc($a) cmp lc($b)} keys(%database); # Walrus add [sort case sense] foreach my $page (@pages) { #last if ($counter >= 15); next if (&is_secret($page)); # yakty add [secret page] next if ($page eq $RecentChanges); next if ($page eq $RecentDiffs); # yakty add [recent diffs] my $escaped_title = &escape($page); my $link = $modifier_rss_link . '?' . &encode($page); my $description = ''; if ($search_target eq 'title') { my $result = &match_text($page, $opt, @search_words); $description = &escape(&get_subjectline($page)) if($result); } elsif ($search_target eq 'page') { my ($result, $text) = &match_text($page."\n".$database{$page}, $opt, @search_words); $description = &escape($text) if($result); } next unless ($description); $rss->add_item( title => $escaped_title, link => $link, description => $description ); $counter++; } } print <<"EOD" Content-type: text/xml @{[$rss->as_string]} EOD } # yakty add [search rss] end