Tumblr APIでwebサービスを作りたい全ての人に向けて書きました

Tumblr APIでwebサービスを作りたい全ての人に向けて書きました

ブログ、メディアミックスとして多くの人、企業に愛されているTumblr。今回は、この「Tumblr APIの使い方」をまとめて、日本語マニュアルを作ってみました。TumblrのAPIで作ったwebサービスって、なかなか見かけませんが、このAPIの豊富な機能を利用すれば、何か面白いものが作れるんじゃないでしょうか?

「APIがよく分からない…」という方でも、「動く面白さ」を体験してもらえるよう、コピペで使える簡単なサンプルコードを用意しています。読み進めながら一緒に実行すれば、必ず動かせるはずです。ぜひ、この機会にTumblrのAPIで何か始めてみてはいかがでしょうか!?

アプリケーションの登録

TumblrのAPIを利用するために、まずは「アプリケーションの登録」を行なう必要があります。それによって、APIの利用に必要なコンシューマーキー、シークレットキーを取得しましょう。

アカウントを取得する

Tumblrのアカウントを取得する
Tumblrのアカウントを取得する

アプリケーションを登録するには、Tumblrのユーザーアカウントが必要です。まだ持っていない方は、下記のページから取得して下さい。ブログなど既に持っている方は、そのIDをそのまま利用できます!

アプリケーションを登録する

アカウントを取得したら、早速アプリケーションを登録しちゃいましょう。下記のページにアクセスして下さい。まだの場合は、ログイン画面に移動するので、Tumblrのアカウントでログインして下さいね!

Applications

Manage Your Apps
Manage Your Apps

「Applications」の画面に移動しました。ここは登録したアプリケーションを管理するターミナルとなるページですのでブックマークしておきましょう。アプリの一覧が表示されるはずですが、1件も登録していないので、まだ何もありません。「+アプリを登録する」をクリックして、アプリの登録を始めましょう!

Register your application

アプリの情報を登録する
アプリの情報を登録する

アプリの情報をフォームに入力します。今の段階では、APIのテスト用に利用するだけなので、上記サンプルのように、大まかな内容でかまいません。1点だけ、「Default callback URL」には、後ほど「アプリ認証」を行なうために作成するPHPプログラムの設置先となるURLを入力して下さい。問題がなければ「Register」というボタンをクリックします。

アプリキーを確認する

Consumer KeyとSecret Key
Consumer KeyとSecret Key

登録が完了すると、アプリ一覧の画面に戻ります。登録したアプリが一覧に加わっているのを確認できると思います。アプリ名の下に小さく表示されている「OAuth Consumer Key」と、さらにその下の「Show secret key」をクリックすると表示される「Secret Key」が目的の2つのキーです。誰にも知られないように管理(メモ)して下さい。

OAuth認証をする

前章ではアプリ登録を通して、APIの利用に必要なコンシューマーキー、シークレットキーを取得しました。続いて、ユーザーのデータを読み込んだり、書き込んだりするために必要な「アクセストークン」「アクセストークンシークレット」を取得しましょう!これらを取得するには、アプリ認証を行なう必要があります。

OAuth認証の仕組み

Tumblrのアプリ認証に関しては、下記ページの公式ドキュメントをご参考下さい。

Tumblrのアプリ認証は、OAuth1.0という規格を採用しています。Twitterやはてなと同じ形式です。これに関しては、既に、より簡易なOAuth2.0が登場するなどしていて、これから増えていくものでもないので、厳密に学ぶ必要性は低いと思います。興味のある方は2つ目のリンクをご参考下さい。

サンプルプログラム

OAuth1.0認証を利用して、Tumblrでアプリ認証を行なうためのサンプルプログラムを紹介します。

OAuth1.0認証を通したリクエストをするための関数

まず、下記はOAuth1.0認証方式でAPIリクエストを行なうための関数です。この2つの関数をいつでも読み込めるように、PHPプログラム内に配置しておいて下さい。$consumer_key$secret_key$callback_urlをそれぞれ設定して下さい。$callback_urlはアプリ登録の際に設定した「Default callback URL」と一致させる必要があります!

PHP

<?php

// OAuthリクエスト用の関数
function tumblr_oauth( $request_url='' , $method='GET' , $params_b=array() , $response_header=0 )
{
	// 設定項目
	$consumer_key = '' ;																							// コンシューマーキー
	$secret_key = '' ;	 																			// コンシューマーシークレット
	$callback_url = ( !isset($_SERVER['HTTPS']) || empty($_SERVER['HTTPS']) ? 'http://' : 'https://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ;		// このプログラムを設置するURL

	// リクエスト用のパラメータ
	$params_a = array
	(
		'oauth_callback' => $callback_url ,
		'oauth_consumer_key' => $consumer_key ,
		'oauth_nonce' => md5( microtime() ) ,
		'oauth_signature_method' => 'HMAC-SHA1' ,
		'oauth_timestamp' => time() ,
		'oauth_version' => '1.0' ,
	);

	// アクセストークンなど取得時と、データ取得時での差異をちょこちょこと調整する
	if( isset( $params_b['oauth_token'] ) )
	{
		$params_a['oauth_token'] = $params_b['oauth_token'] ;
		unset( $params_b['oauth_token'] , $params_a['oauth_callback'] ) ;
	}

	if( isset( $params_b['oauth_token_secret'] ) )
	{
		$oauth_token_secret = $params_b['oauth_token_secret'] ;
		unset( $params_b['oauth_token_secret'] ) ;
	}
	else
	{
		$oauth_token_secret = '' ;
	}

	if( isset($params_b['oauth_verifier']) )
	{
		$params_a['oauth_verifier'] = $params_b['oauth_verifier'] ;
		unset( $params_b['oauth_verifier'] ) ;
	}

	// リクエストボディの完成
	$request_body = http_build_query( $params_b ) ;

	// キーを作成する
	$signature_key = rawurlencode( $secret_key ) . '&' . rawurlencode( $oauth_token_secret ) ;

	// [$params_a]と[$params_b]を署名作成のため合体
	$params_c = array_merge( $params_a , $params_b ) ;

	// [$params_c]をアルファベット順に並び替える
	ksort( $params_c ) ;

	// 配列[$params_c]を[キー=値&キー=値...]の文字列に変換
	$signature_params = str_replace( array( '+' , '%7E' ) , array( '%20' , '~' ) , http_build_query( $params_c , '' , '&' ) ) ;

	// リクエストメソッド、リクエストURL、パラメータを、URLエンコードしてから[&]で繋ぎ、データを作成する
	$signature_data = rawurlencode( $method ) . '&' . rawurlencode( $request_url ) . '&' . rawurlencode( $signature_params ) ;

	// キー[$signature_key]とデータ[$signature_data]をHMAC-SHA1方式のハッシュ値に変換し、base64エンコードして、署名を作成する
	$signature = base64_encode( hash_hmac( 'sha1' , $signature_data , $signature_key , true ) ) ;

	// [$params_a]に署名を追加する
	$params_a['oauth_signature'] = $signature ;

	// ヘッダーを作成する
	$header_params = http_build_query( $params_a , '' , ',' ) ;

	// GETの場合、[$params_b]をリクエストURLの末尾に付ける
	if( $params_b && $method=='GET' )
	{
		$request_url .= '?' . http_build_query( $params_b , '' , '&' ) ;
	}

	// コンテキストを用意
	$context = array(
		'http' => array(
			'method' => $method ,
			'header' => array(
				'Authorization: OAuth ' . $header_params ,
			),
		)
	) ;

	// POSTメソッドの場合、コンテキストにリクエストボディを加える
	if( $request_body && $method != 'GET' )
	{
		$context['http']['content'] = $request_body ;
	}

	// CURLでリクエスト
	$curl = curl_init() ;

	// オプションのセット
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
	curl_setopt( $curl , CURLOPT_CUSTOMREQUEST , $method ) ;
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;								// 証明書の検証を行わない
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;								// curl_execの結果を文字列で返す
	curl_setopt( $curl , CURLOPT_HTTPHEADER , $context['http']['header'] ) ;			// ヘッダー
	if( isset($context['http']['content']) && !empty($context['http']['content']) )		// ボディ (POST時)
	{
		curl_setopt( $curl , CURLOPT_POSTFIELDS , $context['http']['content'] ) ;
	}
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;										// タイムアウトの秒数

	// 実行
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;

	// 終了
	curl_close( $curl ) ;

	// 取得したデータ
	$response = substr( $res1, $res2['header_size'] ) ;									// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;								// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// 取得したデータを返却
	return ( !$response_header ) ? $response : array( $response , $header ) ;

}

// GETクエリ形式の文字列を配列に変換する関数
function get_query( $data = '' )
{
	// 文字列を[&]で区切って配列に変換する
	$ary = explode( '&' , $data ) ;

	// [&]が含まれていない場合は終了
	if( 2 > count( $ary ) )
	{
		return false ;
	}

	// 文字列を配列に整形する
	foreach( $ary as $items )
	{
		$item = explode( '=' , $items ) ;
		$query[ $item[0] ] = $item[1] ;
	}

	// 返却
	return $query ;
}

アプリ認証を行なうためのプログラム

前項で紹介した関数を利用して、アプリ認証を行なうためのサンプルプログラムが、下記です。これを、アプリ登録の時に「Default callback URL」に設定したのと同じPHPファイル名で保存して下さい。くどいのですが、先ほど紹介した2つの関数を読み込めるように、同じファイル内にコピーするなり、別ファイルにしてrequireで読み込むなりしておいて下さい。OAuth認証を体験したい人は、サンプルデモを起動して下さい。このアプリケーションはデモ用なので、あなたの操作なしで、データにアクセスすることはありません。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// セッションスタート
	session_start() ;

	// HTML用
	$html = '' ;

	// Tumblrでの認証が終了してリダイレクト時、アクセストークンを取得
	if( isset($_GET['oauth_token']) && !empty($_GET['oauth_token']) && is_string($_GET['oauth_token']) && isset($_GET['oauth_verifier']) && !empty($_GET['oauth_verifier']) && is_string($_GET['oauth_verifier']) && isset($_SESSION['oauth_token_secret']) && !empty($_SESSION['oauth_token_secret']) && is_string($_SESSION['oauth_token_secret']) )
	{
		// アクセストークンをリクエストする
		$data = tumblr_oauth( 'http://www.tumblr.com/oauth/access_token' , 'POST' , array( 'oauth_token' => $_GET['oauth_token'] , 'oauth_token_secret' => $_SESSION['oauth_token_secret'] , 'oauth_verifier' => $_GET['oauth_verifier']) ) ;

		// 配列に変換
		$query = get_query( $data ) ;

		// セッション終了
		$_SESSION = array() ;
		session_destroy() ;

		// エラー判定
		if( !$query )
		{
			$html .= '<p>アクセストークンの取得に失敗しました…。もう一度、認証をするには、<a href="' . explode( '?' , $_SERVER['REQUEST_URI'] )[0] . '">こちら</a>をクリックして下さい。</p>' ;
		}
		else
		{
			// 情報の整理
			$oauth_token = rawurldecode( $query["oauth_token"] ) ;
			$oauth_token_secret = rawurldecode( $query['oauth_token_secret'] ) ;

			// 出力する
			$html .=  '<h2>実行結果</h2>' ;
			$html .=  '<dl>' ;
			$html .=  	'<dt>アクセストークン</dt>' ;
			$html .=  		'<dd>' . $oauth_token . '</dd>' ;
			$html .=  	'<dt>アクセストークンシークレット</dt>' ;
			$html .=  		'<dd>' . $oauth_token_secret . '</dd>' ;
			$html .=  '</dl>' ;
		}

		// 取得したデータ
		$html .= '<h2>取得したデータ</h2>' ;
		$html .= '<p>下記のデータを取得できました。</p>' ;
		$html .= 	'<h3>JSON</h3>' ;
		$html .= 	'<p><textarea rows="8">' . $data . '</textarea></p>' ;

		// アプリケーション連携の解除
		$html .= '<h2>アプリケーション連携の解除</h2>' ;
		$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
		$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;
	}

	// 初回アクセス時、リクエストトークンを取得して、Tumblrの認証画面にリダイレクトする
	else
	{
		// リクエストトークンを取得する
		$data = tumblr_oauth( 'http://www.tumblr.com/oauth/request_token' , 'POST' ) ;

		// 取得した文字列を変換
		if( !$query = get_query( $data ) )
		{
			$html .= '<p>リクエストトークンの取得に失敗しました…。もしかしたら「コンシューマーキー」「シークレットキー」の設定が違っているかもしれません…。</p>' ;
		}
		else
		{
			// セッションに保存
			session_regenerate_id( true ) ;
			$_SESSION['oauth_token_secret'] = rawurldecode( $query['oauth_token_secret'] ) ;

			// 認証画面へリダイレクト
			header( 'Location: http://www.tumblr.com/oauth/authorize?oauth_token=' . $query['oauth_token'] ) ;
		}
	}

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

OAuth認証の流れ

サンプルプログラムを起動した際のアプリ認証の流れを紹介します。正常に動いているかの確認にご利用下さい。一緒に進んでいきましょう。

連携を許可するかの確認画面
連携を許可するかの確認画面

まず、上記のように、アプリがユーザーのデータにアクセスしてもいいか確認する画面が現れます。アプリ登録の際に設定したアプリ名やアイコンはここで、ユーザーに公開されます。問題がなければ、ユーザーはここで「許可」をクリックします。

アクセストークン、アクセストークンシークレットの発行

許可をすると、発行された「アクセストークン」「アクセストークンシークレット」がブラウザに出力されます。今回はAPIのテストを行なうのが目的なので、ブラウザに出力していますが、不特定多数のユーザー向けにwebサービスを制作する場合は、この「アクセストークン」「アクセストークンシークレット」をデータベースに保存するなどのシステム作りも必要になってきますねー。

ライブラリの使い方

サンプルで紹介した関数、tumblr_oauth()は、Tumblrの各APIで「OAuth1.0認証を通したリクエスト」を行なうのに利用できます。次のように引数を指定して関数を呼び出して下さい。なお、パラメータには必ず、oauth_token(アクセストークン)とoauth_token_secret(アクセストークンシークレット)を加えて下さいね。

PHP

// リクエストURL
$request_url = 'http://example.com/endpoint' ;

// リクエストメソッド
$request_method = 'POST' ;

// パラメータ
$params = array(
	'oauth_token' => '...' ,
	'oauth_token_secret' => '...' ,
	'hogehoge' => '...' ,
	'arekore' => '...' ,
) ;

// [$json]にリクエストの返り値(JSON)が代入される
$json = tumblr_oauth( 
	$request_url ,		// 第1引数 リクエストURL
	$request_method ,	// 第2引数 リクエストメソッド
	$params				// 第3引数 パラメータ(連想配列)
) ;

// 第4引数に[1]を指定すると、返り値とレスポンスヘッダーをセット(配列)で取得できる
list( $json , $response_header ) = tumblr_oauth( 
	$request_url ,		// 第1引数 リクエストURL
	$request_method ,	// 第2引数 リクエストメソッド
	$params ,			// 第3引数 パラメータ(連想配列)
	1					// 第4引数 レスポンスヘッダーを取得するフラグ
) ;

ユーザーデータの取得

TumblrのAPIは種類が多岐に渡っていて、とても全てを紹介できる量ではないのですが…、この章からは少しずつ、APIの使い方を紹介していきます。まずは、ユーザーデータを取得してみましょう!ユーザーデータの取得についての公式ドキュメントは下記ページをご覧下さい。

ユーザーのプロフィール

まずはユーザープロフィールを取得してみます。プロフィールデータを取得するためには、下記URLに、GETメソッドでリクエストを送ります。OAuth認証を通す必要があるので、前章で紹介したtumblr_oauth()を利用することになります。指定するオプションパラメータはありません。

GET https://api.tumblr.com/v2/user/info

取得できるJSON

ユーザーデータAPIでは下記のJSONデータを取得できます。Tumblrは1ユーザーが複数のブログを所有することができます。blogs内に、所有している各ブログのデータが配列形式で格納されています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"user":{"name":"arayutw","likes":5,"following":5,"default_post_format":"html","blogs":[{"title":"\u3042\u3089\u3086 on Tumblr","name":"arayutw","posts":15,"url":"http:\/\/arayutw.tumblr.com\/","updated":1404781345,"description":"","is_nsfw":false,"ask":true,"ask_page_title":"Ask me anything","ask_anon":true,"submission_page_title":"Submit","can_submit":true,"followed":false,"can_send_fan_mail":true,"is_blocked_from_primary":false,"share_likes":true,"likes":5,"twitter_enabled":true,"twitter_send":true,"facebook_opengraph_enabled":"N","tweet":"auto","facebook":"N","followers":2,"primary":true,"admin":true,"messages":2,"queue":0,"drafts":2,"type":"public","subscribed":false,"can_subscribe":false},{"title":"Syncer on Tumblr","name":"syncerjp","posts":0,"url":"http:\/\/syncerjp.tumblr.com\/","updated":0,"description":"","is_nsfw":false,"ask":false,"ask_page_title":"Ask me anything","ask_anon":false,"followed":false,"can_send_fan_mail":false,"is_blocked_from_primary":false,"share_likes":false,"twitter_enabled":false,"twitter_send":false,"facebook_opengraph_enabled":"N","tweet":"N","facebook":"N","followers":0,"primary":false,"admin":true,"messages":0,"queue":0,"drafts":0,"type":"public","subscribed":false,"can_subscribe":false}]}}}

各プロパティの説明

status
ステータスコード。リクエストに成功している場合は200
name
ユーザーID。
likes
スキをした回数。
following
フォロー数。
blogs->name
ブログID。
url
ブログURL。
followers
ブログのフォロワー数。
primary
主ブログか?
title
ブログ名。
description
ブログ説明文。
updated
ブログの最終更新時刻。
posts
投稿数(リブログ含む)。
messages
メッセージ数。
queue
予約記事数。
drafts
下書き記事数。
ask
質問を受付中か?
tweet
Twitterと連携しているか?
facebook
Facebookと連携しているか?

サンプルプログラム

以上を踏まえた、ユーザーデータを取得するためのサンプルプログラムが、下記の通りです。6行目でtumblr_oauth()を利用しているので、この関数を読み込めるようにしておいて下さい。取得した「アクセストークン」「アクセストークンシークレット」を$access_token$access_token_secretにセットして、プログラムを起動してみましょう!

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;	// アクセストークン
	$access_token_secret = '' ;	// アクセストークンシークレット
	$request_url = 'https://api.tumblr.com/v2/user/info' ;
	$request_method = 'GET' ;

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , array( 'oauth_token' => $access_token , 'oauth_token_secret' => $access_token_secret ) , 1 ) ;

	// オブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$obj || !isset( $obj->response->user->name ) || !isset( $obj->response->user->likes ) || !isset( $obj->response->user->following ) )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}
	else
	{
		// 各データ
		$name = $obj->response->user->name ;		// ユーザー名
		$likes = $obj->response->user->likes ;		// スキをした回数
		$follow = $obj->response->user->following ;		// フォロー数

		// 出力
		$html .= '<h2>ユーザー情報</h2>' ;
		$html .= '<dl>' ;
		$html .= 	'<dt>名前</dt>' ;
		$html .= 		'<dd>' . $name . '</dd>' ;
		$html .= 	'<dt>スキをした回数</dt>' ;
		$html .= 		'<dd>' . $likes . '回</dd>' ;
		$html .= 	'<dt>フォロー数</dt>' ;
		$html .= 		'<dd>' . $follow . 'ブログ</dd>' ;
		$html .= '</dl>' ;

		// 個々の所有ブログの情報を読み込む
		if( isset( $obj->response->user->blogs ) && !empty( $obj->response->user->blogs ) )
		{
			// 出力
			$html .= '<h2>所有ブログ</h2>' ;

			// 各ブログのデータを解析
			foreach( $obj->response->user->blogs as $item )
			{
				// 各データ
				$blog_name = $item->title ;		// ブログ名
				$blog_url = $item->url ;		// ブログURL
				$blog_follower = $item->followers ;		// フォロワー数
				$blog_updated = date( 'Y/m/d H:i' , $item->updated ) ;		// 最終更新時刻(ついでに整形)
				$blog_posts = $item->posts ;		// 投稿数

				// 出力
				$html .= '<dl>' ;
				$html .= 	'<dt>名前</dt>' ;
				$html .= 		'<dd>' . $blog_name . '</dd>' ;
				$html .= 	'<dt>フォロワー数</dt>' ;
				$html .= 		'<dd>' . $blog_follower . '人</dd>' ;

				// 投稿がある場合のみ
				if( $blog_posts )
				{
					$html .= 	'<dt>最終更新時刻</dt>' ;
					$html .= 		'<dd>' . $blog_updated . '</dd>' ;
					$html .= 	'<dt>投稿数</dt>' ;
					$html .= 		'<dd>' . $blog_posts . '</dd>' ;
				}

				$html .= '</dl>' ;
			}
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

ダッシュボード [dashboard]

ユーザーのホーム画面に表示されている記事一覧を取得します。Twitterでいうタイムラインのことですねー。リクエストURLは下記の通りです。

GET https://api.tumblr.com/v2/user/dashboard

パラメータ

下記のオプション・パラメータを指定することで、取得する記事を絞り込むことができます。

limit
取得件数を指定する。デフォルト値、最大値は共に20
offset
オフセット(取得開始位置)を指定する。先頭からここで指定した数だけ、パスして取得する。デフォルト値は0
type
取得する投稿タイプを指定する。指定しない場合は全ての種類をまとめて取得する。
text … テキスト
quote … 引用
photo … 画像
link … リンク
chat … チャット
audio … 音声
video … 動画
answer … アンサー
since_id
記事IDを指定すると、それ以降に投稿された記事のみを取得する。
reblog_info
リブログの情報を取得するかをtrue、またはfalseで指定する。初期値はfalse。Boolean値ではなく文字列で指定すること(引用符で囲む)。
notes_info
Notes(履歴)の情報を取得するかをtrue、またはfalseで指定する。初期値はfalse。Boolean値ではなく文字列で指定すること(引用符で囲む)。

「Notes」って何?

TumblrのNoteとは?
TumblrのNoteとは?

Noteとは、各記事のフッターにある「リアクション」のデータです。誰がスキをしたとか、リブログしたとか、ああいったデータを指します。

サンプルリクエスト

tumblr_oauth()を利用したリクエストサンプルです。7〜8行目では、オプション・パラメータを使って、画像タイプの投稿(type=photo)を5件だけ(limit=5)と指定しています。

PHP

// 設定項目
$access_token = '' ;		// アクセストークン
$access_token_secret = '' ;		// アクセストークンシークレット
$request_url = 'https://api.tumblr.com/v2/user/dashboard' ;	// リクエストURL
$request_method = 'GET' ;		// リクエストメソッド
$params = array(				// パラメータ
	'oauth_token' => $access_token ,
	'oauth_token_secret' => $access_token_secret ,
	'type' => 'photo' ,
	'limit' => 5 ,
) ;

// リクエスト
$json = tumblr_oauth( $request_url , $request_method , $params ) ;

このコードの動作を確認する

取得できるJSON

postsプロパティの中に、配列形式で「各記事のJSONデータ」が含まれている形になります。記事のJSONデータの構造については、その内容が膨大なことから、1つの章を設けて詳しく解説しています。「記事のJSONデータについて」をご参考下さい。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"posts":[]}}

予約記事 [queue]

予約設定している記事一覧を取得することができます。「キュー」と言われているものです。下記のURLに、GETメソッドでリクエストを送ります。

GET https://api.tumblr.com/v2/blog/{ブログホスト}/posts/queue

下記のオプション・パラメータを指定することで、取得する記事を絞り込むことができます。

パラメータ

limit
取得件数を指定する。デフォルト値、最大値は共に20
offset
オフセット(取得開始位置)を指定する。先頭からここで指定した数だけ、パスして取得する。デフォルト値は0
filter
フィルタリングする。
text … プレインテキストで取得する。
raw … HTMLを反映して取得する。

サンプルリクエスト

下記が予約状態の記事一覧を取得するリクエストのサンプルです。$hostを設定して下さいね。

PHP

// 設定項目
$access_token = '' ;		// アクセストークン
$access_token_secret = '' ;		// アクセストークンシークレット
$host = 'syncerjp.tumblr.com' ;		// ブログのホスト
$request_url = 'https://api.tumblr.com/v2/blog/' . $host . '/posts/queue' ;	// リクエストURL
$request_method = 'GET' ;		// リクエストメソッド
$params = array(				// パラメータ
	'oauth_token' => $access_token ,
	'oauth_token_secret' => $access_token_secret ,
) ;

// リクエスト
$json = tumblr_oauth( $request_url , $request_method , $params ) ;

取得できるJSON

postsプロパティの中に、配列形式で「各記事のJSONデータ」が含まれています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"posts":[{"blog_name":"syncerjp","id":125016314657,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125016314657\/\u4e88\u7d04\u8a18\u4e8b","slug":"\u4e88\u7d04\u8a18\u4e8b","type":"text","date":"2015-07-25 18:11:49 GMT","timestamp":1437847909,"state":"queued","format":"html","reblog_key":"WkaRQaso","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qRZPCX","recommended_source":null,"followed":false,"scheduled_publish_time":"1437854400","queued_state":"queued","highlighted":[],"liked":false,"title":"\u4e88\u7d04\u8a18\u4e8b","body":"\u003Cp\u003E\u3053\u308c\u306f2050\u5e74\u306e1\u67081\u65e5\u306b\u6295\u7a3f\u3059\u308b\u3088\u3046\u306b\u3001\u4e88\u7d04\u8a2d\u5b9a\u3057\u3066\u3044\u308b\u8a18\u4e8b\u3067\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003Eこれは2050年の1月1日に投稿するように、予約設定している記事です。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"125016314657"},"content":"\u003Cp\u003E\u3053\u308c\u306f2050\u5e74\u306e1\u67081\u65e5\u306b\u6295\u7a3f\u3059\u308b\u3088\u3046\u306b\u3001\u4e88\u7d04\u8a2d\u5b9a\u3057\u3066\u3044\u308b\u8a18\u4e8b\u3067\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003Eこれは2050年の1月1日に投稿するように、予約設定している記事です。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"can_reply":true}]}}

ドラフト(下書き)記事 [draft]

ドラフト(下書き)状態の記事一覧を取得することができます。下記のURLに、GETメソッドでリクエストを送って下さい。

GET https://api.tumblr.com/v2/blog/{ブログホスト}/posts/draft

下記のオプション・パラメータを指定することで、取得する記事を絞り込むことができます。予約状態の記事を取得した時と違い、ページングにはoffsetではなく、before_idというパラメータを利用するのでご注意下さい。この違いは、ちょっと謎仕様ですよね…。

パラメータ

before_id
このIDよりも、後にある記事のみを取得。
filter
フィルタリングする。
text … プレインテキストで取得する。
raw … HTMLを反映して取得する。

サンプルリクエスト

下記が下書き状態の記事一覧を取得するリクエストのサンプルです。$hostを設定して下さいね。

PHP

// 設定項目
$access_token = '' ;		// アクセストークン
$access_token_secret = '' ;		// アクセストークンシークレット
$request_url = 'https://api.tumblr.com/v2/user/draft' ;	// リクエストURL
$request_method = 'GET' ;		// リクエストメソッド
$params = array(				// パラメータ
	'oauth_token' => $access_token ,
	'oauth_token_secret' => $access_token_secret ,
	'type' => 'photo' ,
	'limit' => 5 ,
) ;

// リクエスト
$json = tumblr_oauth( $request_url , $request_method , $params ) ;

このコードの動作を確認する

取得できるJSON

postsプロパティの中に、配列形式で「各記事のJSONデータ」が含まれています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"posts":[{"blog_name":"syncerjp","id":125017877657,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125017877657\/\u4e0b\u66f8\u304d\u8a18\u4e8b","slug":"\u4e0b\u66f8\u304d\u8a18\u4e8b","type":"text","date":"2015-07-25 18:35:51 GMT","timestamp":1437849351,"state":"draft","format":"html","reblog_key":"7jeetD73","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qRfMoP","recommended_source":null,"followed":false,"highlighted":[],"liked":false,"title":"\u4e0b\u66f8\u304d\u8a18\u4e8b","body":"\u003Cp\u003E\u3053\u308c\u306f\u4e0b\u66f8\u304d\u8a18\u4e8b\u3067\u3059\u3002\u003C\/p\u003E\u003Cp\u003E\u4e00\u751f\u3001\u65e5\u306e\u76ee\u3092\u898b\u307e\u305b\u3093\u2026\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003Eこれは下書き記事です。\u003C\/p\u003E\u003Cp\u003E一生、日の目を見ません…。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":125017877657},"content":"\u003Cp\u003E\u3053\u308c\u306f\u4e0b\u66f8\u304d\u8a18\u4e8b\u3067\u3059\u3002\u003C\/p\u003E\u003Cp\u003E\u4e00\u751f\u3001\u65e5\u306e\u76ee\u3092\u898b\u307e\u305b\u3093\u2026\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003Eこれは下書き記事です。\u003C\/p\u003E\u003Cp\u003E一生、日の目を見ません…。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"can_reply":true}]}}

ゲストの寄稿記事 [submission]

ブログにゲストが寄稿して承認待ち状態の記事を取得することができます。既に承認されて公開されている記事は取得されません。それには、下記のURLにGETメソッドでリクエストを送って下さい。

GET https://api.tumblr.com/v2/blog/{ブログホスト}/posts/submission

指定できるパラメータです。「予約状態の記事」を取得した時とは違って、limitを指定することができない点にご注意下さい。「予約」「下書き」「寄稿」で、パラメータが違うのは、最初のうちはちょっと混乱しそうですねー。

パラメータ

offset
オフセット(取得開始位置)を指定する。先頭からここで指定した数だけ、パスして取得する。デフォルト値は0
filter
フィルタリングする。
text … プレインテキストで取得する。
raw … HTMLを反映して取得する。

サンプルリクエスト

こちらが、寄稿の記事一覧を取得するリクエストのサンプルです。$hostを設定して下さいね。

PHP

// 設定項目
$access_token = '' ;		// アクセストークン
$access_token_secret = '' ;		// アクセストークンシークレット
$request_url = 'https://api.tumblr.com/v2/user/submission' ;	// リクエストURL
$request_method = 'GET' ;		// リクエストメソッド
$params = array(				// パラメータ
	'oauth_token' => $access_token ,
	'oauth_token_secret' => $access_token_secret ,
	'type' => 'photo' ,
	'limit' => 5 ,
) ;

// リクエスト
$json = tumblr_oauth( $request_url , $request_method , $params ) ;

このコードの動作を確認する

取得できるJSON

postsプロパティの中に、配列形式で「各記事のJSONデータ」が含まれています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"posts":[{"blog_name":"syncerjp","id":125019053037,"post_url":"https:\/\/www.tumblr.com\/blog\/syncerjp\/submissions?125019053037\/\u5bc4\u7a3f\u8a18\u4e8b\u3067\u3059","slug":"\u5bc4\u7a3f\u8a18\u4e8b\u3067\u3059","type":"text","date":"2015-07-25 18:54:29 GMT","timestamp":1437850469,"state":"submission","format":"html","reblog_key":"VyJYrQuS","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qRjrlj","recommended_source":null,"followed":false,"post_author":"syncer-guest","is_submission":true,"highlighted":[],"liked":false,"title":"\u5bc4\u7a3f\u8a18\u4e8b\u3067\u3059","body":"\u003Cp\u003E\u3053\u308c\u306f\u5bc4\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u306e\u3088\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003Eこれは寄稿記事でございますのよ。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":125019053037},"content":"\u003Cp\u003E\u3053\u308c\u306f\u5bc4\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u306e\u3088\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003Eこれは寄稿記事でございますのよ。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"can_reply":true}]}}

スキを付けた記事 [likes]

下記URLにGETメソッドのリクエストを送ることで、ユーザーがスキを付けた記事の一覧を取得することができます。

GET https://api.tumblr.com/v2/user/likes

下記のオプション・パラメータを指定することで、取得する記事を絞り込むことができます。

パラメータ

limit
取得件数を指定する。デフォルト値、最大値は共に20
offset
オフセット(取得開始位置)を指定する。先頭からここで指定した数だけ、パスして取得する。デフォルト値は0

サンプルリクエスト

tumblr_oauth()を利用したリクエストサンプルです。オプションパラメータを使って5件だけ取得しています。

PHP

// 設定項目
$access_token = '' ;		// アクセストークン
$access_token_secret = '' ;		// アクセストークンシークレット
$request_url = 'https://api.tumblr.com/v2/user/likes' ;	// リクエストURL
$request_method = 'GET' ;		// リクエストメソッド
$params = array(				// パラメータ
	'oauth_token' => $access_token ,
	'oauth_token_secret' => $access_token_secret ,
) ;

// リクエスト
$json = tumblr_oauth( $request_url , $request_method , $params ) ;

このコードの動作を確認する

取得できるJSON

liked_postsプロパティの中に、配列形式で「各記事のJSONデータ」が含まれています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"liked_posts":[{"blog_name":"arayutw","id":90380091184,"post_url":"http:\/\/arayutw.tumblr.com\/post\/90380091184\/sample-post","slug":"sample-post","type":"text","date":"2014-06-30 19:55:00 GMT","timestamp":1404158100,"state":"published","format":"html","reblog_key":"e43ysAS4","tags":[],"short_url":"http:\/\/tmblr.co\/ZB_n3o1KB4hym","recommended_source":null,"followed":false,"highlighted":[],"liked":true,"note_count":1,"title":"\u30b5\u30f3\u30d7\u30eb\u30dd\u30b9\u30c8(sample post)","body":"\u003Cp\u003E\u3053\u306e\u8a18\u4e8b\u304c\u3001\u307f\u3093\u306a\u306b\u30b9\u30ad\u3055\u308c\u305f\u308a\u3001\u30ad\u30e9\u30a4\u3055\u308c\u305f\u308a\u3059\u308c\u3070\u3044\u3044\u306a\u3002\u003C\/p\u003E\n\u003Cp\u003E\u3053\u306e\u8a18\u4e8b\u306eID\u306f \u003Cstrong\u003E90380091184\u003C\/strong\u003E\u00a0\u3067\u3059\u3002\u003C\/p\u003E\n\u003Cp\u003E\u3053\u306e\u8a18\u4e8b\u306eReblog Key\u306f \u003Cstrong\u003Ee43ysAS4\u003C\/strong\u003E\u00a0\u3067\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003Eこの記事が、みんなにスキされたり、キライされたりすればいいな。\u003C\/p\u003E\n\u003Cp\u003Eこの記事のIDは \u003Cstrong\u003E90380091184\u003C\/strong\u003E です。\u003C\/p\u003E\n\u003Cp\u003Eこの記事のReblog Keyは \u003Cstrong\u003Ee43ysAS4\u003C\/strong\u003E です。\u003C\/p\u003E"},"trail":[{"blog":{"name":"arayutw","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/static.tumblr.com\/77a29de51bd849d135923bc4f0b04c0c\/fknav0n\/Ko7mpsail\/tumblr_static_greentooth.gif","header_image_focused":"http:\/\/static.tumblr.com\/77a29de51bd849d135923bc4f0b04c0c\/fknav0n\/Ko7mpsail\/tumblr_static_greentooth.gif","header_image_scaled":"http:\/\/static.tumblr.com\/77a29de51bd849d135923bc4f0b04c0c\/fknav0n\/Ko7mpsail\/tumblr_static_greentooth.gif","header_stretch":true,"link_color":"#529ECC","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"90380091184"},"content":"\u003Cp\u003E\u3053\u306e\u8a18\u4e8b\u304c\u3001\u307f\u3093\u306a\u306b\u30b9\u30ad\u3055\u308c\u305f\u308a\u3001\u30ad\u30e9\u30a4\u3055\u308c\u305f\u308a\u3059\u308c\u3070\u3044\u3044\u306a\u3002\u003C\/p\u003E\n\u003Cp\u003E\u3053\u306e\u8a18\u4e8b\u306eID\u306f \u003Cstrong\u003E90380091184\u003C\/strong\u003E\u00a0\u3067\u3059\u3002\u003C\/p\u003E\n\u003Cp\u003E\u3053\u306e\u8a18\u4e8b\u306eReblog Key\u306f \u003Cstrong\u003Ee43ysAS4\u003C\/strong\u003E\u00a0\u3067\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003Eこの記事が、みんなにスキされたり、キライされたりすればいいな。\u003C\/p\u003E\r\n\u003Cp\u003Eこの記事のIDは \u003Cstrong\u003E90380091184\u003C\/strong\u003E です。\u003C\/p\u003E\r\n\u003Cp\u003Eこの記事のReblog Keyは \u003Cstrong\u003Ee43ysAS4\u003C\/strong\u003E です。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"liked_timestamp":1437851101,"can_reply":false}],"liked_count":1}}

フォローしているブログ [following]

そのユーザー(アクセストークンの持ち主)がフォローしているブログの一覧を取得することができます。下記のURLにGETメソッドでリクエストを送ります。

GET https://api.tumblr.com/v2/user/following

下記のオプション・パラメータを指定することで、取得する記事を絞り込むことができます。

パラメータ

limit
取得件数を指定する。デフォルト値、最大値は共に20
offset
オフセット(取得開始位置)を指定する。先頭からここで指定した数だけ、パスして取得する。デフォルト値は0

サンプルリクエスト

tumblr_oauth()を利用したリクエストサンプルです。オプションパラメータを使って5件だけ取得しています。

PHP

// 設定項目
$access_token = '' ;		// アクセストークン
$access_token_secret = '' ;		// アクセストークンシークレット
$request_url = 'https://api.tumblr.com/v2/user/following' ;	// リクエストURL
$request_method = 'GET' ;		// リクエストメソッド
$params = array(				// パラメータ
	'oauth_token' => $access_token ,
	'oauth_token_secret' => $access_token_secret ,
) ;

// リクエスト
$json = tumblr_oauth( $request_url , $request_method , $params ) ;

このコードの動作を確認する

取得できるJSON

下記のJSONデータを取得できます。blogsプロパティに、フォローしているブログのJSONデータが配列形式で含まれる形です。total_blogsは、フォロー数を示しています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"total_blogs":6,"blogs":[{"name":"ifttt","title":"IFTTT Blog","description":"","url":"http:\/\/blog.ifttt.com\/","updated":1437678094,"display_type":4},{"name":"foursquare","title":"The Foursquare Blog","description":"                                                                                                    Foursquare helps you find places you\u2019ll love, anywhere in the world. Questions? Visit \u003Ca href=\u0022http:\/\/support.foursquare.com\u0022\u003Esupport.foursquare.com\u003C\/a\u003E","url":"http:\/\/blog.foursquare.com\/","updated":1436295232},{"name":"dotinstall","title":"\u300e\u30c9\u30c3\u30c8\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u300f\u516c\u5f0f\u30d6\u30ed\u30b0","description":"3\u5206\u52d5\u753b\u3067\u30de\u30b9\u30bf\u30fc\u3059\u308b\u521d\u5fc3\u8005\u5411\u3051\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u5b66\u7fd2\u30b5\u30a4\u30c8\u300c\u003Ca href=\u0022http:\/\/dotinstall.com\u0022\u003E\u30c9\u30c3\u30c8\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u003C\/a\u003E\u300d\u306e\u516c\u5f0f\u30d6\u30ed\u30b0\u3067\u3059\u3002","url":"http:\/\/blog.dotinstall.com\/","updated":1437542955},{"name":"mikimizuno","title":"Miki Mizuno Official Website","description":"\u003Cp\u003E\u25c6\u30c9\u30e9\u30de\u003Cbr \/\u003E\u30c6\u30ec\u30d3\u671d\u65e5\u300c\u003Ca href=\u0022http:\/\/www.tv-asahi.co.jp\/imhome\/\u0022\u003E\u30a2\u30a4\u30e0\u30db\u30fc\u30e0\u003C\/a\u003E\u300d\u91ce\u6ca2\u9999\u5f79\u003Cbr \/\u003E2015\u5e744\u670816\u65e5\uff08\u6728\uff09\u591c9:00\u30b9\u30bf\u30fc\u30c8\u003Cbr \/\u003E\u003Cbr \/\u003E\u25c6\u6620\u753b\u003Cbr \/\u003E\u003Ca href=\u0022http:\/\/www.oremada.jp\/\u0022\u003E\u300c\u3042\u3093\u300d2015\u5e745\u670831\u65e5\u516c\u958b\u4e88\u5b9a\u003Cbr \/\u003E\u003Cbr \/\u003E\u003C\/a\u003E\u003C\/p\u003E\n\u003Cp\u003E\u25c6\u66f8\u7c4d\u003Cbr \/\u003E\u300c\u79c1\u306e\u4e2d\u306e\u304a\u3063\u3055\u3093\u300d \u89d2\u5ddd\u66f8\u5e97\u30002013\u5e743\u670826\u65e5\u767a\u58f2\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cimg src=\u0022http:\/\/media.tumblr.com\/51dfd2da8e9ff4e75ae9e1fddd2fe804\/tumblr_inline_mko4hdE59h1qj8g00.jpg\u0022 \/\u003E \u003C\/p\u003E\n\u003Cp\u003E\u003Cbr \/\u003E\u25c6\u821e\u53f0\u003Cbr \/\u003E\u5165\u6c5f\u96c5\u4eba\u30b0\u30ec\u30fc\u30c8\uff15\u4eba\u829d\u5c45\u300c\u30c7\u30b9\u30da\u30e9\u30fc\u30c9\u300d\u003Cbr \/\u003E2015\u5e745\u670816\u65e5\uff08\u571f\uff09\u301c5\u670820\u65e5\uff08\u6c34\uff09\u003Cbr \/\u003E\u8d64\u5742RED\/THEATER\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\u0022http:\/\/ja-jp.facebook.com\/propellerken\u0022\u003E \u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cstrong\u003E\u003Ca href=\u0022http:\/\/www.ktv.jp\/raden\/index.html\u0022\u003E \u003C\/a\u003E\u003C\/strong\u003E\u003C\/p\u003E\n\u003Cp\u003E\u003Cbr \/\u003Eytv \u300c\u6c34\u91ce\u7f8e\u7d00\u306e\u6620\u753b\u751f\u6d3b\uff08\u30b7\u30cd\u30de\u30e9\u30a4\u30d5\uff09\u300d\u003Cbr \/\u003E\u6bce\u9031\u91d1\u66dc\u65e5 22\uff1a54\uff5e\u653e\u9001\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u25c6CM\u003Cbr \/\u003E\u003Cbr \/\u003E\u30a8\u30b9\u30a8\u30b9\u88fd\u85ac\u003Ca href=\u0022http:\/\/www.cp-cosmetics.co.jp\/offstage\/05.html\u0022 title=\u0022\u5973\u512a\u3000\u6c34\u91ce\u7f8e\u7d00\u306e\u30aa\u30d5\u30b9\u30c6\u30fc\u30b8\u0022 target=\u0022_blank\u0022\u003E\u003Cbr \/\u003E\u003C\/a\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u25c6\u30c7\u30b6\u30a4\u30f3\u30d7\u30ed\u30c7\u30e5\u30fc\u30b9\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Ca href=\u0022http:\/\/www.thirdfactory.info\/\u0022 title=\u0022THIRD FACTORY\uff08\u30b5\u30fc\u30c9\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\uff09\u0022 target=\u0022_blank\u0022\u003ETHIRD FACTORY\uff08\u30b5\u30fc\u30c9\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\uff09\u003C\/a\u003E\u003C\/p\u003E","url":"http:\/\/mikimizuno.com\/","updated":1432954838},{"name":"syncerjp","title":"Syncer on Tumblr","description":"","url":"http:\/\/syncerjp.tumblr.com\/","updated":1437850268},{"name":"nihongo","title":"Tumblr Nihongo","description":"\u003Ca href=\u0022http:\/\/www.tumblr.com\u0022\u003ETumblr\u003C\/a\u003E\u30b9\u30bf\u30c3\u30d5\u304c\u9001\u308b\u516c\u5f0f\u30d6\u30ed\u30b0\u30d5\u30a3\u30fc\u30c9\u3067\u3059\u3002","url":"http:\/\/nihongo.tumblr.com\/","updated":1437777008}]}}

ブログデータの取得

前章までは「ユーザー」に関するデータを取得しました。この章では、「ブログ」に関するデータを取得する方法について、紹介します。

ブログのプロフィール

まずはブログのプロフィールを取得してみましょう。下記のURLにGETメソッドでリクエストします。「ブログホスト」は、http://arayutw.tumblr.com/の内、arayutw.tumblr.comの部分です。

GET https://api.tumblr.com/v2/blog/{ブログホスト}/info?api_key={コンシューマーキー}

取得できるJSON

blogプロパティに、ブログのプロフィールデータが格納されています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"blog":{"title":"Syncer on Tumblr","name":"syncerjp","posts":2,"url":"http:\/\/syncerjp.tumblr.com\/","updated":1437854688,"description":"\u30d6\u30ed\u30b0\u3001Syncer\u306eTumblr\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3059\u3002","is_nsfw":false,"ask":true,"ask_page_title":"Ask me anything","ask_anon":true,"submission_page_title":"Submit","share_likes":false}}}

各プロパティの説明

status
ステータスコード。リクエストに成功している場合は200
title
ブログ名。
description
ブログ説明文。
updated
ブログの最終更新時刻。
posts
投稿数(リブログ含む)。
ask
質問を受付中か?
is_nsfw
成人コンテンツか?

サンプルプログラム

以上を踏まえたサンプルプログラムです。このエンドポイントは認証不要のため、ライブラリは不要です。$api_keyには、アプリ登録の際に取得した「コンシューマーキー」をセットして下さい!

このコードの動作を確認する

アバター画像

ブログのアバター(プロフィールアイコン)の画像URLを取得する方法を紹介します。アバターは下記のURLを組み立てることで、呼び出すことができます。サイズは16243040486496128512の中から選択でき、省略すると64となります。

GET https://api.tumblr.com/v2/blog/{ブログホスト}/avatar/{サイズ}

例えば、私のブログのアイコン(128x128)は下記の通り、呼び出すことができます。リンクをクリックしてアクセスしてみて下さいね。リダイレクトで、画像ファイルのURLにアクセスします。

https://api.tumblr.com/v2/blog/syncerjp.tumblr.com/avatar/128 リンク

アバター画像
アバター画像

実際にTumblrのAPIを利用して、アバター画像を表示しているサンプルです。このように、imgタグのsrc属性に指定することで、そのまま利用することも可能です!

フォロワーデータ

そのブログをフォローしている人たちを取得することができます。このAPIを利用するには、OAuth認証が必要となります。

GET https://api.tumblr.com/v2/blog/{ブログホスト}/followers

下記のオプション・パラメータを指定することで、取得するフォロワーデータを絞り込むことができます。

パラメータ

下記のオプション・パラメータを指定することで、取得するフォロワーデータを絞り込むことができます。

limit
取得件数を指定する。デフォルト値、最大値は共に20
offset
オフセット(取得開始位置)を指定する。先頭からここで指定した数だけ、パスして取得する。デフォルト値は0

取得できるJSON

usersプロパティに、フォロワー(ファン)のプロフィールデータが配列形式で格納されています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"total_users":1,"users":[{"name":"syncer-guest","url":"http:\/\/syncer-guest.tumblr.com\/","updated":0,"following":false}]}}

各プロパティの説明

status
ステータスコード。リクエストに成功している場合は200
total_users
総フォロワー数。
name
ユーザーID。
url
ユーザーの主ブログURL。
updated
ブログの最終更新時刻。
following
自分がフォローしてるか否か。

サンプルプログラム

フォロワー情報を取得するサンプルプログラムが下記です。

このコードの動作を確認する

投稿記事一覧

そのブログに投稿した記事一覧を取得することができます!そのためには、下記のURLに、GETメソッドでリクエストを送って下さい。

GET https://api.tumblr.com/v2/blog/{ブログホスト}/posts{/投稿タイプ}

パラメータ

下記のオプション・パラメータを指定することで、取得するフォロワーデータを絞り込むことができます。

api_key
コンシューマーキー。
type
取得する投稿タイプを指定する。指定しない場合は全ての種類をまとめて取得する。
text … テキスト
quote … 引用
photo … 画像
link … リンク
chat … チャット
audio … 音声
video … 動画
answer … アンサー
id
記事IDを指定する。指定して、そのIDが存在しなかった場合はエラーとなる。
tag
タグ名を指定する。
limit
取得件数を指定する。デフォルト値、最大値は共に20
offset
オフセット(取得開始位置)を指定する。先頭からここで指定した数だけ、パスして取得する。デフォルト値は0
reblog_info
リブログの情報を取得するかをtrue、またはfalseで指定する。初期値はfalse。Boolean値ではなく文字列で指定すること(引用符で囲む)。
notes_info
Notes(履歴)の情報を取得するかをtrue、またはfalseで指定する。初期値はfalse。Boolean値ではなく文字列で指定すること(引用符で囲む)。
filter
フィルタリングする。
text … プレインテキストで取得する。
raw … HTMLを反映して取得する。

取得できるJSON

下記のJSONデータを取得することができます。blogプロパティには「ブログのプロフィールを取得する」で取得したものと同じJSONデータが、postsプロパティには「記事のJSONデータについて」で解説しているJSONデータが配列形式で格納されています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"blog":{"title":"Syncer on Tumblr","name":"syncerjp","posts":9,"url":"http:\/\/syncerjp.tumblr.com\/","updated":1437886825,"description":"\u30d6\u30ed\u30b0\u3001Syncer\u306eTumblr\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3059\u3002","is_nsfw":false,"ask":true,"ask_page_title":"Ask me anything","ask_anon":true,"submission_page_title":"Submit","can_submit":true,"followed":false,"can_send_fan_mail":false,"is_blocked_from_primary":false,"share_likes":false,"twitter_enabled":false,"twitter_send":false,"facebook_opengraph_enabled":"N","tweet":"N","facebook":"N","followers":1,"primary":false,"admin":true,"messages":1,"queue":0,"drafts":2,"type":"public","subscribed":false,"can_subscribe":false},"posts":[{"blog_name":"syncerjp","id":125057459367,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057459367\/\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b","slug":"\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b","type":"text","date":"2015-07-26 04:55:17 GMT","timestamp":1437886517,"state":"published","format":"html","reblog_key":"wY07933p","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU0MId","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"title":"\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b","body":"\u003Cp\u003E\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003Eテキストの投稿記事でございます。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"125057459367"},"content":"\u003Cp\u003E\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003Eテキストの投稿記事でございます。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"can_reply":true}],"total_posts":3}}

サンプルプログラム

以上を踏まえた、記事一覧を取得するサンプルプログラムを用意しました。取得したJSONデータをブラウザに出力します。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;
	$access_token_secret = '' ;
	$host = 'syncerjp.tumblr.com' ;		// 対象ブログのホスト
	$request_method = 'GET' ;		// リクエストメソッド
	$params = array(				// パラメータ
		'oauth_token' => $access_token ,
		'oauth_token_secret' => $access_token_secret ,
		'limit' => 10 ,
	) ;
	$type = 'text' ;		// 投稿タイプを指定

	// リクエストURL
	$request_url = 'https://api.tumblr.com/v2/blog/' . $host . '/posts' ;

	// 投稿タイプがある場合
	if( $type )
	{
		$request_url .= '/' . $type ;
	}

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , $params , 1 ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

フォローとアンフォロー

この章では、APIを経由して、ブログをフォローしたり、フォローを外したりするAPIを紹介します。Tumblrの機能をwebサービスに本格的に取り込むには、こういった機能が必要になってきそうですねー。

リクエスト方法

指定のURLにPOSTメソッドでAPIリクエストを送ります。

フォローする場合

POST https://api.tumblr.com/v2/user/follow

アンフォローする場合

POST https://api.tumblr.com/v2/user/unfollow

パラメータ

パラメータには、フォロー(アンフォロー)するブログのURLを指定します。

url
指定ブログのURL。

取得できるJSON

リクエストに成功すると、下記のJSONデータを取得します。ステータスコードで成功判定をして下さい。存在しないブログURLを指定するなどして、リクエストに失敗すると、nullが返ります。同じブログを連続(重複)でフォローしても、失敗にはなりません。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"blog":{"title":"Syncer on Tumblr","name":"syncerjp","posts":9,"url":"http:\/\/syncerjp.tumblr.com\/","updated":1437886825,"description":"\u30d6\u30ed\u30b0\u3001Syncer\u306eTumblr\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u3059\u3002","is_nsfw":false,"ask":true,"ask_page_title":"Ask me anything","ask_anon":true,"submission_page_title":"Submit","can_submit":true,"followed":true,"can_send_fan_mail":false,"is_blocked_from_primary":false,"share_likes":false,"subscribed":false,"can_subscribe":true}}}

サンプルプログラム

以上を踏まえたサンプルリクエストが下記の通りです。サンプルブログには、私のTumblrを用意したので、フォロー→アンフォローと試してみて下さい。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;	// アクセストークン
	$access_token_secret = '' ;	// アクセストークンシークレット
	$action = 'unfollow' ;		// アクション (follow=フォロー、unfollow=フォロー外し)
	$url = 'http://syncerjp.tumblr.com/' ;		// 対象のブログ (フルURL)
	$request_url = 'https://api.tumblr.com/v2/user/' . $action ;	// リクエストURL
	$request_method = 'POST' ;		// リクエストメソッド
	$params = array(				// パラメータ
		'oauth_token' => $access_token ,
		'oauth_token_secret' => $access_token_secret ,
		'url' => $url ,
	) ;

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , $params , 1 ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

スキとアンライク

特定の記事にスキを付けたり外したりしてみましょう。このリクエストには、指定記事の「ID」とリブログキーが必要です!

リクエスト方法

指定のURLにPOSTメソッドでAPIリクエストを送ります。

スキする場合

POST https://api.tumblr.com/v2/user/like

スキを取り消す場合

POST https://api.tumblr.com/v2/user/unlike

パラメータ

パラメータには、スキ(アンライク)する記事の、IDとリブログキーを指定します。

id
指定記事のID。
reblog_key
指定記事のリブログキー。

取得できるJSON

リクエストに成功すると、下記のJSONデータを取得します。フォロー(アンフォロー)の時と同じく、ステータスコードで成功判定をして下さい。存在しないID、リブログキーを指定するなどして、リクエストに失敗すると、nullが返ります。また、注意点として、同じ記事に連続でスキのリクエストを送ると、スキのカウントだけが上がり続けます。スキをキャンセル(アンライク)しても、戻るカウントは1だけなので、ちょっと気持ち悪くなってしまいます…。

JSON

{"meta":{"status":200,"msg":"OK"},"response":[]}

サンプルプログラム

以上を踏まえたサンプルリクエストが下記の通りです。サンプル記事には、こちらの投稿を用意したので、この記事をスキしたり、キライしたりしてみて下さい。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;	// アクセストークン
	$access_token_secret = '' ;	// アクセストークンシークレット
	$action = 'like' ;		// アクション (like=スキ、unlike=スキの取り消し)
	$request_url = 'https://api.tumblr.com/v2/user/' . $action ;	// リクエストURL
	$request_method = 'POST' ;		// リクエストメソッド
	$params = array(				// パラメータ
		'oauth_token' => $access_token ,
		'oauth_token_secret' => $access_token_secret ,
		'id' => '90380091184' ,			// 記事のID
		'reblog_key' => 'e43ysAS4' ,	// 記事のリブログキー
	) ;

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , $params , 1 ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

タグ検索

Tumblrの記事の中から、特定のタグが付いたものを検索することができます。

リクエスト方法

タグ検索をするには、下記のURLにGETメソッドでリクエストを送ります。

GET https://api.tumblr.com/v2/tagged

パラメータ

下記が指定できるパラメータです。

tag
検索するタグ。
before
UNIX TIMESTAMPを指定すると、それより過去の記事のみを取得する。
limit
取得件数を指定する。デフォルト値、最大値は共に20
filter
フィルタリングする。
text … プレインテキストで取得する。
raw … HTMLを反映して取得する。

コンシューマーキーの認証でリクエスト

このAPIは、OAuth認証とは別に、アプリ登録で取得したコンシューマーキーの認証でリクエストを送ることができます。コンシューマーキーで認証する場合は、下記のURLアドレスから取得することが可能です!

GET https://api.tumblr.com/v2/tagged?api_key={コンシューマーキー}

取得できるJSON

取得できるJSONデータは下記の通りです。responseの中に、各記事のJSONデータが配列形式で格納されています。各記事のJSONデータに関しては、「記事のJSONデータについて」の章で詳しく解説しています。

JSON

{"meta":{"status":200,"msg":"OK"},"response":[{"blog_name":"sepia-shade","id":109163522622,"post_url":"http:\/\/sepia-shade.tumblr.com\/post\/109163522622\/hollow-concept-syncer-this-thickly-armored","slug":"hollow-concept-syncer-this-thickly-armored","type":"photo","date":"2015-01-26 02:28:40 GMT","timestamp":1422239320,"state":"published","format":"html","reblog_key":"iGDqIFc9","tags":["Bleach","anime","hollow concept","cape buffalo","syncer","sketch","sepia shade"],"short_url":"http:\/\/tmblr.co\/ZIeVWt1bgfoe_","recommended_source":null,"highlighted":[],"note_count":5,"caption":"Hollow Concept: Syncer\nThis thickly armored nutcase is currently making a mess in my Bleach RP. Playing him is quite tedious.","reblog":{"tree_html":"","comment":"\u003Cp\u003EHollow Concept: Syncer\nThis thickly armored nutcase is currently making a mess in my Bleach RP. Playing him is quite tedious.\u003C\/p\u003E"},"trail":[{"blog":{"name":"sepia-shade","active":true,"theme":{"header_full_width":3000,"header_full_height":3000,"header_focus_width":2048,"header_focus_height":1151,"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"569,3000,2256,0","header_image":"http:\/\/static.tumblr.com\/21e825d2a472b4902003499cfb2cfda6\/d1i6kvl\/qZgnebfi1\/tumblr_static_endktrmb6jkks0cko0ksc8koo.jpg","header_image_focused":"http:\/\/static.tumblr.com\/21e825d2a472b4902003499cfb2cfda6\/d1i6kvl\/p7Xnebfia\/tumblr_static_tumblr_static_endktrmb6jkks0cko0ksc8koo_focused_v3.jpg","header_image_scaled":"http:\/\/static.tumblr.com\/21e825d2a472b4902003499cfb2cfda6\/d1i6kvl\/qZgnebfi1\/tumblr_static_endktrmb6jkks0cko0ksc8koo_2048_v2.jpg","header_stretch":true,"link_color":"#529ECC","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"109163522622"},"content":"\u003Cp\u003EHollow Concept: Syncer\nThis thickly armored nutcase is currently making a mess in my Bleach RP. Playing him is quite tedious.\u003C\/p\u003E","content_raw":"\u003Cp\u003EHollow Concept: Syncer\u003Cbr\u003EThis thickly armored nutcase is currently making a mess in my Bleach RP. Playing him is quite tedious.\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"image_permalink":"http:\/\/sepia-shade.tumblr.com\/image\/109163522622","photos":[{"caption":"","alt_sizes":[{"width":1280,"height":1689,"url":"https:\/\/36.media.tumblr.com\/68dfecf4cf141ad683ff55a14f037c1c\/tumblr_nirivshvf01s0jlmho1_1280.jpg"},{"width":500,"height":660,"url":"https:\/\/40.media.tumblr.com\/68dfecf4cf141ad683ff55a14f037c1c\/tumblr_nirivshvf01s0jlmho1_500.jpg"},{"width":400,"height":528,"url":"https:\/\/41.media.tumblr.com\/68dfecf4cf141ad683ff55a14f037c1c\/tumblr_nirivshvf01s0jlmho1_400.jpg"},{"width":250,"height":330,"url":"https:\/\/40.media.tumblr.com\/68dfecf4cf141ad683ff55a14f037c1c\/tumblr_nirivshvf01s0jlmho1_250.jpg"},{"width":100,"height":132,"url":"https:\/\/36.media.tumblr.com\/68dfecf4cf141ad683ff55a14f037c1c\/tumblr_nirivshvf01s0jlmho1_100.jpg"},{"width":75,"height":75,"url":"https:\/\/36.media.tumblr.com\/68dfecf4cf141ad683ff55a14f037c1c\/tumblr_nirivshvf01s0jlmho1_75sq.jpg"}],"original_size":{"width":1280,"height":1689,"url":"https:\/\/36.media.tumblr.com\/68dfecf4cf141ad683ff55a14f037c1c\/tumblr_nirivshvf01s0jlmho1_1280.jpg"},"exif":{"Camera":"Motorola XT1030","ISO":800,"Aperture":"f\/2.4","Exposure":"1\/29th","FocalLength":"4mm"}}]}]}

サンプルプログラム

以上を踏まえて作成したPHPプログラムが下記です。まずは$consumer_keyだけを設定して起動してみて下さい。正常に動いたら、今度はパラメータを変更するなどして、色々なタグ検索を試してみて下さいね!

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$request_method = 'GET' ;		// リクエストメソッド
	$consumer_key = '' ;		// コンシューマーキー

	// パラメータ
	$params = array(
		'api_key' => $consumer_key ,
		'tag' => 'mario' ,		// 検索するタグ
		'limit' => 20 ,		// 取得件数
		'filter' => 'text' ,		// フィルター
	) ;

	// リクエストURL
	$request_url = 'https://api.tumblr.com/v2/tagged?' . http_build_query( $params , '' , '&' ) ; ;

	// コンテキストを用意
	$context = array(
		'http' => array(
			'method' => $request_method ,
		)
	) ;

	// CURLでリクエスト
	$curl = curl_init() ;

	// オプションのセット
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
	curl_setopt( $curl , CURLOPT_CUSTOMREQUEST , $request_method ) ;
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;

	// 実行
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;

	// 終了
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;
	$header = substr( $res1, 0, $res2['header_size'] ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

記事の投稿と削除

最後に、ブログに記事を投稿したり削除してみましょう。記事の投稿種類としては、「新規投稿」「既存記事の編集」「リブログ」の3種類があります。それぞれの投稿について、簡単に見ていきます。

新規投稿 [post]

記事を新しく投稿するには、下記のURLにPOSTメソッドでリクエストを送ります。OAuth認証が必要です。

POST https://api.tumblr.com/v2/blog/{ブログホスト}/post

共通パラメータ

Tumblrにはテキスト投稿、画像投稿、引用投稿など、様々な投稿タイプが存在します。下記のパラメータは、「全ての投稿タイプ」で共通して使用できるパラメータです。投稿タイプごとに指定できるパラメータは、次項から紹介していきます。

type
投稿タイプを指定する。指定しない場合はtextとなる。
text … テキスト
quote … 引用
photo … 画像
link … リンク
chat … チャット
audio … 音声
video … 動画
answer … アンサー
state
投稿ステータスを指定する。指定しない場合はpublishedとなる。
published … 公開
queued … 予約
draft … 下書き
private … プライベート
tags
Twitterにシェアする場合のコメント。「off」とだけ指定すると、Twitterへのシェアを強制的に中止する。"[URL]"という文字列は、記事のパーマリンクURLに変換される。
date
「予約投稿」の場合に、投稿時間を指定する。GMT基準のため、日本では+9時間する必要がある。
例: 2011-07-11 20:24:14 GMT
format
記事の記法を指定する。
html … HTML
markdown … MarkDown
slug
パーマリンクの後部に付くスラッグを指定する。Tumblrでは複数記事に、同じスラッグを指定できる。
例: ...com/post/90380091184/sample-post

Tumblrのパーマリンクについて

Tumblrの記事には、それぞれ同じスラッグを指定することができます。「URLが一緒になってしまうんじゃ…」と思いがちですが、パーマリンクは下記のように、「一意な記事ID」が含まれているため、重複することがありません。

http://{ブログホスト}/post/{記事ID}/{スラッグ}

テキスト投稿 [type:text]

テキスト投稿の場合、本文のbodyプロパティで、HTMLを利用することが可能です。

title
記事のタイトル。HTMLタグはエスケープされる。
body
記事の本文。HTMLタグは反映される。

画像投稿 [type:photo]

画像の投稿は、とても簡単です。sourceに画像のURLを指定するだけで、画像記事を投稿することが可能です。

caption
画像のキャプション。HTMLタグは反映される。
link
画像の関連URL。
source
記事に掲載する画像ファイルのURL。
data
画像の、URLエンコードされたバイナリデータを配列形式で指定。

引用投稿 [type:quote]

引用の投稿は、引用テキストのHTMLタグが反映されない点にご注意下さい。

quote
引用テキスト。HTMLタグはエスケープされる。
url
引用元のURL。

リンク投稿 [type:link]

リンクの投稿は、URLのみが必須となっています。

title
リンクのタイトル。HTMLタグはエスケープされる。
url
リンクのURL。
description
URLについての説明文。HTMLタグは反映される。

チャット投稿 [type:chat]

チャットは、conversationにログを指定してリクエストして下さい。名前部分と発言部分を:で分けることによって、Tumblrが:より前をラベル(発言者名)と認識します。発言は改行で分けて下さいね!

title
チャットのタイトル。HTMLタグはエスケープされる。
conversation
チャットの本文。HTMLタグはエスケープされる。

PHP

$params = array(
	'title' => 'はてブマンとふなっしーの会話" ,
	'conversation' => 'はてブマン:こんにちはブク
ふなっしー:こんにちはなっしー
はてブマン:こんばんはブク
ふなっしー:こんばんはなっしー' ,
) ;

音声投稿 [type:audio]

音声は、画像と同様、音声ファイルのURLをexternal_urlに指定することで投稿できます。例えばSoundCloudの場合は、ファイルではなく「コンテンツページのURL」を指定することも可能です。

caption
音声のキャプション。HTMLタグは反映される。
external_url
記事に掲載する音声ファイルのURL。
data
音声の、URLエンコードされたバイナリデータを配列形式で指定。

動画投稿 [type:video]

動画の場合は、YoutubeやVimeoといった動画投稿サイトの埋め込み用HTMLコードをそのまま指定することで、記事で動画を公開することができます。Tumblr APIって素敵ですね…。

caption
動画のキャプション。HTMLタグは反映される。
embed
埋め込み用HTMLコード。
data
動画の、URLエンコードされたバイナリデータを配列形式で指定。最大サイズは100MB。

取得できるJSON

「新規投稿」のAPIリクエストが成功した時に取得できるJSONデータです。「新規投稿」の場合は、ステータスコード201が返却されます。また、responseの中のidプロパティには、作成された記事のIDが格納されています。

JSON

{"meta":{"status":201,"msg":"Created"},"response":{"id":125063850802}}

サンプルプログラム

Tumblrで新規投稿をするためのPHPサンプルプログラムです。$access_token$access_token_secretをセットし、20行目に上記で紹介したサンプルパラメータを挿入して起動してみて下さいね。一度投稿が成功したら、さらにパラメータを変更して、色々と試してみて下さいね!

記事の冒頭で紹介している、関数のtumblr_oauth()を読み込むのと、あとは指定したパラメータとtypeを合わせるのを忘れないようにどうぞ…。サンプルデモを作動すると、こちらのブログに投稿されます。投稿日時を確認して下さいね。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;
	$access_token_secret = '' ;
	$host = 'syncerjp.tumblr.com' ;		// 対象ブログのホスト
	$request_url = 'https://api.tumblr.com/v2/blog/' . $host . '/post' ;	// リクエストURL
	$request_method = 'POST' ;		// リクエストメソッド
	$params = array(				// パラメータ
		'oauth_token' => $access_token ,
		'oauth_token_secret' => $access_token_secret ,
		'type' => 'text' ,			// 投稿タイプ
		'state' => 'published' ,	// 記事の状態
		'tags' => 'syncerjp' ,	// タグ
		'format' => 'html' ,	// フォーマット
		'slug' => 'api-test' ,	// 記事のスラッグ
		'title' => date( 'n月j日 H時i分' ) ,	// テキスト投稿の場合、記事のタイトル
		'body' => '<i>TumblrのAPI</i>を利用して、<b>' . date( 'n月j日のH時i分' ) . '</b>に投稿しました。' ,	// テキスト投稿の場合、記事の本文
	) ;

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , $params , 1 ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

記事の編集 [edit]

一度投稿した記事を編集するには、下記のURLにPOSTメソッドでリクエストします。

POST https://api.tumblr.com/v2/blog/{ブログホスト}/post/edit

パラメータ

パラメータは、「新規投稿」と全く一緒です。一点だけ、編集対象の記事IDを示すidを、新たに加えて下さい。

id
編集したい記事のID。

取得できるJSON

下記がリクエストで取得できるJSONデータです。「新規投稿」の場合と違い、ステータスコードは200となりますのでご注意下さい。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"id":125064772677}}

サンプルプログラム

下記がサンプルプログラムです。デモでは、こちらの記事を対象としています。起動後、時刻が修正されているかを確認してみて下さいね。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;
	$access_token_secret = '' ;
	$host = 'syncerjp.tumblr.com' ;		// 対象ブログのホスト
	$request_url = 'https://api.tumblr.com/v2/blog/' . $host . '/post/edit' ;	// リクエストURL
	$request_method = 'POST' ;		// リクエストメソッド
	$params = array(				// パラメータ
		'oauth_token' => $access_token ,
		'oauth_token_secret' => $access_token_secret ,
		'type' => 'text' ,			// 投稿タイプ
		'state' => 'published' ,	// 記事の状態
		'tags' => 'syncerjp' ,	// タグ
		'format' => 'html' ,	// フォーマット
		'slug' => 'api-test' ,	// 記事のスラッグ
		'title' => 'APIの編集テスト用の記事' ,	// テキスト投稿の場合、記事のタイトル
		'body' => '<p><i>TumblrのAPI</i>を利用して、<b>' . date( 'Y年n月j日のH時i分s秒' ) . '</b>に編集しました。</p><p>直っているかしら…?</p><p>ちなみに反映されるのにちょっとだけ時間がかかるみたいです。</p>' ,	// テキスト投稿の場合、記事の本文
		'id' => '125064772677' ,
	) ;

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , $params , 1 ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

リブログ [reblog]

続いて、お気に入りの記事をリブログしてみましょう。それには、下記のURLにPOSTメソッドでリクエストします。

POST https://api.tumblr.com/v2/blog/{ブログホスト}/post/reblog

パラメータ

パラメータは、リブログ対象記事の「ID」と「リブログキー」を指定します。なお、コメントを付ける場合はcommentプロパティで指定します。

id
リブログしたい記事のID。
reblog_key
リブログしたい記事のリブログキー。
comment
リブログに付けるコメント。

取得できるJSON

リクエストが成功した時に取得できるJSONデータです。「新規投稿」の場合と同様、ステータスコードで201が返却されます。idプロパティには、リブログで作成した新しい記事のIDが格納されています。

JSON

{"meta":{"status":201,"msg":"Created"},"response":{"id":125065483327}}

サンプルプログラム

下記がサンプルプログラムです。デモでは、こちらの記事の記事をリブログするようになっています。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;
	$access_token_secret = '' ;
	$host = 'syncerjp.tumblr.com' ;		// 対象ブログのホスト
	$request_url = 'https://api.tumblr.com/v2/blog/' . $host . '/post/reblog' ;	// リクエストURL
	$request_method = 'POST' ;		// リクエストメソッド
	$params = array(				// パラメータ
		'oauth_token' => $access_token ,
		'oauth_token_secret' => $access_token_secret ,
		'id' => '90380091184' ,			// 記事のID
		'reblog_key' => 'e43ysAS4' ,	// 記事のリブログキー
	) ;

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , $params , 1 ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

記事の削除 [delete]

記事を削除することが可能です。そのためには、下記のURLにPOSTメソッドでリクエストを送って下さい!

POST https://api.tumblr.com/v2/blog/{ブログホスト}/post/delete

パラメータ

パラメータは、リブログ対象記事の「ID」と「リブログキー」を指定します。なお、コメントを付ける場合はcommentプロパティで指定します。

id
削除したい記事のID。

取得できるJSON

下記がリクエストで取得できるJSONデータです。ステータスコードは「既存記事の編集」と同じく、200が返ってきます。

JSON

{"meta":{"status":200,"msg":"OK"},"response":{"id":125064542172}}

サンプルプログラム

下記がサンプルプログラムです。デモは色々と無理があるので、ありませぬ…。ご了承下さい。

PHP

<?php

	// Tumblr用のライブラリの読み込み
	require './tumblr-oauth-library.php' ;

	// 設定
	$access_token = '' ;
	$access_token_secret = '' ;
	$host = 'syncerjp.tumblr.com' ;		// 対象ブログのホスト
	$request_url = 'https://api.tumblr.com/v2/blog/' . $host . '/post/delete' ;	// リクエストURL
	$request_method = 'POST' ;		// リクエストメソッド
	$params = array(				// パラメータ
		'oauth_token' => $access_token ,
		'oauth_token_secret' => $access_token_secret ,
		'id' => '125064542172' ,			// 記事のID
	) ;

	// JSONデータとレスポンスヘッダーをセット(配列)で取得する
	list( $json , $header ) = tumblr_oauth( $request_url , $request_method , $params , 1 ) ;

	// HTML用
	$html = '' ;

	// エラー判定
	if( !$json || !$header )
	{
		$html .= '<p><mark>データを取得できませんでした…。</mark></p>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

	// アプリケーション連携の解除
	$html .= '<h2>アプリケーション連携の解除</h2>' ;
	$html .= '<p>このアプリケーションとの連携は、下記設定ページで解除することができます。</p>' ;
	$html .= '<p><a href="https://www.tumblr.com/settings/apps" target="_blank">https://www.tumblr.com/settings/apps</a></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

記事のJSON

記事のJSONデータの項目は多岐に渡ります。加えて、テキスト投稿、画像投稿など、投稿タイプによって、含まれるプロパティの種類も違います。この章では、記事のjSONデータの構造、各プロパティについて、紹介していきます。

JSONデータの構造

1つの記事のJSONデータは、次のような構造になっています。

JSON

{
	"blog_name": "arayutest",
	"id": 90345602112,
	"post_url": "http://arayutest.tumblr.com/...",
	"slug": "1022-p-a-href-http-ww...",
	"type": "photo",
	"date": "2014-06-30 11:42:06 GMT",
	"timestamp": 1404128526,
	"state": "published",
	"format": "html",
	"reblog_key": "eJGxcsjb",
	"tags": [
		"タグ1",
		"タグ2"
	],
	"short_url": "http://tmblr.co/ZXWa6n1K917n0",
	"followed": true,
	"highlighted": [

	],
	"liked": true,
	"note_count": 356,
	"link_url": "http://www.sephora.com/th...",
	"image_permalink": "http://arayute...",
	"notes": [
		{
			"timestamp": "1404245974",
			"blog_name": "arayutest",
			"blog_url": "http://arayutest.tumblr.com/",
			"post_id": "90484637102",
			"type": "reblog"
		},
		{
			"type": "like"
		},
		{
			"type": "posted"
		}
	],
	"reblogged_from_id": "89681336342",
	"reblogged_from_url": "http://nih...",
	"reblogged_from_name": "nihongo",
	"reblogged_from_title": "Tumblr Nihongo",
	"reblogged_root_id": "88359543029",
	"reblogged_root_url": "http://fum3...",
	"reblogged_root_name": "fum3",
	"reblogged_root_title": "yururinooheso",
	"can_reply": false
}

リアクションとリブログのデータについて

notes(リアクション)、reblogged...(リブログ)のプロパティは、それぞれデフォルトでは含まれていません。オプションパラメータのnotes_inforeblog_infotrueを指定することで、JSONデータに追加されます。

共通のプロパティ

全ての投稿タイプで共通して含まれているプロパティです。

type
記事の投稿タイプ。
text … テキスト
quote … 引用
photo … 画像
link … リンク
chat … チャット
audio … 音声
video … 動画
answer … アンサー
blog_name
ブログ名。
id
記事のID。
post_url
記事のパーマリンク。
timestamp
記事の投稿日のUNIX TIMESTAMP。
date
記事の投稿日(GMT基準なので9時間の時差)。
format
記事の記法。
reblog_key
リブログキー。
tags
記事のタグ(配列形式)。
bookmarklet
ブックマークレット形式の投稿か否か。違う場合はプロパティ自体が存在しない。
mobile
モバイル、Eメール形式の投稿か否か。違う場合はプロパティ自体が存在しない。
source_url
引用元のURL。引用ではない場合はプロパティ自体が存在しない。
source_title
引用元のタイトル。引用ではない場合はプロパティ自体が存在しない。
liked
自分がスキを付けているか否か。OAuth認証以外のリクエストの場合、プロパティ自体が存在しない。
state
記事のステータス。
published … 公開済み
queued … 予約状態
draft … 下書き
private … プライベート
total_posts
総投稿数。
slug
パーマリンクのスラッグ。
short_url
記事の短縮URL。
note_count
リアクション(Notes)の数。
link_url
画像の引用元リンク。
image_permalink
画像のパーマリンク。
notes
リアクション(Notes)の一覧(配列形式)。
notes->timestamp
リアクションをした日時。
notes->blog_name
リアクションをしたユーザーのID。
notes->blog_url
リアクションをしたユーザーの主ブログID。
notes->post_id
リブログした記事のID。
notes->type
リアクションのタイプ。
reblog … リブログ
like … ライク
posted … 投稿した(投稿者自身)
reblogged_from_id
リブログ元の記事ID。
reblogged_from_url
リブログ元の記事パーマリンク。
reblogged_from_name
リブログ元のブログID。
reblogged_from_title
リブログ元のブログ名。
reblogged_root_id
オリジナル記事のID。
reblogged_root_url
オリジナル記事のパーマリンク。
reblogged_root_name
オリジナル記事のブログID。
reblogged_root_title
オリジナル記事のブログ名。

テキスト投稿 [text]

テキストタイプの投稿のJSONデータに含まれるプロパティです。

JSON

{"blog_name":"syncerjp","id":125057459367,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057459367\/\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b","slug":"\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b","type":"text","date":"2015-07-26 04:55:17 GMT","timestamp":1437886517,"state":"published","format":"html","reblog_key":"wY07933p","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU0MId","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"title":"\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b","body":"\u003Cp\u003E\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003Eテキストの投稿記事でございます。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"125057459367"},"content":"\u003Cp\u003E\u30c6\u30ad\u30b9\u30c8\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003Eテキストの投稿記事でございます。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"can_reply":true}

特有のプロパティ

title
記事のタイトル。
body
記事の本文。

画像投稿 [photo]

画像タイプの投稿のJSONデータに含まれるプロパティです。画像投稿の場合、各種サイズのデータを配列形式で含んだalt_sizesと、オリジナルサイズのデータを含んだoriginal_sizeプロパティが存在します。

JSON

{"blog_name":"syncerjp","id":125057498732,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057498732\/\u753b\u50cf\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059","slug":"\u753b\u50cf\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059","type":"photo","date":"2015-07-26 04:55:52 GMT","timestamp":1437886552,"state":"published","format":"html","reblog_key":"j7p4A63e","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU0Vvi","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"caption":"\u003Cp\u003E\u753b\u50cf\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003E画像の投稿記事でございます。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"125057498732"},"content":"\u003Cp\u003E\u753b\u50cf\u306e\u6295\u7a3f\u8a18\u4e8b\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003E画像の投稿記事でございます。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"image_permalink":"http:\/\/syncerjp.tumblr.com\/image\/125057498732","photos":[{"caption":"","alt_sizes":[{"width":256,"height":256,"url":"https:\/\/40.media.tumblr.com\/8ed814df7f88fffba1e92eca5d7ad33f\/tumblr_ns2wd4jPJa1uc55meo1_400.jpg"},{"width":250,"height":250,"url":"https:\/\/36.media.tumblr.com\/8ed814df7f88fffba1e92eca5d7ad33f\/tumblr_ns2wd4jPJa1uc55meo1_250.jpg"},{"width":100,"height":100,"url":"https:\/\/40.media.tumblr.com\/8ed814df7f88fffba1e92eca5d7ad33f\/tumblr_ns2wd4jPJa1uc55meo1_100.jpg"},{"width":75,"height":75,"url":"https:\/\/36.media.tumblr.com\/8ed814df7f88fffba1e92eca5d7ad33f\/tumblr_ns2wd4jPJa1uc55meo1_75sq.jpg"}],"original_size":{"width":256,"height":256,"url":"https:\/\/40.media.tumblr.com\/8ed814df7f88fffba1e92eca5d7ad33f\/tumblr_ns2wd4jPJa1uc55meo1_400.jpg"}}],"can_reply":true}

特有のプロパティ

caption
画像のキャプション。
alt_sizes
サイズ別のデータ(配列形式)。
original_size
オリジナルサイズのデータ。

引用投稿 [quote]

引用タイプの投稿のJSONデータに含まれるプロパティです。

JSON

{"blog_name":"syncerjp","id":125057533267,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057533267\/\u30d6\u30ed\u30b0\u30e1\u30c7\u30a3\u30a2\u30df\u30c3\u30af\u30b9\u3068\u3057\u3066\u591a\u304f\u306e\u4eba\u4f01\u696d\u306b\u611b\u3055\u308c\u3066\u3044\u308btumblr","slug":"\u30d6\u30ed\u30b0\u30e1\u30c7\u30a3\u30a2\u30df\u30c3\u30af\u30b9\u3068\u3057\u3066\u591a\u304f\u306e\u4eba\u4f01\u696d\u306b\u611b\u3055\u308c\u3066\u3044\u308btumblr","type":"quote","date":"2015-07-26 04:56:23 GMT","timestamp":1437886583,"state":"published","format":"html","reblog_key":"kfG0DwpT","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU0eLJ","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"text":"\u30d6\u30ed\u30b0\u3001\u30e1\u30c7\u30a3\u30a2\u30df\u30c3\u30af\u30b9\u3068\u3057\u3066\u591a\u304f\u306e\u4eba\u3001\u4f01\u696d\u306b\u611b\u3055\u308c\u3066\u3044\u308bTumblr\u3002","source":"\u003Ca href=\u0022https:\/\/syncer.jp\/tumblr-api-matome\/demo\/get-blog-posts.php\u0022\u003Ehttps:\/\/syncer.jp\/tumblr-api-matome\u003C\/a\u003E\u003Cbr\/\u003E","reblog":{"tree_html":"","comment":"\u003Ca href=\u0022https:\/\/syncer.jp\/tumblr-api-matome\/demo\/get-blog-posts.php\u0022\u003Ehttps:\/\/syncer.jp\/tumblr-api-matome\u003C\/a\u003E\u003Cbr\u003E"},"can_reply":true}

特有のプロパティ

text
引用したテキスト。
source
出典欄に入力したテキスト。

リンク投稿 [link]

リンクタイプの投稿のJSONデータに含まれるプロパティです。

JSON

{"blog_name":"syncerjp","id":125057581992,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057581992\/tumblr-api\u3067web\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u308a\u305f\u3044\u5168\u3066\u306e\u4eba\u306b\u5411\u3051\u3066\u66f8\u304d\u307e\u3057\u305f","slug":"tumblr-api\u3067web\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u308a\u305f\u3044\u5168\u3066\u306e\u4eba\u306b\u5411\u3051\u3066\u66f8\u304d\u307e\u3057\u305f","type":"link","date":"2015-07-26 04:57:04 GMT","timestamp":1437886624,"state":"published","format":"html","reblog_key":"9zszLB0k","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU0qEe","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"title":"Tumblr API\u3067web\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u308a\u305f\u3044\u5168\u3066\u306e\u4eba\u306b\u5411\u3051\u3066\u66f8\u304d\u307e\u3057\u305f","url":"https:\/\/syncer.jp\/tumblr-api-matome","link_image":"https:\/\/33.media.tumblr.com\/tumblr_ns2wf4usbG1uc55me_og.png","link_author":null,"excerpt":"Tumblr API\u306e\u65e5\u672c\u8a9e\u30de\u30cb\u30e5\u30a2\u30eb\u3067\u3059\u3002\u521d\u5fc3\u8005\u306e\u65b9\u3067\u3082\u5206\u304b\u308b\u3088\u3046\u3001\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3092\u591a\u6570\u7528\u610f\u3057\u3066\u307e\u3059\u3002","publisher":"syncer.jp","photos":[{"caption":"","alt_sizes":[{"url":"https:\/\/41.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_1280.png","width":640,"height":480},{"url":"https:\/\/40.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_540.png","width":540,"height":405},{"url":"https:\/\/41.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_500.png","width":500,"height":375},{"url":"https:\/\/40.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_400.png","width":400,"height":300},{"url":"https:\/\/41.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_250.png","width":250,"height":188},{"url":"https:\/\/41.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_100.png","width":100,"height":75},{"url":"https:\/\/41.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_75sq.png","width":75,"height":75}],"original_size":{"width":640,"height":480,"url":"https:\/\/41.media.tumblr.com\/827599211685793d353c9240f48e9fb4\/tumblr_ns2wf4usbG1uc55me_og_1280.png"}}],"description":"\u003Cp\u003ETumblr API\u306e\u4f7f\u3044\u65b9\u3092\u307e\u3068\u3081\u305f\u8a18\u4e8b\u3067\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003ETumblr APIの使い方をまとめた記事です。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"125057581992"},"content":"\u003Cp\u003ETumblr API\u306e\u4f7f\u3044\u65b9\u3092\u307e\u3068\u3081\u305f\u8a18\u4e8b\u3067\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003ETumblr APIの使い方をまとめた記事です。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"can_reply":true}

特有のプロパティ

title
リンクのタイトル。
url
リンクのURL。
description
リンクの説明文。

チャット投稿 [chat]

チャットタイプの投稿のJSONデータに含まれるプロパティです。Tumblrはチャットログを改行ごとに分けて解析し、dialogueプロパティに配列形式で格納しています。

JSON

{"blog_name":"syncerjp","id":125057613402,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057613402\/\u30c1\u30e3\u30c3\u30c8\u306e\u6295\u7a3f","slug":"\u30c1\u30e3\u30c3\u30c8\u306e\u6295\u7a3f","type":"chat","date":"2015-07-26 04:57:32 GMT","timestamp":1437886652,"state":"published","format":"html","reblog_key":"Av4R0pVz","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU0xvQ","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"title":"\u30c1\u30e3\u30c3\u30c8\u306e\u6295\u7a3f","body":"\u3042\u3089\u3086: \u795e\u306f\u6b7b\u3093\u3060\nSyncer: \u795e\u306f\u6b7b\u3093\u3067\u307e\u305b\u3093","dialogue":[{"name":"\u3042\u3089\u3086","label":"\u3042\u3089\u3086:","phrase":"\u795e\u306f\u6b7b\u3093\u3060"},{"name":"Syncer","label":"Syncer:","phrase":"\u795e\u306f\u6b7b\u3093\u3067\u307e\u305b\u3093"}],"can_reply":true}

特有のプロパティ

title
記事のタイトル。
body
記事の本文。
dialogue
チャットの各発言データ(配列形式)。

音声投稿 [audio]

音声タイプの投稿のJSONデータに含まれるプロパティです。SoundCloudなどから音声ファイルを引っ張ってきた時に、曲名やアルバム名など多数のプロパティが含まれる場合があります。

JSON

{"blog_name":"syncerjp","id":125057722197,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057722197\/\u79c1\u306e\u6328\u62f6\u3067\u3059","slug":"\u79c1\u306e\u6328\u62f6\u3067\u3059","type":"audio","date":"2015-07-26 04:59:12 GMT","timestamp":1437886752,"state":"published","format":"html","reblog_key":"2DRx3c1h","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU1MTL","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"artist":"\u3042\u3089\u3086","album":"\u6328\u62f6\u96c6","album_art":"https:\/\/38.media.tumblr.com\/tumblr_ns2wioPEM81uc55meo1_1437886752_cover.png","caption":"\u003Cp\u003E\u79c1\u306e\u6328\u62f6\u3067\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003E私の挨拶です。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"125057722197"},"content":"\u003Cp\u003E\u79c1\u306e\u6328\u62f6\u3067\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003E私の挨拶です。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"player":"\u003Cembed type=\u0022application\/x-shockwave-flash\u0022 src=\u0022https:\/\/secure.assets.tumblr.com\/swf\/audio_player.swf?audio_file=https%3A%2F%2Fwww.tumblr.com%2Faudio_file%2Fsyncerjp%2F125057722197%2Ftumblr_ns2wioPEM81uc55me&color=FFFFFF\u0022 height=\u002227\u0022 width=\u0022207\u0022 quality=\u0022best\u0022 wmode=\u0022opaque\u0022\u003E\u003C\/embed\u003E","embed":"\u003Ciframe class=\u0022tumblr_audio_player tumblr_audio_player_125057722197\u0022 src=\u0022http:\/\/syncerjp.tumblr.com\/post\/125057722197\/audio_player_iframe\/syncerjp\/tumblr_ns2wioPEM81uc55me?audio_file=https%3A%2F%2Fwww.tumblr.com%2Faudio_file%2Fsyncerjp%2F125057722197%2Ftumblr_ns2wioPEM81uc55me\u0022 frameborder=\u00220\u0022 allowtransparency=\u0022true\u0022 scrolling=\u0022no\u0022 width=\u0022500\u0022 height=\u0022169\u0022\u003E\u003C\/iframe\u003E","plays":4,"audio_url":"https:\/\/www.tumblr.com\/audio_file\/syncerjp\/125057722197\/tumblr_ns2wioPEM81uc55me","audio_source_url":"https:\/\/www.tumblr.com\/audio_file\/syncerjp\/125057722197\/tumblr_ns2wioPEM81uc55me","audio_type":"tumblr","can_reply":true}

特有のプロパティ

caption
音声のキャプション。
player
埋め込み用のHTMLタグ。
plays
音声の長さ(秒)。
album_art
音声イメージのHTMLタグ。投稿に音声イメージが含まれていない場合、プロパティ自体が存在しない。
artist
アーティスト名。投稿にアーティスト名が含まれていない場合、プロパティ自体が存在しない。
album
曲のアルバム名。投稿にアルバム名が含まれていない場合、プロパティ自体が存在しない。
track_name
曲名。投稿に曲名が含まれていない場合、プロパティ自体が存在しない。
track_number
曲番号。投稿に曲番号が含まれていない場合、プロパティ自体が存在しない。
year
曲の発表年。投稿に発表年が含まれていない場合、プロパティ自体が存在しない。
is_external
外部のファイルか否か。投稿が外部のファイルじゃない場合、プロパティ自体が存在しない。
audio_type
音声タイプ。SoundCloudのURL(外部ファイル)を貼った場合はsoundcloudになる。投稿が外部のファイルじゃない場合、プロパティ自体が存在しない。

動画投稿 [movie]

動画は画像と同様、サイズ別のデータが、配列形式でplayerプロパティに含まれる形になります。

JSON

{"blog_name":"syncerjp","id":125057806260,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125057806260\/\u79c1\u306e\u53ef\u611b\u3044\u611b\u72ac\u3067\u3059","slug":"\u79c1\u306e\u53ef\u611b\u3044\u611b\u72ac\u3067\u3059","type":"video","date":"2015-07-26 05:00:25 GMT","timestamp":1437886825,"state":"published","format":"html","reblog_key":"TnhlOlX3","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qU1g_q","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"caption":"\u003Cp\u003E\u79c1\u306e\u53ef\u611b\u3044\u611b\u72ac\u3067\u3059\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003E私の可愛い愛犬です。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":"125057806260"},"content":"\u003Cp\u003E\u79c1\u306e\u53ef\u611b\u3044\u611b\u72ac\u3067\u3059\u3002\u003C\/p\u003E","content_raw":"\u003Cp\u003E私の可愛い愛犬です。\u003C\/p\u003E","is_current_item":true,"is_root_item":true}],"video_url":"https:\/\/vt.tumblr.com\/tumblr_ns2wkff0sJ1uc55me.mp4","html5_capable":true,"thumbnail_url":"https:\/\/31.media.tumblr.com\/tumblr_ns2wkff0sJ1uc55me_frame1.jpg","thumbnail_width":1280,"thumbnail_height":720,"duration":16,"player":[{"width":250,"embed_code":"\n\u003Cvideo  id=\u0027embed-55b49aa372372064165966\u0027 class=\u0027crt-video crt-skin-default\u0027 width=\u0027250\u0027 height=\u0027140\u0027 poster=\u0027https:\/\/31.media.tumblr.com\/tumblr_ns2wkff0sJ1uc55me_frame1.jpg\u0027 preload=\u0027none\u0027 data-crt-video data-crt-options=\u0027{\u0022duration\u0022:16,\u0022hdUrl\u0022:\u0022https:\\/\\/api.tumblr.com\\/video_file\\/125057806260\\/tumblr_ns2wkff0sJ1uc55me\u0022,\u0022filmstrip\u0022:{\u0022url\u0022:\u0022https:\\/\\/38.media.tumblr.com\\/previews\\/tumblr_ns2wkff0sJ1uc55me_filmstrip.jpg\u0022,\u0022width\u0022:\u0022200\u0022,\u0022height\u0022:\u0022112\u0022}}\u0027 \u003E\n    \u003Csource src=\u0022https:\/\/api.tumblr.com\/video_file\/125057806260\/tumblr_ns2wkff0sJ1uc55me\/480\u0022 type=\u0022video\/mp4\u0022\u003E\n\u003C\/video\u003E\n"},{"width":400,"embed_code":"\n\u003Cvideo  id=\u0027embed-55b49aa372c08509815217\u0027 class=\u0027crt-video crt-skin-default\u0027 width=\u0027400\u0027 height=\u0027225\u0027 poster=\u0027https:\/\/31.media.tumblr.com\/tumblr_ns2wkff0sJ1uc55me_frame1.jpg\u0027 preload=\u0027none\u0027 data-crt-video data-crt-options=\u0027{\u0022duration\u0022:16,\u0022hdUrl\u0022:\u0022https:\\/\\/api.tumblr.com\\/video_file\\/125057806260\\/tumblr_ns2wkff0sJ1uc55me\u0022,\u0022filmstrip\u0022:{\u0022url\u0022:\u0022https:\\/\\/38.media.tumblr.com\\/previews\\/tumblr_ns2wkff0sJ1uc55me_filmstrip.jpg\u0022,\u0022width\u0022:\u0022200\u0022,\u0022height\u0022:\u0022112\u0022}}\u0027 \u003E\n    \u003Csource src=\u0022https:\/\/api.tumblr.com\/video_file\/125057806260\/tumblr_ns2wkff0sJ1uc55me\/480\u0022 type=\u0022video\/mp4\u0022\u003E\n\u003C\/video\u003E\n"},{"width":500,"embed_code":"\n\u003Cvideo  id=\u0027embed-55b49aa373342527051763\u0027 class=\u0027crt-video crt-skin-default\u0027 width=\u0027500\u0027 height=\u0027281\u0027 poster=\u0027https:\/\/31.media.tumblr.com\/tumblr_ns2wkff0sJ1uc55me_frame1.jpg\u0027 preload=\u0027none\u0027 data-crt-video data-crt-options=\u0027{\u0022duration\u0022:16,\u0022hdUrl\u0022:\u0022https:\\/\\/api.tumblr.com\\/video_file\\/125057806260\\/tumblr_ns2wkff0sJ1uc55me\u0022,\u0022filmstrip\u0022:{\u0022url\u0022:\u0022https:\\/\\/38.media.tumblr.com\\/previews\\/tumblr_ns2wkff0sJ1uc55me_filmstrip.jpg\u0022,\u0022width\u0022:\u0022200\u0022,\u0022height\u0022:\u0022112\u0022}}\u0027 \u003E\n    \u003Csource src=\u0022https:\/\/api.tumblr.com\/video_file\/125057806260\/tumblr_ns2wkff0sJ1uc55me\/480\u0022 type=\u0022video\/mp4\u0022\u003E\n\u003C\/video\u003E\n"}],"video_type":"tumblr","can_reply":true}

特有のプロパティ

caption
動画のキャプション。
player
埋め込み用のHTMLタグ。

アンサー投稿 [answer]

アンサー(回答)タイプの投稿のJSONデータに含まれるプロパティです。questionanswerともに、HTMLが反映されています。

JSON

{"blog_name":"syncerjp","id":125069068607,"post_url":"http:\/\/syncerjp.tumblr.com\/post\/125069068607\/\u3053\u308c\u306f\u8cea\u554f\u306e\u6295\u7a3f\u3067\u3054\u3056\u3044\u307e\u3059\u3042\u306a\u305f\u306f\u3069\u3093\u306a\u4fe1\u5ff5\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u304b","slug":"\u3053\u308c\u306f\u8cea\u554f\u306e\u6295\u7a3f\u3067\u3054\u3056\u3044\u307e\u3059\u3042\u306a\u305f\u306f\u3069\u3093\u306a\u4fe1\u5ff5\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u304b","type":"answer","date":"2015-07-26 08:33:56 GMT","timestamp":1437899636,"state":"published","format":"html","reblog_key":"00GzxCSB","tags":[],"short_url":"http:\/\/tmblr.co\/ZbIytj1qUiea-","recommended_source":null,"followed":false,"post_author":"arayutw","highlighted":[],"liked":false,"note_count":0,"asking_name":"syncer-guest","asking_url":"http:\/\/syncer-guest.tumblr.com\/","question":"\u3053\u308c\u306f\u8cea\u554f\u306e\u6295\u7a3f\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u3042\u306a\u305f\u306f\u3069\u3093\u306a\u4fe1\u5ff5\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u304b\uff1f","answer":"\u003Cp\u003E\u3053\u308c\u306f\u56de\u7b54\u306e\u6295\u7a3f\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u79c1\u306f\u5927\u3057\u305f\u4fe1\u5ff5\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u003C\/p\u003E","reblog":{"tree_html":"","comment":"\u003Cp\u003Eこれは回答の投稿でございます。私は大した信念を持っていません。\u003C\/p\u003E"},"trail":[{"blog":{"name":"syncerjp","active":true,"theme":{"avatar_shape":"square","background_color":"#FAFAFA","body_font":"Helvetica Neue","header_bounds":"","header_image":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_focused":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_image_scaled":"http:\/\/assets.tumblr.com\/images\/default_header\/optica_pattern_14_focused_v3.png?_v=8c2d3b00544b7efbc4ac06dc3f80e374","header_stretch":true,"link_color":"#d36015","show_avatar":true,"show_description":true,"show_header_image":true,"show_title":true,"title_color":"#444444","title_font":"Gibson","title_font_weight":"bold"}},"post":{"id":125069068607},"content":"\u003Cp\u003E\u3053\u308c\u306f\u56de\u7b54\u306e\u6295\u7a3f\u3067\u3054\u3056\u3044\u307e\u3059\u3002\u79c1\u306f\u5927\u3057\u305f\u4fe1\u5ff5\u3092\u6301\u3063\u3066\u3044\u307e\u305b\u3093\u3002\u003C\/p\u003E","content_raw":"","is_current_item":true,"is_root_item":true}],"can_reply":true}

特有のプロパティ

asking_name
質問者のブログID。
asking_url
質問者のブログURL。
question
質問テキスト。
answer
回答テキスト。

Tumblr APIを利用したアイデア

「TumblrのAPIを上手く利用しているなー」と思っていたのが、プログラミング学習サイト「ドットインストール」の公式ブログです。現在はリニューアルされて内容は変わったのですが、以前は、Twitter上でドットインストールについて言及しているツイートが、Tumblrに引用投稿でアップされていました。

以前のドットインストールの公式ブログ
以前のドットインストールの公式ブログ

これは恐らくですが、Twitterの検索APIでドットインストール関連のキーワードを含むツイートをピックアップし、それを、今度はTumblr APIを利用して自動的にブログにアップしていたんだと思います。ユーザーの自社サービスに対する感想を、自動で、このように公開するシステムはとても良いアイデアですよね。

TumblrのAPIを利用すれば、このような自動ブログを簡単に作成することができます。IFTTTではフォローし切れない「細かい調整」だって、実現できることでしょう。Instagramと連携して写真作品を、foursquareと連携して行動ログを、色んな情報を自動で公開するブログができそうですね。この記事が、Tumblr APIを利用した素晴らしいwebサービスの誕生の助けになれば、嬉しく思います!

ダウンロード

この記事で紹介してきた各サンプルプログラムを配布しています。よろしければ、Tumblr APIにおけるHello World用としてご利用下さい。