PENTAX K-7 & smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM – 2009/10/25
F2.8 1/40″ ISO100 Av Center-weighted WB:CTE JPEG/Bright/現像:K-7
  • 06:25:48 おはようございます #
  • 06:29:48 @kawatitaro おはようございます! in reply to kawatitaro #
  • 06:30:09 @latproject おはようございます! in reply to latproject #
  • 06:50:46 @nubobo おはようございます! in reply to nubobo #
  • 08:12:27 ほほぅ~。登録してみる RT @latproject: 自分もさっき登録しました~ RT @nubobo: 登録してみた。生まれ年でなく年度なんですね。 RT @adtr0129: 同級ったー – Twitterの同級生を探しちゃおう http://bit.ly/2bBgMc #
  • 12:37:26 SDカードが入ってないだとっ!?
    orz #
  • 13:17:14 . @tw_bbsp やはり、やりますか!自分は財布に予備を仕込んで対策してますw in reply to tw_bbsp #
  • 13:29:45 ラーメンなう #
  • 15:44:23 Flickr : 柿 Persimmon http://flic.kr/p/7badj7 #
  • 16:19:40 Flickr : 燈台躑躅 Colored leaves http://flic.kr/p/7bJR9B #
  • 16:38:54 なんだか冷えてきた。 #
  • 16:44:14 そろそろ、カボチャアイコン変えないとw #
  • 17:07:52 自分はISO上げっぱなしとか結構やりますw RT @osam_z: がくっ~、露出が-2になってた。ショック #
  • 17:34:50 @JA5FNX やはりネット上では、どこの誰か分からない状態でコミュニケーションしたい人が多いからじゃないでしょうか。かく言う私も7M1の若輩ですw in reply to JA5FNX #
  • 18:44:01 @JA5FNX 発言する場所とか内容によっては、実名の方が良い場合は多々あると思いますよね。自分の場合、Twitterで別アカウントでなら名前もコールも晒してしまって別に良いとは思ってます。 in reply to JA5FNX #
  • 22:14:29 眠くなってきたからコーヒー飲む。効かないけどw #

Powered by Twitter Tools

  • 08:17:54 おはようございます #
  • 13:52:09 カツ丼なう #
  • 13:54:18 お、リストが使えるようにな #
  • 13:54:53 途中で送信してしまった。。 #
  • 14:42:50 ブロック組替えてカスタマイズできたらすごいw RT @fdscao: いやーかわいいー!このピンク! RT @lonestar_texas: レゴデジカメ!キタ━━━━ッ!ヤバい!これはかわいいぞ!(っ´н`c)キュキューン! http://bit.ly/YRlCb #
  • 23:10:32 最近どれがどんな特徴の機種なのかわからなくなりますたw RT @nubobo: 中判をα1000で。。w RT @waviaei @nubobo 900,850,750,700,550,500,350,300,230,200…わけ分からんくなってきますね。 #
  • 23:31:00 うどん食いたくなってきたー #
  • 23:34:18 釜揚げがいいな、釜揚げうどん。寒いし。 #

Powered by Twitter Tools

  • 00:24:08 気がつけば積読本が50冊くらいたまってるw 主にラノベ。 #
  • 16:01:32 インフルエンザの包囲網が迫ってきたぜ #

Powered by Twitter Tools

Powered by Twitter Tools

いよいよAPIを叩いてみます。

# ■なにかつぶやいてみる例
# このソースはかなり簡略化してますので、自分のソースに合った改変は必須かと思います。
# statuses/updateを使用して、結果をXMLで受け取る例です。

use LWP::UserAgent;
use Encode;
use Net::OAuth;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;

# 前回取得したアクセストークンとシークレット
my $access_token = 'アクセストークン';
my $access_secret = 'トークンシークレット';

# 各APIメソッド毎にURLとリクエストメソッドが異なるので注意
my $API_Method_url = 'https://twitter.com/statuses/update.xml';
my $request_method = 'POST'; 

# なにかつぶやく
my $message = 'PENTAX K-7は良いカメラだぜぃ';

# OAuthリクエスト
my $request = Net::OAuth->request("protected resource")->new(
        consumer_key 	=> 'Twitterから取得したキー',
        consumer_secret => 'Twitterから取得しシークレット',
        request_url => $API_Method_url,
        request_method => $request_method,
        signature_method => 'HMAC-SHA1',
        timestamp => time,
        nonce => 'ランダム文字列', # 毎回変更
        token => $access_token,
        token_secret => $access_secret,
        extra_params => { status => decode_utf8($message) },
   );

# extra_paramsに各APIメソッドのパラメータ値のハッシュをセットする(今回は"status")
# decode_utf8についてはNet::OAuthのドキュメント(下記URL)を見てください。
# http://search.cpan.org/~kgrennan/Net-OAuth-0.19/lib/Net/OAuth.pm#I18N

$request->sign;

my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('User-Agent' => $ClientUA_name);
my $http_req = HTTP::Request->new($request_method, $API_Method_url, $http_hdr, $request->to_post_body);
my $http_res = $ua->request($http_req);

# 結果のXML
my $res_xml = $http_res->content;

これでつぶやくはず。。。

あ、ソースは全部utf8で書いてます。
あ、エラー処理とか全力で省いてます。
あ、今回色々試したい事もあったので、Net::OAuthにしましたですが、Net::Twitterとか使ったほうが、以外に簡単かもしれませんよ?w

2010/02/06追記: Syntax-Hilighter入れてみたw

さて、先の記事でリクエストトークンを取得しましたが、このままでは使えない訳で、このトークン値を使ってTwitterにリダイレクトしてユーザの承認を行います。
この辺の処理はブラウザ/デスクトップベースのクライアントかによっても違ってきますし、Botのようなクライアントなら自分で承認すればOKですが、他のユーザが使う場合なら各ユーザに承認してもらう必要もあり、各トークンの管理等も含めて複雑になって行きます。

今回はbotがつぶやく仕様、これです。
botがつぶやくには、つぶやくTwitterアカウントでログインして、アプリの承認を自分で行います。

# 前回のソースから直接承認画面にリダイレクトする場合。
my $authorize_url = 'http://twitter.com/oauth/authorize';
my $request_token = '[取得したリクエストトークン]';
print "Location: ".$authorize_url."?oauth_token=".$request_token."\n\n";

リダイレクトすると、Twitteのアプリ承認画面が開きます。
この画面で許可を選択すれば、コールバックURLへリダイレクトされます。
※デスクトップクライアントの場合は、ここで暗証番号らしき数字が表示されるみたいです。それは、またの機会に確認してみます。

コールバックURLにリダイレクトされると同時に、承認済リクエストトークンとヴェリファイア値がPOSTされるので、適当な方法でこのPOST値を拾います。簡単な方法だとCGIモジュールとか。。。
で、今度はこの各値を使って、アクセストークンとシークレットを取得します。

# アクセストークンとシークレットの取得 --------------------
# このソースは簡略化してますので、自分のソースに合った改変は必須かと思います。

use CGI;
use LWP::UserAgent;
use Net::OAuth;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;

my $q = CGI->new;
my $access_token = $q->param('oauth_token'); #承認済みトークン
my $access_verifier = $q->param('oauth_verifier'); #ヴェリファイア

my $access_token_url = 'http://twitter.com/oauth/access_token';
my $request_method = 'POST'; #アクセストークン取得はpostなので注意

my $request = Net::OAuth->request("access token")->new(
    consumer_key => 'Twitterから取得したキー',
    consumer_secret => 'Twitterから取得しシークレット',
    request_url => $access_token_url,
    request_method => $request_method,
    signature_method => 'HMAC-SHA1',
    timestamp => time,
    nonce => 'ランダム文字列', #毎回変更
    callback => '',
    token => $access_token,
    verifier => $access_verifier,
    token_secret => '',
    );

my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('User-Agent' => $ClientUA_name);
my $http_req = HTTP::Request->new($request_method, $access_token_url, $http_hdr, $request->to_post_body);
my $http_res = $ua->request($http_req);

my $AccessTokenStr = $http_res->content;

こんな感じです。$AccessTokenStrは前回同様に分解して下さい。

2010/02/06追記: Syntax-Hilighter入れてみたw

まず、Twitterのアプリ登録ページで各種設定を行い、Consumer KeyとConsumer Secretを取得します。とりあえず後でも変更は可能なので、アプリ名とか決まって無くても、間に合わせで設定しても大丈夫。
ただ、Application Typeの設定によって、承認済リクエストトークンとヴェリファイアの取得方法が変わって来るので、ココはきちんと設定しておきましょう。今回の例はブラウザベースで話を進めます。

で、コンシューマキーとシークレットを取得したら、その各値を使ってRequestTokenを取得します。

# ■リクエストトークンの取得
# このソースは簡略化してますので、自分のソースに合った改変は必須かと思います。
use LWP::UserAgent;
use Net::OAuth;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;

my $request_token_url = 'http://twitter.com/oauth/request_token';
my $request_method = 'GET';

my $request = Net::OAuth->request("request token")->new(
    consumer_key 	=> 'Twitterから取得したキー',
    consumer_secret => 'Twitterから取得しシークレット',
    request_url => $request_token_url,
    request_method => $request_method,
    signature_method => 'HMAC-SHA1',
    timestamp => time,
    nonce => 'ランダム文字列', #要毎回変更
    callback => 'http://yoursite', #アプリ登録時のコールバックアドレス
    );
# nonceとtimestampについてはhttp://oauth.net/core/1.0/#nonce を参照

$request->sign;

my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('Authorization' => $request->to_authorization_header);
my $http_req = HTTP::Request->new($request_method, $request_token_url, $http_hdr);
my $http_res = $ua->request($http_req);

my $RequestTokenStr = $http_res->content;

以上w
$RequestTokenStrには
「oauth_token=[未承認RequestToken値]&oauth_token_secret=[ReuestTokenSecret値]&oauth_callback_confirmed=true」な感じで値が返りますので、Net::OAuth->responseや、その他お好みの方法で各値に分解します。

2010/02/06追記: Syntax-Hilighter入れてみたw

TwitterのOAuthについて、大まかな流れとしては、
①Twitterでアプリケーション登録を行う
②①で取得したコンシューマキーとシークレットを使って、未承認リクエストトークンとシークレットを取得
③未承認リクエストトークンを使ってTwitterにリダイレクト
④アプリケーションの承認(ユーザ側)
⑤コールバック用スクリプトで、承認済みリクエストトークンとベリファイアを受け取る
⑥リクエストトークンとベリファイアを使ってアクセストークンとシークレットを取得する
⑦アクセストークンとシークレットでAPIを叩く

ざっとこんな感じ。。。w
今の所アクセストークンの有効期限は無いみたいなので、一度取得したらそのまま使い続けられるようです。

使ったOAuthの為のモジュールはNet::OAuthで、OAuthのヘッダやPOST値を生成してLWP::UserAgentでGET/POSTします。

葉っぱ多目のこのブログですから、新緑と紅葉の時期は
もちろん葉っぱばかりになるでしょうw

PENTAX K-7 & smc PENTAX-DA* 50-135mm F2.8 ED [IF] SDM – 2009/10/25
FL115mm F5.6 SS1/13″ ISO100/21° WB:Auto JPEG/Natural

Environment

GreenBlog green-web-hosting

twitter

Posting tweet...

Powered by Twitter Tools

My Favorite

定期購読はFujisanが便利

FujisanのWebサイトへ