takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

Laravel と tumblr.php を使って tumblr の Dashboard を取得する

Laravel 4.2 と tumblr.php (The official PHP client for the Tumblr API) を使って tumblr のダッシュボードを取得したときのメモです。
OAuth 認証も含めた動作確認可能な tumblr.php のサンプルコードが見当たらなかったので自作してみました。

動作環境

Windows7 64bit
XAMPP 1.8.2

tumblr.php のインストール

Laravel をインストールした環境の composer.jsontumblr のパッケージを追加します。

	"require": {
		"laravel/framework": "4.2.*",
		"tumblr/tumblr": "dev-master"
	},

composer update でインストールします。

$ composer update

アプリの登録と consumer key, consumer secret 取得

下記サイトからアプリの登録を行います。
OAuth 認証で使用する consumer key, consumer secret もここで確認できます。
http://www.tumblr.com/oauth/apps

Default callback URL の登録

アプリケーションを登録したら、"Edit your Application" の画面で以下のようにコールバックURLを登録します。
下記のサンプルコードをそのまま動作させるときは "http://****/blog" と指定して下さい。
テストで動作確認するだけであれば、画像のように localhost の URL でも大丈夫です。

ソースコード

tumblr のダッシュボード取得のサンプルコードです。
consumerKey, consumerSecret は自分で取得したものに置き換えて下さい。

app/controllers/BlogController.php

<?php

class BlogController extends BaseController {

	const consumerKey = 'Your Consumer Key';
	const consumerSecret = 'Your Consumer Secret';

	public function getIndex()
	{
		$param = Input::get();
		
		if( array_key_exists('oauth_verifier', $param) )
		{
			$client = new Tumblr\API\Client( self::consumerKey, self::consumerSecret );
			$requestHandler = $client->getRequestHandler();
			$requestHandler->setBaseUrl('https://www.tumblr.com/');

			$client->setToken($param['oauth_token'], Session::get('oauth_token_secret'));

			// get access token
			$resp = $requestHandler->request('POST', 'oauth/access_token', array('oauth_verifier' => $param['oauth_verifier']));
			$out = $result = $resp->body;
			$data = array();
			parse_str($out, $data);

			// tell the user where to go
			$client->setToken($data['oauth_token'], $data['oauth_token_secret']);

			// get dashboard
			$client->getRequestHandler()->setBaseUrl('http://api.tumblr.com');
			dd( $client->getDashboardPosts() );
		}
		else
		{
			// デバッグとして GET パラメータの内容を表示する
			dd($param);
		}
	}

	public function getInfo()
	{
		$client = new Tumblr\API\Client( self::consumerKey, self::consumerSecret );
		$requestHandler = $client->getRequestHandler();
		$requestHandler->setBaseUrl('https://www.tumblr.com/');

		// リクエストトークン要求
		$resp = $requestHandler->request('POST', 'oauth/request_token', array());

		// レスポンスから oauth token を取得
		$out = $result = $resp->body;
		$data = array();
		parse_str($out, $data);

		// コールバック先で使用するため、セッションに保存
		Session::put('oauth_token_secret', $data['oauth_token_secret']);

		// oauth_verifier 要求
		return Redirect::to('https://www.tumblr.com/oauth/authorize?oauth_token='.$data['oauth_token']);
	}

}

app/routes.php に以下を追加します。

Route::controller('blog', 'BlogController');

動作確認

xampp-controller から Apache を起動します。
Webブラウザで http://localhost/blog/info を開くとダッシュボードの内容が表示されます。