블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2009.08.25 12:53

[ Perl/Inotify/Flickr ] 특정 디렉토리에 그림파일을 넣으면 자동으로 Flickr 업로드

  2009/08/24 - [IT/Perl] - [ SVN/Perl/Inotify ] 고객 후렌들리하게 SVN 운용법 - 자동커밋/업데이트

 이전에 썼던 Inotify 떡밥을 또 계속 물고 늘어져 보겠습니다.
 SVN 을 가지고 노는 그닥 아름답지 못한 방법이 있었지만, 이번에는 특정 디렉토리에 파일이 생성되면 그것을 자동으로 flickr 로 업로드 시켜주는 녀석을 만들어 보겠습니다.

 사실 이 아이디어는 최근에 일본에서 주목을 받고 있는 fic*** 라는 회사의 툴에서 본 것입니다. 특정 디렉토리를 지정해서 거기에 그림 파일을 올리면 자동으로 업로드해서 웹 서비스에서 그림을 관리할 수 있게 해놓은 것이죠. 뭐 물론 이러저래 많은 기능이 있지만, 유저가 그림을 업로드하기 편리한 뭐 그런 것이죠.

  뭐 Dropbox 라든가, SugarSync 라든가.. 생각해보면 이런 Inotify 를 사용했을 것 같다라는 서비스는 찾아보면 좀 많이 있을 것 같기도 합니다.

  아무튼 작동환경은 Linux (Ubuntu 9.04) 이며, 위의 링크의 지난 포스팅과 같은 환경입니다.
  사용모듈은 Flickr::Upload , File::ChangeNotify 입니다.
 
  우선 flickr API 키와 암호를 받습니다.

- http://www.flickr.com/services/api/keys/

  이 화면에서 키와 암호를 얻기까지의 인증을 수행합니다.
jeen@haak:~$ flickr_upload --auth --key [your key] --secret [your secret]
1. Enter the following URL into your browser

http://....

2. Follow the instructions on the web page
3. Hit <Enter> When finished.

  그리고 Flickr::Upload 를 설치하면 사용할 수 있는 flickr_upload 커맨드로 위의 명령을 수행합니다.
  이것을 AuthToken 을 수령하기 위함입니다. 해당 API 를 사용한 어플리케이션이 유저의 Filckr 계정에 접근할 수 있는 토큰을 부여받기 위함입니다. 
  위에 제시되는 URL 로 접속해서 모든 확인을 끝내고 콘솔로 돌아와서 엔터를 누르면, AuthToken 을 받을 수 있습니다.

  그럼 특정 디렉토리에 그림을 업로드할 디렉토리를 하나 만들어 둡니다.

# flickr-auto-upload.pl
use strict;
use warnings;
use File::ChangeNotify;
use Flickr::Upload;

my $ua = Flickr::Upload->new({ 'key' => 'your flickr key',  'secret' => 'your flickr secret' });

my $dir = '/home/jeen/image/';
my $watcher = File::ChangeNotify->instantiate_watcher(
  directories => [ $dir ],
);

while(my @events = $watcher->wait_for_events()) {
  foreach my $event (@events) {
     my $path = $event->path;
     next unless $event->type eq 'create';
     $ua->upload(
      'photo' => $path,
      'auth_token' => 'your auth token',
      'tags' => 'auto',
      'is_public' => 1,
      'is_friend' => 1,
      'is_family' => 1
     ) or do { warn "something wrong"; next };
     unlink($path);

     print $path. " is uploaded\n";
  }
}

  key, secret, auth_token 에는 앞에서 발행받은 것들을 그대로 집어넣습니다. 그외 Flickr Upload 시의 파라메터에 대해서는 Flickr::Upload 모듈페이지를 참고해주세요.
  파일은 업로드 이후에 자동으로 삭제해버리게 해버렸습니다.
  뭐 그외 필터도 필요하겠죠. gif/jpg/png 가 아니라면 업로드 안되게 한다든가, 파일사이즈가 얼마라든가...

  굳이 Flickr 가 아니더라도, Picasa 라든가, TwitPic 이라든가.. 이런 부류의 서비스는 많고... 이런 서비스들의 API 를 구현한 CPAN 모듈도 찾아보면 금방 나올겁니다. (없으면 만들어서 올려주시구요)

   Mac 에서는 FSEvents 를 사용해서 해당 디렉토리의 변경에 대한 통보만을 받을 수 있습니다. 파일은 어케 안되는 것 같더라구요. 변경통보시에 매번 파일리스트에서 최신 변경일자를 조사해서 파일을 건져낸다든가 여러가지 방법은 있겠지만요. 혹은 뭐 여러가지 다른 방법도 많을 것 같습니다. 어차피 파일의 변경이력을 못건진다면 Mac 에서는 그냥 launchd 같은 것을 쓰는 편이 더 낫지 않을까 하는 생각도 해봅니다.
신고
TOTAL 488,144 TODAY 13

티스토리 툴바