Perl Hackers Hub

第4回 Twitterから学ぶ,Web APIのキホン(2)

この記事を読むのに必要な時間:およそ 3 分

リクエストURIを構築する

URIエスケープ

いよいよPerlを使ってWeb APIを利用していくわけですが,その前にリクエストURIを作る際の約束事を確認しましょう。

URIの仕様では,ASCIIAmerican Standard Code for Information Interchange文字以外の文字,つまり日本語などはURIで使用できないと定められています。URIで日本語を使いたい場合は,URIエスケープを行う必要があります。

たとえばTwitter Search APIで「おはよう」をキーワードに検索したい場合,

http://search.twitter.com/search.json?q=おはよう

と日本語を直接入れてはいけません。次のようにURIエスケープする必要があります。

http://search.twitter.com/search.json?q=%E3%81%8A%E3%
81%AF%E3%82%88%E3%81%86

Perlでクエリの名前と値の連結や,URIエスケープを行う際には,URIモジュールを使います。

モジュールのインストール

URIモジュールの使い方の説明の前に,モジュールのインストール方法について簡単に説明します。

これからURIモジュールを含めいくつかのモジュールを解説していきますが,モジュールがあなたの環境に入っていない場合があります。そのようなときには次のようなエラーメッセージが出力されます。

Can't locate URI.pm in @INC ...

モジュールのインストールは,CPANシェルもしくは本連載第1回を担当した宮川達彦さんが開発中のApp::cpanminusを使うのが一般的です。

CPANシェルの場合,CPANシェルを起動してから,

cpan > install URI

とすればインストールが行われます。

App::cpanminusでは,コンソールから直接

$ cpanm URI

とすればインストールが行われます。

モジュールをどこの場所にインストールするかはいろいろと議論があるので,各自でWeb上の情報を参考にしてください。ちなみに筆者は普段,cpanmコマンドに--sudoオプションを付けて実行し,root権限で開発マシン全体にモジュールをインストールしちゃっています。

URIモジュールを使う

では,perldocのSYNOPOSIS注3風味にURIモジュールの使い方を説明します。

Twitter Search APIから「おはよう」という検索キーワードの人気ツイートを取得するためのURIを,単純に標準出力するコードは以下です。

use URI;
use utf8;

my $query = 'おはよう';
my $uri =
    URI->new('http://search.twitter.com/search.json');
my $params = {
    q => $query,
    result_type => 'popular',
};
$uri->query_form(%$params);
print "$uri\n";

result_typeはTwitter Search APIのオプションクエリパラメータで,recent(最近のツイート)⁠popular(人気のツイート)⁠mixed(最近と人気の結果どちらも含むツイート)を指定できます。今回はpopularを指定しました。

出力は次のようになります。

$ perl uri.pl
http://search.twitter.com/search.json?result_type=popu
lar&q=%E3%81%8A%E3%81%AF%E3%82%88%E3%81%86

query_formメソッドにクエリの名前と値のペアの組みを持つハッシュを渡すと,URI文字列における「?result_type=popular&q=(略)⁠の部分へと変換をしてくれます。URIエスケープもその際に行ってくれます。

注3)
ライブラリの使い方を端的に表す短いコードのことです。

URI::Escapeモジュール

ちなみに,文字列連結だけでURIを構築するケースなど,単純に文字列をURIエスケープしたいだけの場合は,URI::Escapeモジュールを使うとよいでしょう。

use URI::Escape qw( uri_escape_utf8 );
use utf8;

my $qeury = 'おはよう';
print uri_escape_utf8( $query ) . "\n";

上記では,uri_escape_utf8メソッドをインポートして利用し,utf8フラグの付いた通常の日本語をURIエスケープ文字列へと変換しています。

Web APIにリクエストする

URIモジュールによって作成したURI(正確にはURI文字列やURIオブジェクト)にGETリクエストを行い,レスポンスを受け取ってみましょう。

LWP::UserAgentモジュール

今回はLWP::UserAgentモジュールを使いWeb APIへアクセスしてみます。LWP::UserAgentはWeb APIへのアクセスのみならず,PerlでHTTP通信を行ううえでよく使われるモジュールなので,基本的な使い方は覚えておいたほうがよいでしょう。

著者プロフィール

和田裕介(わだゆうすけ)

(株)ワディット代表取締役,(株)オモロキCTO。未踏ユース「準」スーパークリエーター。

慶応義塾大学政策・メディア研究科にて,メディアデザインを専攻。ACM SIGGRAPH Emerging Technologiesに採択など。修士課程修了後,父親と共に起業。Perl等を使ったシステム開発を行いながら,個人でもWebアプリケーションをいくつか公開している。

ブログは『ゆーすけべー日記』:http://yusukebe.com/

コメント

コメントの記入