March 16, 2004

DBD::Google + Template-Toolkit で Google RSS

[ Perl ]

ちょっと仕事の待ち時間に CPAN 巡り。DBD::Google なんて面白そうなモジュールに出会ってしまったので思わず hack。

DBD::Google は名前からも想像が付く様に、Google Web API を DBI で操作するという熱いモジュールです。真面目に SOAP::LiteNet::Google もいいけど、やはりこういう遊び心があるモジュールの方が楽しいです。でも遊び心といいつつも十分実用的だったりします。

hack のお題は何にしよう...と手元に Template-Toolkit 本があったので DBD::Google と TT を使って何かしようということで、ありがちだけど Google 検索を RSS 化。

#!/usr/local/bin/perl
# Generating RSS feed from Google search with DBD::Google
#
# Naoya Ito <naoya@naoya.dyndns.org>
 
use strict;
use warnings;
use DBD::Google;
use Template;
 
our $GoogleKey = 'your_goolgle_api_key';
our $Query = shift;
 
eval {
    my $dbh = DBI->connect("dbi:Google:", $GoogleKey);
 
    ## calling Google Search via SQL!
    my $sth = $dbh->prepare(qq[
        select html_strip(title), url, html_strip(summary)
        from google where q = '$Query'
    ]);
    $sth->execute;
    my @results;
    while (my $r = $sth->fetchrow_hashref) {
	push @results, $r;
    }
    my $tt = Template->new or die $Template::ERROR;
    my $output;
    $tt->process(\*DATA, { results => \@results  }, \$output)
	or die $tt->Error;
    $sth->finish;
    $dbh->disconnect;
    print $output;
}; if (my $errstr = $@) {
    die $errstr;
}
 
__DATA__
<?xml versoin="1.0" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns="http://purl.org/rss/1.0">
  <channel rdf:about="http://naoya.dyndns.org/googlerss">
  <title>DBD::Google to RSS</title>
  <link>http://naoya.dyndns.org/googlerss</link>
  <description>generating RSS from Google seach with DBD::Google</description>
  <items>
    <rdf:Seq>
[% FOREACH site IN results -%]
      <rdf:li rdf:resource="[% site.url | html %]" />
[% END -%]
    </rdf:Seq>
  </items>
[% FOREACH site IN results -%]
  <item rdf:about="[% site.url | html %]">
    <title>[% site.title | html %]</title>
    <link>[% site.url | html %]</link>
    <description>[% site.summary | html %]...</description>
  </item>
[% END -%]
</rdf:RDF>

わざわざ TT 使わずに、XML::RSS あたりで生成したほうが多分コードは短くすむのだろうけどまあいいじゃありませんか。hack ですから!

最初は Template::Plugin::DBI を使って TT から DBD::Google を使いテンプレート内 SQL で Google Search、という PHP ちっくなコードに仕立てあげようと思っていたのですが Template::Plugin::DBI からは DBD::Google でつなげることができませんでした。残念。やり方間違ってるだけかもしれない。

Posted by naoya at March 16, 2004 03:48 AM | トラックバック (0)  b_entry.gif
トラックバック [0件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/924
コメント [1件]

あ、RDF の link とかはすげ適当です。お気になさらず.. ;)

[1] Posted by: naoya at March 16, 2004 03:55 AM [返信]
コメントする









名前、アドレスを登録しますか?