flickrにあげた写真をiPodで見たい(その2)

前回(id:lopnor:20071003:1191392346)MacFUSEを使って失敗したリベンジをここ数週間しこしことやっておりました。もしかしたらうまく行きそうなのでこれからかきますよ。
MacFUSEMacでのFUSE (filesystem in userspace)の実装で、前回はlinuxFUSEを前提としたflickrfsというFUSEを使ってみて失敗した訳です。あんまり掘り下げてないから、もしかしたらmacでもflickrfsが動くかも知んないし、flickrfsをlinuxにマウントした上でexportしてmacにマウントすりゃあいいじゃん、という現実的な方法ももちろんある。
けど。思いついちゃったんですわ。davでやればみんな幸せじゃん。FUSEってやっぱギーク向け(だとおれが勝手に思っている)なので、自分のMacに何も手を加えずに使える、多分Windowsでもなんかうまいことやれば使える、davがいいんじゃないかしらん。
で、rfcを落としてみたら100ページ以上あって、とてもスクラッチで実装できる気がしません。かろうじて使える言語はperl。と言うことはCPANCPANを検索してみたら、Net::DAV::Serverというモジュールを発見。これにFilesys::Virtual::*を食わせるといい感じにWebDavに仕立て上げてくれるらしいことがわかった。じゃあ作るしかないよね、と言うことで、作ってます。Filesys::Virtual::Flickr。さっきcodereposにもあげました。CPANはまだです。

http://coderepos.org/share/browser/lang/perl/Filesys-Virtual-Flickr/

あー、なんかApache2::Authen::OpenIDのよくわかってないコードもあがってるわ。無視してください><
で、これの使い方。

$ svn co http://svn.coderepos.org/share/lang/perl/Filesys-Virtual-Flickr/
$ cd Filesys-Virtual-Flickr
$ perl Makefile.PL
$ make && make test && sudo make install

とすると多分インストールされます。
コードもかなりいい加減です。pathを見てインスタンスを生成するあたりがひどいと思います。思いつかなかったのでそのままです。
これを使うアプリケーションですが、↓とりあえずこんなので動いてくれたので十分かもしれません。

#!/usr/bin/perl
# flickrdav.pl

use strict;
use warnings;

use Filesys::Virtual::Flickr;
use Net::DAV::Server;
use POE::Component::Server::HTTP;
use Data::Dumper;
use Cache::FileCache;

my $cache = Cache::FileCache->new({
    namespace => 'flickrdav',
    default_expires_in => 600,
});
$cache->clear;

my $filesys = Filesys::Virtual::Flickr->new({
    key => 'your_api_key',
    secret => 'your_api_secret',
    root_path => '/',
    cache => $cache,
});
my $webdav = Net::DAV::Server->new();
$webdav->filesys($filesys);

my $d = POE::Component::Server::HTTP->new(
    Port => 3000,
    ContentHandler => {
        '/' => \&handler,
    },
);

sub handler {
    my ($request, $response) = @_;
    my $result = $webdav->run($request, $response);
    return $response->code;
}

POE::Kernel->run();

http://lopnor.homeip.net:3000/photos/lopnor/ ←これとかを見ると僕の写真が見えるかもしれません。見えないかもしれません。多分見えません。
もちろんblockしまくりなので、実用的ではないです。

と言うことで、やっとiPodにSyncできる!!と思ったら「不明なエラー(-48)」とか言われる!→read onlyのファイルシステムは同期できない、とかかもしれない。もう正直面倒なのでcpしてiPodに放り込んじゃおうか。今までの努力はどう報われるんだろうか。もう眠いので寝ます。くそー。その3に続くかも。