こちら「Tumblr API(公式)」と、 こちら「Tumblr API v2 日本語訳」 を見ながら、
Tumblr APIを使った投稿データの取得にチャレンジしてみます。
まず、マニュアルを確認してみましょう。
api.tumblr.com/v2/blog/{base-hostname}/posts[/type]?api_key={key}&[optional-params=]
HTTP Method:GET
認証:APIkey
このサイトの{base-hostname}は、「stainless-note.tumblr.com」で、
APIkeyが、「xxXxxxXxxxxXxxxxxXxxxxxxX」だったとして、
必須のパラメータは、この2つなので、とりあえず・・・
api.tumblr.com/v2/blog/stainless-note.tumblr.com/posts?api_key=xxXxxxXxxxxXxxxxxXxxxxxxX
このURLで取得できるはずです。
PHPのコードなら、こんな感じ・・・
<?php $domain = "stainless-note.tumblr.com"; $api_key = "xxXxxxXxxxxXxxxxxXxxxxxxX"; $responses = file_get_contents("http://api.tumblr.com/v2/blog/$domain/posts?api_key=$api_key"); $responses = json_decode($responses); print_r($responses); ?>
取得データはJSON形式なので、json_decode();でデコードします。
すると・・・
stdClass Object ( [meta] => stdClass Object ( [status] => 200 [msg] => OK ) [response] => stdClass Object ( [blog] => stdClass Object ( [title] => Stainless Note [posts] => 6 [name] => stainless-note [url] => http://stainless-note.tumblr.com/ [updated] => 1356040980 [description] => [ask] => 1 [ask_anon] => [share_likes] => ) [posts] => Array ( [0] => stdClass Object ( [blog_name] => stainless-note [id] => 38410914368 [post_url] => http://stainless-note.tumblr.com/post/38410914368/tumblr-html [slug] => tumblr-html [type] => text [date] => 2012-12-20 22:03:00 GMT [timestamp] => 1356040980 [state] => published [format] => html [reblog_key] => 6u81K3mQ [tags] => Array ( [0] => Tumblr [1] => HTML [2] => Javascript ) [short_url] => http://tmblr.co/ZLNsbtZnU0f0 [highlighted] => Array ( ) [note_count] => 0 [title] => Tumblrには投稿できないHTMLタグ [body] => <p>前回、「<a href="http://stainless-note.tumblr.com/post/38310076940/tumblr-api">Tumblr API を使ってアイコン画像を取得する方法</a>」という記事を書いていて、 (以下略)
取得できたみたいです!
次は、Javascript。jQueryを使って取得してみます。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
jQueryの読み込みもお忘れなく。
$(function(){ domain ="stainless-note.tumblr.com"; api_key ="xxXxxxXxxxxXxxxxxXxxxxxxX"; $.getJSON( "http://api.tumblr.com/v2/blog/"+domain+"/posts?api_key="+api_key+"&jsonp=?", function(data){ console.log(data); } ); });
ポイントは最後につけた「&jsonp=?」これがないと取得できません。
取得したdataオブジェクトをコンソールに出力しています。
Google Chrome だと、
メニューの「表示」>「開発/管理」>「JavaScriptコンソール」で確認できます。
取得できてますね!
では、記事一覧として表示してみます。
<ul id="post_list"> </ul>
HTML側をこうして
$(function(){ domain ="stainless-note.tumblr.com"; api_key ="xxXxxxXxxxxXxxxxxXxxxxxxX"; $.getJSON( "http://api.tumblr.com/v2/blog/"+domain+"/posts?api_key="+api_key+"&limit=5&jsonp=?", function(data){ if( data['meta']['status']!=200){ return;//取得失敗なので終了。 } $.each(data['response']['posts'],function(){ $("#post_list").append('<li>'+ this['title'] +'</li>'); }); } ); });
このJavascriptコードを実行すると・・・
<ul id="post_list"> <li>Tumblrには投稿できないHTMLタグ</li> <li>Tumblr API を使ってアイコン画像を取得する方法</li> <li>iMac(2012)の電源ボタンが無い!</li> <li>徳丸浩のtumblr: 書式文字列によるSQLインジェクション攻撃例</li> <li>Tumblrで「SyntaxHighlighter」を使うときの注意点</li> </ul>
こうなります。「limit=5」を追加して5件に絞ってます。
「data[‘meta’]['status’]!=200」でステータスを確認します。
200なら成功、それ以外なら失敗です。
data['response’]['posts’]に記事データが配列として格納されてるので、
繰り返し処理を使って#post_listに、投稿タイトルを追加しました。
だいぶと、それらしい形ができてきました。
これを応用すれば、何かできそうな気がしますね。
ちなみに、画像投稿の場合、記事タイトルは無いので、undefinedになってしまいます。
ご注意ください。
ä¸è¨è¨äºã¯ã¨ã¦ãããããããæ¸ãã¦ããã¾ãã ä¸è¨ãåèã«ãã ç¹å®ã®ã¿ã°ï¼æ稿è¨äºã¨åãã¿ã°ï¼ã®è¨äºãåå¾ããè¨äºã«ãªã³ã¯ããããã«ãã¾ããã api_key...