dev.convexstyle.net

Flickr アーカイブ

Flickr の新着 RSS 読み込み時の crossdomain 問題回避方法

del.icio.us hatena bookmark

昔、www.flickr.com は crossdomain.xml で に設定されていた記憶があった(この記憶も定かではないですが。。。)ので、Flickr の新着アップロード写真の RSS を flash 内でダイレクトに parse して、あるアプリケーションでビジュアライズしていたのですが、自分のサーバにアプリケーションをアップロードしてテストしたら、最近は crossdomain.xml 自体が www.flickr.com のサーバにはすでに存在せず、当然の結果ですが、別サーバにある自分のアプリケーションから flickr の新着用 RSS を crossdomain のセキュリティ問題で読み込みに失敗。
今は Flickr の API Key を使えば簡単に crossdomain を回避して何でも作れるんですが、世界中の多くの人が写真をアップロードしていく Flickr の新着 RSS はタイムリーに変化していく、アプリケーションの作り手にはかなり面白いリソースであるため、どうしてもこの RSS を使用したい願望から、ソリューションはサーバ側で proxy 処理をすることにしました。

Flickr の新着 RSS 読み込み時の crossdomain 問題回避方法
Flickr の新着 RSS 読み込み時の crossdomain 問題回避方法


単純な RSS の読み込みなので reverse proxy の様な Apache レベルの設定ではなく、PHP で proxy 処理を作成。PEAR の HTTP_Request を使用して簡単に実装できました。以下が簡単な実装例の PHP スクリプトサンプルです。



<?php

require_once('HTTP/Request.php');
define('XML_URL', 'Flickr の新着写真用 RSS Feed の URL');
$cacheOut = md5(microtime());
$req =& new HTTP_Request(XML_URL.'&'.$cacheOut);

if(!PEAR::isError($req->sendRequest())) {
header('Content-type: text/xml; charset=UTF-8');
echo $req->getResponseBody();
}

?>


これを Flash 側で XML.load で読み込めば、別サーバの RSS も、crossdomain を回避してすんなり xml を読み込めます。また、ここから flash 内で parse した thumbnail は http://static.flickr.com/64/228329290_7e7fb1c681_s.jpg の様に static.flickr.com のサーバ上にあるんですが、これは何故か crossdomain を意識せずに flash 内に読み込まれました。liveHTTPheaders で http の通信を調べてみたんですが、flash 側から static サーバにアクセスした際に crossdomain を見ていないので、この点に関しては謎です。


【使用技術】
PEAR(HTTP_Request)、PHP 5、Flickr の新着 RSS、Flash 8

Flickr RSS 解析 in AS 3.0

del.icio.us hatena bookmark

個人の Flickr RSS って便利になりましたね。
最近ふとFlickr の RSS を見たら、以前は M サイズ画像情報のみだったので URL の規則性ですべての画像データ情報を取得していたけど、今はサムネール画像・M サイズ画像・オリジナル画像のパーマリンク、幅、高さがすべて表記されてるんですね。これだと簡単に個人のブログパーツやスライドショーや photogallery くらいはすぐ作れるし、E4X で簡単に XML を解析できるようになったので再利用をかねて個人用に ActionScript 3.0 の解析 class(ParseFlickrXML)を作ってみた。Flickr API を使うならこのクラスがいいと思うけど、自分の RSS を解析するだけだとこれでいいかなと。

ちなみに結構前に作ったので今思うのは、XML の解析用のクラス(ParseFlickrXML)自体が EventDispatcher クラスを extends したら他のイベントクラスは必要なかったし汎用性があると思うけど、作成時はこんなもんだったんで今後直します。

続きを読む "Flickr RSS 解析 in AS 3.0" »

for each in

del.icio.us hatena bookmark

数ヶ月前に個人的に一発奮起して Canon 30D を購入したのですが、それ以来写真の面白さにのめり込んでしまいました。Flickr を写真サイトのメインとして使っているんですが、今までのベスト写真アーカイブを表示する photoViewer を自前で作成しようと思い、その前に Flickr のベストフォトを取得する flickr.interestingness.getList API をベースに基本ロジックを作成しています。

ActionScript 3.0 から for each in が追加されて XML の解析が凄い簡単かつ明瞭になりました。従来は XML の処理は firstChild や childNodes など毎回冗長的に記述していかなければならなかったですが、E4X と for each in の連携によって XMLList オブジェクトを解析するのは PHP でいう foreach 的な使い勝手で今更ながら感動です。


続きを読む "for each in" »

HTTP_Request で HTTP レスポンス情報の評価

del.icio.us hatena bookmark

明けましておめでとうございます。

前回に引き続き、flickr.interestingness.getList API と Flash の関係について。
flickr.interestingness.getList はクオリティの高い写真を日付ごとに最大 500 件取得できる点ですが、中には Source URL で取得出来る最も重要な b サイズ(でかい画像サイズ)の画像がアップロードしたユーザーが画像を削除した際に取得出来ない場合があるようで、過去にさかのぼるにつれてその頻度は高いようです。
Flash で Viewer を作る以上、そういった画像は極力省きたいので一度 PHP などのプログラム側で HTTP レスポンスからの情報を評価する必要があります。Flickr の仕様上、画像が存在しない場合はHTTP リスポンスコードで 302(Moved Temporarily)が返って画像が無い場合の GIF 画像(photo_unavailable.gif)が返ってしまうので、Flash ではこういった GIF 画像も画像と認識して読み込んでしまい表現上都合が良くないので、cron で定期的にそういった画像を省いた状態で新規に xml を新たに書き出した方が良さそう。でもいちいちリクエストをするので処理は重いのがネックですね。curl --head でも同様な処理を行ったがそんなに処理速度が変わらなかった。何か他の方法は無いだろうか。

続きを読む "HTTP_Request で HTTP レスポンス情報の評価" »

JUGEM Desktop x Flickr

del.icio.us hatena bookmark

社内のブログサービス(JUGEM)で、以前開発していた JUGEM Desktop を 1.2 より 2.0 にアップデートしました。

Flickr 機能を追加し、自分の Flickr スクリーンネームでログインすれば、ブラウザ経由ではなく、AIR アプリケーションから直接ブログに最大8枚までの Flickr 写真とともに記事をエントリーすることができます。インタフェース的にはドラッグ&ドロップで写真を記事に追加する感じです。

写真好きな人とか、Flickr は Englishで JUGEM は日本語で切り分けたい人とか、ブラウザ経由が面倒な人はどうぞ。

詳細:http://jugem.jp/fun/jugemdesktop/

JUGEM Desktop 2.0
JUGEM Desktop 2.0


【使用技術&環境】
Flex Builder 3.0、Flash CS 3 Professional、ActionScript 3.0、AMFPHP 1.9、PHP、PEAR、Smarty、MySQL、Linux、Flickr API、PhotoShop CS 3


【担当領域】
Flash、プログラム、データベース、サーバ、デザイン(AIR アプリ側)
*JUGEM の紹介ページデザイン&コーディングは野原君が担当。色々どーもでした!