PerlでWeb API入門
-
Upload
yusuke-wada -
Category
Technology
-
view
7.111 -
download
1
Transcript of PerlでWeb API入門
概要 • Perl初心者向け • Web APIを学ぶ&&Perlを学ぶ • アンケート/スキルレベルを計る – LWP::* を使ったことがある方
• 形式 – 20分: Web APIの基礎←今ココ – 30分: sugyanがライブコーディング
• 某雑誌の原稿ベース(後述)
Web APIとは? • API = Application Programming Interface – 「やり取り/取り決め」によりインターフェースを定めている
• Web APIは大きなサービスやプラットフォームを外部から利用するためのAPI
Web APIの例 • Twitter API • Google Ajax API • YouTube API • Flickr API • mixiアプリ API • モバゲー API • etc…
イメージ • Twitterで「perl」と検索、つぶやきを取得 – http://search.twitter.com/search.json?q=perl
• GETメソッドでアクセス • JSON形式で情報を取得 • パースする
Twitter Search API • Twitterのつぶやきをキーワードで検索取得 • http://dev.twitter.com/doc/get/search • ドキュメントを読むことは重要!
APIを使う上でのチェックポイント • リクエストURI – http://search.twitter.com/search.json
• サポートするレスポンスフォーマット – JSON/atom
• リクエストメソッド – GET
• クエリパラメータ – q=perl
リクエストURIを構築する • 日本語などASCII文字以外は使えない • URIエスケープ • http://search.twitter.com/search.json?q=
%E3%81%8A%E3%81%AF%E3%82%88%E3%81%86
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";
http://search.twitter.com/search.json? result_type=popular&q=%E3%81%8A%E3%81%AF%E3%82%88%E3%81%86
Web APIにアクセスする • LWP::UserAgentを使用 – Others: LWP::Simple, URI::Fetch
• HTTP::Requestオブジェクトを作成 • メソッド発行 – GET/POST/PUT/DELETE/HEAD
• HTTP::Responseオブジェクトを返却
LWP::UserAgentモジュール
use URI; use LWP::UserAgent;
my $uri = URI‐>new('http://search.twitter.com/search.json?q=perl'); my $ua = LWP::UserAgent‐>new(); my $res = $ua‐>get( $uri ); die $res‐>status_line if $res‐>is_error; print $res‐>content . "\n";
結果をパースする • cpanm JSON -> JSON::XS or JSON::PP • JSONにおける日本語 – \uXXXX というUnicodeベースのascii文字へのエスケープ
– おはよう – \u304a\u306f\u3088\u3046
JSONモジュール use JSON qw( decode_json ); use Encode qw( encode_utf8 );
my $json_text =
'{"user":"yusukebe","message":"\u304a\u306f\u3088\u3046"}'; my $ref = decode_json($json_text); print encode_utf8("$ref‐>{user} : $ref‐>{message}\n");
yusukebe : おはよう
サンプルアプリケーション • 「#yokohamapm」という言葉が含まれたつぶやきを表示するコマンドラインスクリプト
use LWP::UserAgent;
use URI;
use JSON qw(decode_json);
use Encode qw(encode_utf8);
my $query = '#yokohamapm';
my $uri = URI‐>new('http://search.twitter.com/search.json');
my $params = {
q => $query,
result_type => 'recent',
};
$uri‐>query_form(%$params);
my $ua = LWP::UserAgent‐>new;
my $res = $ua‐>get($uri);
die "Error: ". $res‐>status_line if $res‐>is_error;
my $json = $res‐>content;
my $ref = decode_json($json);
for my $tweet ( @{ $ref‐>{results} } ) {
print encode_utf8("\@$tweet‐>{from_user}: $tweet‐>{text}\n");
}
結果
$ perl twitter_search.pl
@mazkeng: 今回もustで拝聴します、明日が楽しみ! #yokohamapm
@hokke_mirin: 明日は、タグ2つですねー。楽しみー#perlcasual #yokohamapm
@yusukebe: このハッシュタグはどうだ! #yokohamapm
WebService::Simple use WebService::Simple;
use Data::Dumper;
my $query = '#yokohamapm';
my $service = WebService::Simple‐>new(
base_url => 'http://search.twitter.com/search.json',
response_parser => 'JSON',
);
my $res = $service‐>get( { q => $query });
my $ref = $res‐>parse_response();
print Dumper $ref;
まとめとして • Web API = 「巨人の肩に立つ」ことができるかもしれない
• 「Standing on the shoulders of giants」- もし私が他の人たちよりも遠くを見ていたとしたら、それは、巨人たちの肩に私が立っていたからだ。- アイザックニュートン