「携帯さーちあしすと」の裏側を公開 - APIを使って遊ぶ1

見た目も機能もショボいと大評判の携帯さーちあしすとだが、実際やってることも別に大したことないので、公開してみる。

「APIを使って遊ぶ」シリーズその1。今回はGoogle SugegstをAPIとして使う。

APIの利用方法についてはもっとえらい人がいっぱい書いているのでそちらを参考にしてもらう。 超簡潔に書くと、サーバにリクエストを投げるとレスポンスが返ってきて、それを整形して表示さす、みたいな流れ。 こちらが大変参考になるので参照されたい。
公開APIを利用したサンプルサイトを作っていくよ

言語はPerl,PHP,Java,Ruby,Pythonなど、データのやりとりもREST,JSONなどがあるわけだが、ここではPerl+REST決め打ちでやる。 他は知らない。

で、早速やったことを書く。

ファイル構成は以下のようなシンプル極まりないものとなっている。

  • keitai-assist.html
  • keitai-assist.cgi

htmlで検索語を投げて、cgiで色々処理すると。
で、htmlで実際に稼働している部分はこれだけ。



<form action="keitai-assist.cgi" method="get" accept-charset="UTF-8">
<input type="text" name="q" size="20" value="">
<input type="submit" value="検索"> ※複数語OK
</form>


少な。formタグで、検索語を「q」という名前で投げているだけ。

で、cgiの方はこんな。 貼ってみると長いな。



#!/usr/bin/perl

use lib '/virtual/ほげほげ/perl/lib/perl5/';
use warnings;
use CGI;
use WebService::Simple;
use Data::Dumper;
use WebService::Google::Suggest;
use Encode;

my $query = CGI->new()->Vars();
my $q = $query->{q};


# 日本語Googleを利用する
$WebService::Google::Suggest::CompleteURL
    = "http://www.google.com/complete/search?hl=ja&js=true&qu=";

my $suggest = WebService::Google::Suggest->new();
my @suggestions = $suggest->complete("$q");



#---------------------------------
# HTML表示部
#---------------------------------

print <<"EOF";
Content-Type: text/html;charset=UTF-8
Status: 200 OK
Content-Language: ja

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>携帯さーちあしすと</title>
</head>
<body bgcolor="#ffffff" TEXT="#333333" LINK="#3333cc">

<!-- タイトル -->
<h2>携帯さーちあしすと</h2>
<!--/タイトル -->
クリックでGoogleでの検索に飛びます。
検索語 = "<a href="http://www.google.co.jp/m?q=$q">$q</a>"

EOF

#q=$q

# Google Suggest結果表示
if (@suggestions){
for my $suggestion (@suggestions) {

#$suggestion->{query}が内容、$suggestion->{results}が件数
print <<"EOF";
<a href="http://www.google.co.jp/m?q=$suggestion->{query}"> $suggestion->{query}</a>
EOF
}

}else{
print "No result."
}
# Google Suggest



print <<"EOF";


</body>
</html>


EOF

exit 0;



あんなシンプルなサイトなのに、陰ではこんなコードがうごめいていたのですね。 じゃ、そういうことで!

じゃなくて、最初からいこうか。



#!/usr/bin/perl

use lib '/virtual/ほげほげ/perl/lib/perl5/';
use warnings;
use CGI;
use WebService::Simple;
use Data::Dumper;
use WebService::Google::Suggest;
use Encode;

  1. perlのパスは適当にサーバに合わせる
  2. use lib...はCPANモジュールをユーザディレクトリにインストールして使いたいからコールしてる。これはXREAでの例なので、使っているサーバに合わせる
  3. WebService::Simple; これがAPIいじくるのに使いやすいCPANモジュール
    ゆーすけべー日記: WebService-Simple-0.09 の使い方
  4. Dumperはデバッグ用に、返ってきたXMLを展開表示するのに使ってる
  5. WebService::Google::Suggestは、Google SuggestをAPI化して使うためのモジュール
    はい。そうです。要はGoogle Suggest呼び出してるだけなんですね。
  6. Encodeは、utf-8フラグが付いている文字をprintしようとするとエラーが出るので、その辺の小細工をするために使う。詳細は以下参照。
    Perl 5.8.x Unicode関連


my $query = CGI->new()->Vars();
my $q = $query->{q};


# 日本語Googleを利用する
$WebService::Google::Suggest::CompleteURL
    = "http://www.google.com/complete/search?hl=ja&js=true&qu=";

my $suggest = WebService::Google::Suggest->new();
my @suggestions = $suggest->complete("$q");

API周りのホントの作業部はこんだけ。この部分はWebService::Google::Suggestの使い方の話なので、以下を参照されたい。 →WebService::Google::Suggest - CPAN MEMO

あとはHTML表示部だが、最初の方はどうでもいいのでキモのところだけ。



# Google Suggest結果表示
if (@suggestions){
for my $suggestion (@suggestions) {

print <<"EOF";
<a href="http://www.google.co.jp/m?q=$suggestion->{query}"> $suggestion->{query}</a>
EOF
}

}else{
print "No result."
}
# Google Suggest

$suggestion->{query}が内容、$suggestion->{results}が件数。 これらをGoogle先生への検索結果へのaタグに組み込んで一丁上がりと。

ああ長かった。
そしてニーズがあるかは例によって不明。

そんじゃ!