Ikeda->Weblog();

Ikedaの徒然雑記。

FlickrRSS プラグインでランダム表示

| 2件のコメント

FlickrRSS プラグインでランダム表示っていう程の改造でもないんですけど(^^;

右メニューの下のほうに、Flickr の自分のアルバムから2、3枚の写真を表示していますが、
これは FlickrRSSプラグイン というWordPress Pluginを使用しています。

先日プラグインのアップデートを行ったんですが、その途端に画像表示されなくなってしまいました。調べると、Flickrから取得したフィードの内容がXMLではなくシリアライズされた配列みたいな感じになっているため、RSS解析がコケているのが原因でした。

 

試しにそのままunserializeしてみましたが復元できず。

てことで、まずflickrAPIの呼び出し部をいじってみます。

 

flickrrss. 40〜42行目辺りに、FlickrAPIのURLを作っている部分があります。

[php]
// get the feeds
if ($type == "public") {
$rss_url = ‘http://api..com/services/feeds/photos_public.gne?tags=’ . $tags . ‘&format=rss_200’;
} elseif ($type == "user") {
$rss_url = ‘http://api.flickr.com/services/feeds/photos_public.gne?id=’ . $userid . ‘&tags=’ . $tags . ‘&format=rss_200’;
} elseif ($type == "group") {
$rss_url = ‘http://api.flickr.com/services/feeds/groups_pool.gne?id=’ . $userid . ‘&format=rss_200’;
} else {
print "flickrRSS probably needs to be setup";
}
# get rss file
[/php]

このURLの最後、format=rss_200という部分をformat=rssに変更すると、通常のRDFでフィード取得できるようになりました(^^)v ちなみに atom はダメです(その後のデータ取得がコケます)。

さて、いじりついでにもう一つ。

flickrRSS はその名の通り、FlickrからのRSSフィードに従って画像を引っ張ってきます。頻繁に画像をアップロードしている人であればいいのですが、僕のような駆け出しアマチュアカメラマン見習だと滅多にアップロードできない為、いつ見ても同じ画像ばかり表示されてしまいます。

なんとかこれをランダム表示にしたいところです。

ということで、Let’s Hacking!(そんな大仰なもんでもない)

コードを読むと、先ほどの修正(?)のすぐ下、 46行目辺りに fetch_rss() があります。ここでRSSを取得しているわけですね。そしてその直後、array_slice でもって必要な数(管理画面で設定した画像数)分だけのRSSアイテムをフィード先頭から切り出しています。

[php]
# get rss file
$rss = @ fetch_rss($rss_url);

if ($rss) {
$imgurl = "";

# specifies number of pictures
$items = array_slice($rss->items, 0, $num_items);
[/php]

むむ。てことは、この $rss->items 配列の中から適当にアイテムを拾い出せば、ランダム表示できるんじゃ?

早速やってみましょう。

PHPのリファレンスを見ると、、おおっ!array_rand()という、まさにぴったりの関数があるではないですか!
これでフィードデータ配列の中からランダムなデータを引っ張り出せます!

起こしたコードはこちら。

[php]
// $items = array_slice($rss->items, 0, $num_items);
# $rss->items 配列からランダムにキーをピックアップ
$rand_keys = array_rand($rss->items, $num_items);

# ピックアップしたキーに基づいてデータを取得
$items = array();
if ($num_items < = 1) {
$items[0] = $rss->items[$rand_keys];
}
else {
foreach ($rand_keys as $k) {
array_push($items, $rss->items[$k]);
}
}
[/php]

実際に表示させてみると、、、、おお!リロードする度に違う画像が表示されます!

取得するRSSフィードのアイテム数に上限がある為古い画像は対象になりませんが、これはおそらくFlickrAPIを叩く際のパラメータで変更できるはずですね。

あとは管理画面からランダム表示/通常表示の切り替えや、対象とする画像数などを設定できればカンペキかも(^^)

本家もサポートしてくれないかなー。。。。(パッチを送れ?w)

2件のコメント

  1. 検索してたどり着きました。
    書き換えるコードについて
    どこをどのように書き換えたらいいか
    教えてください。

  2. SCBさん、こんな拙いブログをご覧頂き、ありがとうございます!

    この記事はかなり古いものになっていますので、最新版のFlickrRSSについて同様の変更を加えてみました。

    エントリに起こしてありますので、よろしければそちらもご覧下さい^^

    ・[WP] 続・FlickrRSSプラグインでランダム表示

コメントを残す