まずは、わかりやすい情報から。
- Tumblr API (English)
- Tumblr API (日本語訳) 計算因難ニッキのcoro_1729さんの和訳
Tumblrのいろいろ
Tumblrが扱っている種類のメディアは、| text | 文章 |
| quote | 引用 |
| photo | 写真 |
| link | リンク |
| chat | チャット |
| video | 動画ファイル |
| audio | 音楽、音声ファイル |
- POST(投稿)することができる。
- 外部にXMLで読み出すことができる。
- ダッシュボード(管理画面)を読み込むことができる。
怠惰ですが、WWW Watchさんでかなりいい感じで解説してくれているので割愛。
/api/read
tumblrはとりあえずそのログをXMLに吐いてくれるのでそれを拾う練習。下記の例ではテキストだけを拾っています。<?とりあえずの注意点は、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";
}
}
}
}
?>
<regular-title>tumblrすごいです。</regular-title><regular-title>はいつも通り読んでしまうとパースエラーになってしまうので、
<regular-body><p>tumblrは使い込むとおもしろいです。</p></regular-body>
× $post->regular-title;という風に書かないとダメなのです。後はいつもとだいたい同じです。
○ $post->{"regular-title"};
/api/write
Write、つまりTumblrに直接APIを通してポストする方法は少々厄介です。しかし難しいことはありません。賢い人はこっちを使った方がよっぽど楽に投稿できます。- http://www.tumblr.com/api/write
<?phpWriteの場合は自身でテキストなどを投稿するので認証が必要です。最初にTumblrで登録のE-mailとパスワードを設定します。それから投稿する内容をそれぞれ設定します。今回は純粋にテキストのみを投稿する雛形を作ってみました。
### 認証情報
$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";
}
?>
それぞれの認証情報と投稿内容をURLエンコードして配列にぶち込みます。
curlでTumblrのAPIに直接アクセスします。curlはデフォルトでインストールされていない(と思う)ので自分でインストールする必要があります。インストールの方法はcurlのインストールを参考にしてください。



