moblogの更新に合わせて右上のFlickrの表示を変えてみました。
基本的には以下のロジックで動いています。

  1. Flickrから自分の写真データの最新100件を取得する
  2. 取得したデータをJW Image Rotator用のプレイリストとして書き出す
  3. プレイリストを読み込んでランダムで表示

この方法のメリットは、写真の表示に関わる部分をJW Image Rotatorが面倒見てくれることです。
ランダム表示とか、写真のリサイズとか。

以下、関連するプログラムのコードを部分的に載せておきます。
Flickrから画像を取得するのには、phpライブラリ、phpFlickrを使用します。

phpFlickr

APIへの接続を代理してくれるだけでなく、キャッシュもしてくれるので便利です。


これを使って、最新t件を取得するコードは以下。

private static function getPhotos($t)
{
  $f = new phpFlickr(API_KEY);
  $flickrData = $f->people_getPublicPhotos(USER_ID, $t);

  $photos = array();
  foreach($flickrData['photo'] as $key => $value):
    $photos[$key] = $value;
  endforeach;
  return $photos;
}

API_KEYと、USER_IDは各自設定してください。

API_KEYはFlickrのApply for a new API Keyから申請し、取得することが出来ます。
取得後、Your API Keysで確認できます。

USER_IDについては確かどこかに記載されていたんですが…
探すのも面倒なので、こちらのサービスを利用して調べるのが手っ取り早いでしょう。

idGettr - Find your Flickr ID



次に、これをプレイリスト(XML形式)で書き出します。

例えばこんなコードを書いてみました。

public static function getXml($t)
{
  $xml = '/xml/top.flickr.xml';

  $photos = self::getPhotos($t);
  $flickrs = array();
  foreach($photos as $photo):
    $flickrs[] = array(
      'title' => $photo['title'],
      'creator' => 'is',
      'location' => 'http://farm' . $photo['farm'] . '.static.flickr.com/' . $photo['server'] . '/'. $photo['id'] . '_' . $photo['secret'] . '_m.jpg',
      'info' => 'http://www.flickr.com/photos/is_kyoto_jp/' . $photo['id'] . '/',
    );
  endforeach;
  $smarty = new MySmarty();
  $smarty->compile_id = 'top_flickr';
  $smarty->assign(array(
    'flickrs' => $flickrs,
  ));
  $fh = fopen($xml, 'w');
  fwrite($fh, $smarty->fetch('top.flickr.tpl'));
  fclose($fh);

  return $xml;
}

プレイリストの仕様は、このあたりのページを参考に。

Playlists3 ? JW Player ? Trac

僕の場合は、Smartyで定義しておいてそれを読み込んで
ファイルに書き出すということをやっていますが、単にそうしたかっただけなので、
上のページのサンプルのようにベタにファイルを書き出しても良いと思います。

プレイリストのサンプルはこんな感じ。

<?xml version="1.0" encoding="utf-8"?>
<playlist version="1" xmlns="http://xspf.org/ns/0/">
  <trackList>
    <track>
      <title>トゥーランダル投入(サンバル)</title>
      <creator>is</creator>
      <location>http://farm4.static.flickr.com/3165/2974659176_0130403095_m.jpg</location>
      <info>http://www.flickr.com/photos/is_kyoto_jp/2974659176/</info>
    </track>
  </trackList>
</playlist>



最後に、読み込む場所にコードを挿入します。

JW Image Rotatorに関する設定については以前書いたエントリを参照していただくとして、
実際に書いたコードはこんな感じです。

<script type="text/javascript">
  var s1 = new SWFObject("JW Image Rotatorの場所","rotator","180","120","7");
  s1.addVariable("file","プレイリストファイルの場所");
  s1.addVariable("transition","bgfade");
  s1.addVariable("shownavigation","false");
  s1.addVariable("rotatetime","10");
  s1.addVariable("linkfromdisplay","true");
  s1.addVariable("linktarget","_blank");
  s1.addVariable("width","180");
  s1.addVariable("height","120");
  s1.write("表示させる場所のid");
</script>

幅180px高さ120px、ナビゲーション無し、クリックしたときの動作はリンク先へ飛ぶ、
リンク先は新しいウィンドウで開く…などです。

これで、終わりです。



上記サンプルでは、自分の画像をピックアップしていますが、
phpFlickrの使いようによっては、グループとか友達とか全体のとか、
色々と応用できる気がします。

スライドショーで画像を表示するツール、Flashは他にもたくさんあるんですが、
解りやすい拡張性を持つという意味ではやっぱり、
JW Image Rotatorが今時点のベストかなぁと思います。
非商用ならフリーで使えますしね。