CPANのFlickr::Uploadをインストールすると

1.flickr_upload というコマンドラインからFlickrに写真をアップロードするソフトがインストールされる

2.Flickr::Upload というPerlモジュールがインストールされる

という事で色々やって、「ディレクトリの中身を監視して、画像ファイルがあったらFlickrにアップロードする」Perlスクリプトを書いてみた。まあ色々な実装の副産物的に出来てしまったのでここに公開。

coLinuxのDebian sarge 3.1と、VineLinux3.2で確認しました。

■cpanでモジュールインストール

$ cpan

install Flickr::API

install Flickr::Upload

場合によっては依存モジュールも

install XML::Parser::Lite::Tree

install LWP

install LWP::UserAgent

■API keyとsecretを手に入れる

FlickrからAPI keyとsecretをもらう とりあえず用途はphoto albumとか書いておいた。

詳しくは→CPANモジュール「Flickr::Upload」を使う を参照



■auth_token作る

参考:まちゅダイアリー – Flickr API の認証

tokenの発行は、webserviceがユーザからパスワードを聞くことなく、read/write権限を委譲してもらう時に使う。

CPANモジュール「Flickr::Upload」を使う にも具体的に書いてある。

コマンドラインから実行

$ flickr_upload –auth –key “API key” –secret “Shared Secret”

すると「下記URLにアクセスして認証し、それからEnter押せ」と指示が出る

(こんなURL)http://flickr.com/services/auth?api_sig=hogehogehoge&frob=asdfasdfasdf&perms=write&api_key=hujikohujiko

webブラウザでURLにアクセスして、OK I’ll allow it押して認証する。

それからコンソールでEnter押すとauth_tokenが発行される

You authentication token for this application is

(こんなtoken)132451234-z4a41n5m7a99i5

■コマンドラインからアップロードする準備

homeディレクトリに .flickrrc という設定ファイルを作る

/home/sho/.flickrrc

auth_token=132451234-z4a41n5m7a99i5

key=自分のapi key

secret=自分のapi secret

パーミッションは600にする

$chmod 600 .flickrrc

■コマンドラインからアップロード

$ flickr_upload *.jpg

みたいな感じで、jpg全部まとめてアップ出来る。

また

$ flickr_upload *.jpg –tag oklab,sfc

とするとoklab sfc とタグを付けてアップロードできる。カンマ区切りで複数指定。日本語は化ける。

■Flickr::UploadでFlickrに認証する

#!usr/bin/perl-w

useFlickr::Upload;

my$ua=Flickr::Upload->new(

{‘key’=>’your-api-key’,’secret’=>’your-api-secret’}

);

PODの説明だと引数だけど、コード見たらhashで渡すのが正解だった。

■Flickr::Uploadでアップロードする

#uploadtoflickr

my$photo_id=

$ua->upload(

‘photo’=>’./rasuta.jpg’,

‘auth_token’=>$auth_token,

‘tags’=>’testrasutahiyoshi日吉flickrapiラーメンfood’,

‘is_public’=>1,

‘is_friend’=>1,

‘is_family’=>1,

‘async’=>0,

)ordie”Failedtoupload$photo_path¥n”;

#result

print”photoid:$photo_id¥n”;

同じディレクトリにあるrasuta.jpgをアップロードして、そのphoto idを教えてもらったところ。

http://flickr.com/photos/shokai/photo id/

でアクセスできる。

■dir2flickr

ディレクトリを監視して、画像ファイルがあったらFlickrにアップロードするのを作ってみた。

最近Windows用のアップロードツールのFlickrUploadr.exeが起動しない事があるので。

ディレクトリ構成は

-dir2flickr.pl(このスクリプト)

–up(directory)

–tmp(directory)

dir2flickr.pl直下のupディレクトリを監視して、もし画像ファイルがあったらtmpディレクトリに移動させ、flickrにログイン、そして順にアップロードし、upが終わったファイルは削除。

cronで2分毎に回してます。daemonとして起動させる方法がよくわからない。Net::Daemon使うのが良いの?

dir2flickr.pl

#!usr/bin/perl-w

usestrict;

useFile::Copy;

useFlickr::Upload;

#config

my$auth_token=’your-token’;

my$api_key=’your-api-key’;

my$api_secret=’your-api-secret’;

my$dir=’./up/’;#最後は/

print”—flickruploader—¥n”;

print”path:$dir¥n”;

my@tmp_files;#tmpディレクトリに移動させたファイルリスト

opendirDH,$dirordie”$dir:$!”;#ディレクトリハンドラ開く

while(my$file=readdirDH){

if($file!~/^¥.{1,2}$/){#’.’や’..’は無視

if(-d”$dir$file”){#ディレクトリの時

print”(dir)$file¥n”;

}

elsif(-f”$dir$file”){#ファイルの時

if($file=~/~*¥.jpg|~*¥.jpeg|~*¥.bmp|~*¥.gif/i){#画像ファイルのみ

move”$dir$file”,”./tmp/$file”;#移動

push(@tmp_files,”./tmp/$file”);

print”$file¥n”;

}

}

}

}

closedirDH;#ディレクトリハンドラ閉じる

if(@tmp_files){#uploadするファイルがあるなら、ログイン

print”logintoflickr¥n”;

my$ua=Flickr::Upload->new(

{‘key’=>$api_key,’secret’=>$api_secret}

);



foreach(@tmp_files){

my$photo_path=$_;

print”uploadstart:$photo_path¥n”;



my$photo_id=

$ua->upload(

‘photo’=>$photo_path,

‘auth_token’=>$auth_token,

‘tags’=>’flickrapitest’,

‘is_public’=>1,

‘is_friend’=>1,

‘is_family’=>1,

‘async’=>1,#非同期たくさんupする時は1

)ordie”Failedtoupload$photo_path¥n”;



print”uploaded:$photo_path->id:$photo_id¥n”;

if(unlink$photo_path){#ファイル削除

print”delete:$photo_path¥n”;

}

}

}

else{#ファイルが無い時

print”filesnotexist¥n”;

}

print”—end—¥n”;