[Tumblr] OAuthで認証してpostする流れ 【メモ】

よくよく考えたら、Tumblr API使ってpostってしたことなかったのでその辺まとめたメモ。

例によって例外処理とかかなり省略してるのでご利用は計画的に。



1. アプリケーションを登録してconsumer keyとconsumer secretを取得する

アプリケーションの登録はこちらで。

http://www.tumblr.com/oauth/apps


2. OAuthで認証

ユーザーに認証してもらってアクセストークンを取得する

//コールバックURL
$callback = 'http://nplll.com/tumblr_return';
//HTTP_OAuth
$consumer = new HTTP_OAuth_Consumer(CONSUMER_KEY, CONSUMER_SECRET_KEY);
$http_request = new HTTP_Request2();
$http_request->setConfig('ssl_verify_peer', false);
$consumer_request = new HTTP_OAuth_Consumer_Request();
$consumer_request->accept($http_request);
$consumer->accept($consumer_request);
session_start();
//アクセストークンがなければ取得する
if(!$_SESSION['access_token'] || !$_SESSION['access_token_secret']){
//最初にアクセスした場合
if (empty($_GET['oauth_verifier'])) {
//リクエストトークンの発行を依頼
$consumer->getRequestToken('http://www.tumblr.com/oauth/request_token', $callback);
//リクエストトークンを取得
$_SESSION['request_token'] = $consumer->getToken();
$_SESSION['request_token_secret'] = $consumer->getTokenSecret();
$auth_url = $consumer->getAuthorizeUrl('http://www.tumblr.com/oauth/authorize');
//認証ページへ遷移
header("Location: $auth_url");
//認証完了後には、oauth_verifierパラメータを付けてコールバックURLへ返ってくる
} else {
//リクエストトークンをセット
$consumer->setToken($_SESSION['request_token']);
$consumer->setTokenSecret($_SESSION['request_token_secret']);
$consumer->getAccessToken('http://www.tumblr.com/oauth/access_token', $_GET['oauth_verifier']);
//アクセストークンを取得
$_SESSION['access_token'] = $consumer->getToken();
$_SESSION['access_token_secret'] = $consumer->getTokenSecret();
}
}
$consumer->setToken($_SESSION['access_token']);
$consumer->setTokenSecret($_SESSION['access_token_secret']);


3. ユーザー情報を取得する

postするブログを決めるため。今回はデフォルトに設定されてるブログにpostすることにする。

$response = $consumer->sendRequest('http://api.tumblr.com/v2/user/info', array(), 'GET');
$user = json_decode($response->getBody())->response->user;


4. postする

postするときに送信するパラメータは、postのタイプによって違う。タイプはテキストとか引用とか写真とかビデオとかのこと。詳しくはこちらを参考に。

posting | API | Tumblr

こちらは写真を投稿するときの例。

//デフォルトのブログを取得
foreach($user->blogs as $userBlog) {
if($userBlog->primary) {
$blogName = $userBlog->name;
break;
}
}
//リクエスト
$consumer->sendRequest(
'http://api.tumblr.com/v2/blog/' . $blogName . '.tumblr.com/post',
array(
'type' => 'photo', //text, photo, quote, link, chat, audio, video
'state' => 'draft', //published, draft, queue, private
'caption' => 'test', //コメント
'link' => 'http://nplll.com', //画像をクリックしたときのリンク先
'source' => 'http://static.nplll.com/images/author.jpg' //画像
)
);

captionはHTML可。タグはカンマ区切りでtagsに。



以上、簡単だけどメモ書き。



参考サイト

omnioo lab. record | オムニオラボ WEB, LAMP, jQuery, ITのお話
OAuth経由でTumblrの情報を取得・投稿するPHPスクリプト|A Day In The Boy’s Life



ちなみに何を作ろうとしているかというと

写真メインのRSSを読み込んで、ボタン1個で「タグと本文を自動的に入力して」post出来るような仕組み。入力するタグと本文の表示形式が決まっている特殊な場合にしか適用出来ないけど、身の回りにそういうのがいくつかあるので。

tomblooでタグ入力するのすら面倒くさいっていう堕落した動機。