例によって例外処理とかかなり省略してるのでご利用は計画的に。
1. アプリケーションを登録してconsumer keyとconsumer secretを取得する
アプリケーションの登録はこちらで。http://www.tumblr.com/oauth/apps
2. OAuthで認証
ユーザーに認証してもらってアクセストークンを取得する
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//コールバック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することにする。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$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
こちらは写真を投稿するときの例。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//デフォルトのブログを取得 | |
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でタグ入力するのすら面倒くさいっていう堕落した動機。