JSON形式でデータを返す
最近ではAjaxアプリケーションだけでなく、Web APIのレスポンスとしても直接JSON形式でデータを返す場合が増えてきているので、JSON形式に変換するモジュールも併せて紹介します。
オブジェクトを簡単にJSON化して返す
ここでは、先ほどのCatalyst::View::REST::XMLと同様に、オブジェクトの配列やハッシュデータなどを簡単にJSON化するビューモジュールである、Catalyst::View::JSONを紹介します。
Catalyst::View::JSONは、少々高機能な実装が提供されており、JSONPに対応させるためのCALLBACKメソッドの指定や、JSON形式へのエンコードをカスタマイズする方法なども提供されています。
Catalyst::View::JSONをインストールするには、rootユーザーで次のコマンドを実行します。
# perl -MCPAN -e 'install Catalyst::View::JSON'
Catalyst::View::JSONの例
まずはビューモジュールを作成してみましょう。「PluginSample1/lib/PluginSample1/View/JSON.pm」というファイルを新規作成し、次の内容で保存します。
package PluginSample1::View::JSON; use base qw( Catalyst::View::JSON); 1;
先ほどのXML形式に変換する場合と同様に、ダミー情報をJSON形式に変換してみましょう。ダミーのユーザー情報をStashに登録し「PluginSample1::View::JSON」にforwardするだけです。
sub json :Local {
my ( $self, $c ) = @_;
$c->stash->{user} = $self->users();
$c->forward('View::JSON');
}
このアクションを呼び出して得られるJSON形式のレスポンスデータは次のようになります。
{"user":
[
{"name":"Makoto","age":33},
{"name":"Mayu","age":28},
{"name":"Shin","age":37},
{"name":"Yoshi","age":40}
]
}
Twitterに投稿する
最後に、Web APIを呼び出す例として、Twitterにつぶやきを手軽に投稿できるプラグインを紹介します。
Twitterにつぶやきを手軽に投稿するモジュール
CPANには、TwitterにアクセするためのモジュールとしてNet::Twitterが公開されています。このモジュールは、つぶやきの投稿だけではなく、Twitterで提供されているすべてのAPI実行に対応しています。
CatalystのプラグインとしてはCatalyst::Plugin::Twitterというものがありますが、Basic認証を基本としており、2010年8月31日を持ってBasic認証が廃止されたことから、ここではOAuth認証でNet::Twitterを利用する方法を説明します。
まずはTwitterのデベロッパーサイトからTwitterのAPIを使用するアプリケーションを登録します。
この例では、常に単一のアカウントについてtweetさせるため、アプリケーションの種類として、クライアントアプリケーションを選択しています。ブラウザアプリケーションを選択した場合には、複数のアカウントから使用することが出来るようになります。しかし、そのために一度Twitterの認証URLにリダイレクトしなければならず、正しく認証が行われた後で、アプリケーション側のコールバックURLがアクセストークンを引き渡すために呼び出されることになります。
アプリケーションの登録が終わったら、OAuth認証で必要となる、次の4つの値をメモしておきます。
- Consumer Key
- Consumer secret
- (My) Access Token
- (My) Access Token Secret
それではコードを記述する前に、Net::Twitterモジュールをインストールします。このモジュールをインストールするには、rootユーザで次のコマンドを実行します。
# perl -MCPAN -e 'install Net::Twitter'
環境によっては、インストールエラーが発生するかもしれませんが、その場合には次のようにforceインストールすることで、エラーが発生しても強制的にインストールできます。
# perl -MCPAN -e 'force install Net::Twitter'
Net::Twitterの例
このモジュールを使用するには、アプリケーションモジュールファイルで次のように指定します。YOUR_CONSUMER_KEYには、先ほどメモした値を設定しましょう。
sub tweet :Local {
my ( $self, $c ) = @_;
# consumer_key/consumer_secretを設定
my $nt = Net::Twitter->new(
traits => ['API::REST', 'OAuth'],
consumer_key => YOUR_CONSUMER_KEY,
consumer_secret => YOUR_CONSUMER_SECRET,
);
# access_token/access_token_secretを設定
$nt->access_token(MY_ACCESS_TOKEN);
$nt->access_token_secret(MY_ACCESS_TOKEN)_SECRET);
$nt->update('Tweet from Catalyst application.');
$c->response->body('Tweet!');
}
まとめ
本記事では、Catalystアプリケーション開発時に有効なプラグインや、ハッシュ値などのデータをJSONやXML形式に変換するビューモジュール、そしてTwitterに投稿するプラグインなどを紹介しました。
次回も引き続き、Catalystで有用なプラグインやモジュールを紹介します。
参考資料
- モダンPerl入門(牧 大輔、翔泳社、2009年)
- Catalyst-Manual-5.8004

