シングスブログ

中小企業のマーケティングやブランディングのコンサルティング。事業運営、組織運営のPDCA改善やホームページの制作、ウェブサイト改善などITネット活用を中心にサービスを提供しています。

メニュー

Perl で OAuth / モジュール OAuth::Lite::Consumer インストール

Twitter や Facebook などウェブサービスの連携には欠かせなくなりつつある認証システム OAuth (オー オース)。アプリ開発者としてマスターしておきたい認証システムのひとつ。今回モジュール OAuth::Lite::Consumer をインストールして、Perlで OAuth 認証できる環境をつくってみた。Twitter で認証してアカウント情報を表示するサンプルプログラムも。

OAuth::Lite::Consumer インストール

ふつうに cpanm でインストールできず。パッケージ openssl-devel が必要。

cpanm OAuth::Lite::Consumer
...
Checking if you have Crypt::OpenSSL::RSA 0.25 ... No
Checking if you have Crypt::OpenSSL::Random 0.04 ... No
...

エラーで止まってしまう。パッケージがないので、perlモジュールの依存関係を解決できず。

まずは、パッケージ openssl-devel をインストール。

yum install openssl-devel

インストール後。

cpanm OAuth::Lite::Consumer

complete!!

サンプルプログラム

Twitter のアカウントでログイン認証。アクセストークンを取得して Twitter のアカウント情報を表示するサンプルプログラム。サンプルを動かすには Twitter にアプリケーションを登録して、ConsumerKey と ConsumerSecret を取得する必要があります。 登録は dev.twitter.com から。

流れとメソッド

  1. リクエストトークンを取得する - get_request_token()
  2. リクエストトークンを元に認証 - url_to_authorize()
  3. Twitterログイン画面でアプリ認証
  4. アプリ認証ボタンを押すと callback_url に転送 (リダイレクト)
  5. アクセストークンの取得 - get_access_token()
  6. アクセストークンを元に認証が必要なリクエスト (GET account/verify_credentials) を発行、今回Twitterアカウント情報を表示 - gen_oauth_request()
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use CGI;
use OAuth::Lite::Consumer;
use LWP::UserAgent;
use JSON;
my $ConsumerKey = 'xxxxxxx';
my $ConsumerSecret = 'xxxxxxxx';
my $callback_url = 'xxxxxxxx';
my $consumer = OAuth::Lite::Consumer->new(
consumer_key    => $ConsumerKey,
consumer_secret => $ConsumerSecret,
site => "http://twitter.com/",
request_token_path => "https://api.twitter.com/oauth/request_token",
access_token_path => "https://api.twitter.com/oauth/access_token",
authorize_path => "https://api.twitter.com/oauth/authorize",
callback_url => $callback_url,
);
my $query = CGI->new;
if ($query->param('oauth_token') && $query->param('oauth_verifier')) {
my $access_token = $consumer->get_access_token(
token => $query->param('oauth_token'),
verifier => $query->param('oauth_verifier'),
);
my $req = $consumer->gen_oauth_request(
method => 'GET',
url => 'http://api.twitter.com/1/account/verify_credentials.json',
token => $access_token,
);
my $ua = new LWP::UserAgent();
my $res = $ua->request($req);
die $res->status_line if ! $res->is_success;
my $account = decode_json($res->content);
print "Content-type: text/html;charset=UTF-8\n\n";
print "<img src='$account->{profile_image_url}' />";
print "<p>ID : $account->{id}</p>";
print "<p>name : $account->{name}</p>";
print "<p>screen_name : $account->{screen_name}</p>";
print "<p>description : $account->{description}</p>";
exit;
}
else {
my $request_token = $consumer->get_request_token();
my $uri = $consumer->url_to_authorize(
token => $request_token,
);
print $query->redirect($uri);
}
exit;

関連サイト

カテゴリー : Perl コメント : 0 件

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です