tumblrのAPI

tumblr-icon.gif TumblrのAPIが以外にわかりやすいくてちょっとびっくりしました。様々なソーシャルサイトがある中でも国際的且つわかりやすいデザインという意味ではTumblrはかなりいいインターフェイスをもってます。通常のブログのように日記風な使い方から自分自身の公開データベースとして、リンク集として、ただのメモとして、いろいろ使い勝手がいいです。やたらとおかしなゲームがあったりとか広告がうるさいとかもないです。

 まずは、わかりやすい情報から。
 これでだいたいのことができる筈です。ですが、ちょっとわかりやすく解説、及び使えるようにサンプル。

Tumblrのいろいろ

 Tumblrが扱っている種類のメディアは、
text文章
quote引用
photo写真
linkリンク
chatチャット
video動画ファイル
audio音楽、音声ファイル
 となっています。それぞれのメディアというかオブジェクトというか...そういうものがコンテンツとして載っかっています。これらのものに関して、
  1. POST(投稿)することができる。
  2. 外部にXMLで読み出すことができる。
  3. ダッシュボード(管理画面)を読み込むことができる。
というのがAPIの主な仕様です。他にもいろいろできますが...。
怠惰ですが、WWW Watchさんでかなりいい感じで解説してくれているので割愛。

/api/read

 tumblrはとりあえずそのログをXMLに吐いてくれるのでそれを拾う練習。下記の例ではテキストだけを拾っています。
<?
$contents = file_get_contents('http://osamuya.tumblr.com/api/read');
$xml = simplexml_load_string( $contents, 'SimpleXMLElement', LIBXML_NOCDATA ) or die("パースエラー");

foreach ($xml->posts->post as $post) {
    foreach($post->attributes() as $a => $b) {
        if ($a=='url') {
            $url = $b;
                if ($post->{"regular-title"}) {
                    echo "<li><a href='".$url."'>".$post->{"regular-title"}."</a></li>\n";
                }
        }

    }
}
?>
とりあえずの注意点は、tumblrのXMLの一部がハイフンで指定されています。
<regular-title>tumblrすごいです。</regular-title>
<regular-body><p>tumblrは使い込むとおもしろいです。</p></regular-body>
<regular-title>はいつも通り読んでしまうとパースエラーになってしまうので、
× $post->regular-title;
○ $post->{"regular-title"};
という風に書かないとダメなのです。後はいつもとだいたい同じです。

/api/write

 Write、つまりTumblrに直接APIを通してポストする方法は少々厄介です。しかし難しいことはありません。賢い人はこっちを使った方がよっぽど楽に投稿できます。
  • http://www.tumblr.com/api/write
にアクセスします。アクセス先は皆様共通で上記のURLになります。残念ながらこれはPOSTするスクリプトなのでSampleは作れないのでサンプルスクリプトだけ。
<?php

### 認証情報
$tumblr_email    = 'sampleuser@gmail.com';
$tumblr_password = 'password';

### POSTするオブジェクトを準備
$post_type  = 'regular';
$post_title = 'APIからポストするテストです';
$post_body  = 'PHPを利用してTumblrにポストできます。何か他のブログなどから自動的に同期するにはとても便利です。';

### POSTリクエストの準備
$request_data = http_build_query(
    array(
        'email'     => $tumblr_email,
        'password'  => $tumblr_password,
        'type'      => $post_type,
        'title'     => $post_title,
        'body'      => $post_body,
        'generator' => 'API example'
    )
);

### URLでAPIにアクセス
$c = curl_init('http://www.tumblr.com/api/write');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);

### POSTの結果表示
if ($status == 201) {
    echo "新しい記事がPOSTされました。 ID:: $result.\n";
} else if ($status == 403) {
    echo 'E-mailまたはパスワードが間違っています。';
} else {
    echo "エラーです。: $result\n";
}

?>
 Writeの場合は自身でテキストなどを投稿するので認証が必要です。最初にTumblrで登録のE-mailとパスワードを設定します。それから投稿する内容をそれぞれ設定します。今回は純粋にテキストのみを投稿する雛形を作ってみました。
 それぞれの認証情報と投稿内容をURLエンコードして配列にぶち込みます。
 curlでTumblrのAPIに直接アクセスします。curlはデフォルトでインストールされていない(と思う)ので自分でインストールする必要があります。インストールの方法はcurlのインストールを参考にしてください。







プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer