— boreal-kiss.com

[Tumblr][PHP]自サイトにTumblrフォトギャラリーを設置

完成品がこちら。どうだエロいだろう。PHPで作る必要があるのかと言われると、うーん。たぶんJavaScriptオンリーでTumblr情報取得->画像表示とするのがスマートなのかな。

以下ファイルを設定・実行すると画像表示に必要なhtml(下記例では”photo_table.php”)を書き出すので、それを表示したい場所にincludeすればOK。書き出しを定期的に自動で行わせたい場合はCRON等を使用。下記コードではLightbox2の利用を想定しているので、書き出したファイルのimgタグ内にrel=”lightbox”という属性が付く。不要であれば適宜除去。XML解析にはSimpleXMLというモジュールを使用しているのでPHP5以上が必要。

ファイルの設定箇所

  1. TumblrのUSERIDを設定(http://USERID.tumblr.com)
  2. 取得ポスト数を設定
  3. ポストの種類を設定(フォトギャラリーを作成するなら再設定不要)
  4. ギャラリーのサムネイルサイズを設定(75, 100, 250, 400, 500のみ)
  5. サムネイルクリックで表示される画像サイズの設定(75, 100, 250, 400, 500のみ)
  6. 書き出しファイルの名前(と必要であればファイルパス)。デフォルトでは同じディレクトリに作成。ファイル書き出しを行うので書き出し先ディレクトリに書き込み権限を与えることを忘れずに。
<?php

//(1) Set your Tumblr ID
define('USER_ID', 'borealkiss');

//(2) Set the maximum item number
define('MAX_NUM', '30');

//(3) Set the post type.
//You don't need to change as long as you are making a photo gallery.
define('POST_TYPE', 'photo');

//(4) Choose the thumbnail size of each image (75,100,250,400, or 500)
define('THUMBNAIL_SIZE', '75');

//(5) Choose the image size in the gallery (75,100,250,400, or 500)
define('GALLERY_SIZE', '400');

//(6) Define a file name for image tabels
define('FILENAME', 'photo_table.php');

$fp_out = fopen(FILENAME, 'w');
$req1 = 'num='.MAX_NUM;
$req2 = 'type='.POST_TYPE;
$req_url = 'http://'.USER_ID.'.tumblr.com/api/read?'.$req1.'&'.$req2;
$xml = simplexml_load_file($req_url);

foreach ($xml->posts->post as $post){
        
    //get the attribute
    $permalink = $post['url'];
    
    foreach ($post->{'photo-url'} as $url){
        foreach ($url->attributes() as $key=>$value){
        
            if ($key == 'max-width' && $value == GALLERY_SIZE){
                fwrite($fp_out, '<a href="'.$url.'" rel="lightbox" title="'.$permalink.'">');
            }
            else if ($key == 'max-width' && $value == THUMBNAIL_SIZE){
                fwrite($fp_out, '<img src="'.$url.'" border="0"/></a>');
            }
        }
    }
}

fclose($fp_out);
?>

[関連リンク]
Tumblr API reference (JP)

0 comments
Submit comment