iPhotoFlickrSync

2년 전부터 나는 iPhoto 에 있는 사진을 Flickr 와 연동하길 원했고, 새로 나온 iPhoto 09 에도 기대를 걸어 봤지만, 내가 원하는 것이 될 수 없었다.
내가 가장 원하는 것은

  • 나는 사진을 iPhoto 에만 넣는다.
  • 그럼 iPhoto와 Flickr 는 자동으로 Sync 된다

였다.
하지만 내가 원하는 것을 찾을 수는 없었다. 그 추정되는 이유로는

  • 일반 사용자들이 필요로 하기엔 고급 기능에 가깝고,
  • 자동 싱크라는 것이 일반적으로 구현하기엔 너무 복잡한 일에 가깝고,
  • 방대한 iPhoto 사진을 백업 목적으로 Flickr 를 사용하는 예는 드물기, (대부분 공유의 목적으로 사용하지 않을까)

때문이 아닐까 싶다.
그래서 2년간의 숙고 끝에 자작 솔루션 제작에 들어갔다. 사실 수작업으로 Flickr 연동을 해 오다, 올해 1월부터는 안하기 시작했다. 가끔 Flickr 에서 사진을 찾아봤으면 했다가도, 이내 2010년이 들어서는 연동한 적이 없다는 것을 알고 실망한 적이 있었다.
언어는 Ruby 를 선택했다. Rails 공부하는 중이기도 하고 해서…

  • 첫번째 목표는 iPhoto 에 있는 정보를 Sqlite DB 로 옮기기.
  • 두번째 목표는 Flickr 에 있는 정보를 Sqlite DB 로 옮기기.
  • 마지막 세번째 목표는 iPhoto 에는 있지만, Flickr 에는 없는 사진들을 Upload 하기. 이 때, KEY 값은 사진이 찍힌 날짜( PHOTO_TAKEN ) 으로 잡았다.

SequelFlickraw 두개의 gem 의 도움으로 간단히 작성이 가능했다.
현재, 약 4천개 정도 업로드 할 사진이 있음을 파악하고 업로드 중에 있다. 한시간에 대략 170개씩 올라가고 있다.
현재 버젼의 가장 큰 문제점으로는

  • PHOTO_TAKEN 정보가 없거나 틀린 것이 꽤 있다. 대표적인 것이 동영상 AVI 파일이다. 이것들은 옮겨진 시간등이 기준으로 삼아진다. 그래서 이것들을 배제하거나, 아니면 다른 방식으로 관리가 필요하다.
  • 10시간 정도를 돌려도 1700개 밖에 못올리니깐 DB Record 를 뽑아놓고, 10시간째 돌리고 있으니, TIMEOUT 에러가 나서 중간에 멈춰선 경우가 있다. 다른 방식이 필요하겠다.

사실 하도보니 욕심이 난다.

  • 최초에 기대를 했던, Tag, Title, Description 에 대한 Sync 기능. iPhoto 에서 특정 사진에 대해서 정보를 편집하면 그것이 Flickr 에도 반영하기. PHOTO_TAKEN을 KEY로 해서 싱크 구현은 가능 할 듯 한데, 생각보다 복잡할지도…
  • iPhoto 내에는 인물 인식에 대한 정보도 있다. 이거 대충 보니, 좌표까지 있어서, Flickr 에 반영도 가능 할 것 같다.
  • 역으로, Flickr 에는 있지만, iPhoto 에는 없는 것을 가져오는 기능 구현.

언제 다시 맘먹고 업그레이드 할 지 모르겠지만, 그래도 올해 사진 4천개 파일을 자동으로 올렸다는데 일단 만족한다.

Ruby 에서 plist 를 이용한 plist 파일 변환

Ruby 에서 plist gem 을 이용해서, iPhoto 에서 쓰이는 plist 파일을 가져와서 뿌려봤다.
대략, 6M 정도 크기의 plist 읽어서 뿌리는데, 53초 걸린다. 거의 50초동안 읽어서 내부구조로 바뀌는 데 쓰이고, 출력하는데 3초 정도 걸린다. 배치에서 쓸 경우, 그래도 대략 참을 수 있는 정도?

require 'rubygems'
require 'plist'
require 'yaml'
result = Plist::parse_xml('AlbumData.xml')
puts result.to_yaml

아래 코드를 이용해서 iPhoto 에 바로 연결을 해서, 뿌려보니, 1분35초가 걸린다. 하지만, 위 코드와 다른 점은 바로 시작한다는 점.

require 'rubygems'
require 'time'
require 'osx/cocoa'
include OSX
OSX.require_framework 'ScriptingBridge'
iPhoto = SBApplication.applicationWithBundleIdentifier_("com.apple.iPhoto")
puts iPhoto.photos.count
iPhoto.photos.each do |photo|
puts photo.name
puts photo.date.timeIntervalSince1970.to_i
end

iPhoto '09 의 Flickr 연동

나는 Flickr와 iPhoto의 완전한 연동을 원했었다.
그리고 얼마 지나지 않아서, 애플은 나의 소원을 들어준 것 같아 보인다.
iPhoto ’09에는 버젓히 Flickr 버튼이 있다. 데모로 보여준 동영상에는 Facebook과 상호 연동되는 모습도 보여주었다.
아직 직접 써 보지 못해서, 어디까지 지원이 될지는 미지수다.
하지만, 항상 애플이 그렇듯이, 90프로를 아주 훌륭히 만족시킬 것이다. 그리고 10프로가 모자라서 항상 답답할 것이다. 그리고 그것은 꽤 오랜시간이 지나도 풀어주지 않을 것이다.

나는 원한다 Flickr iPhoto

Flickr 는 현재까지 발견한 사진관련 사이트 중 가장 만족스럽다.

  • 내가 가진 “모든” 사진을 “백업” 해 둘 수 있다. 적어도 여기 올려둔 사진을 잃어버릴 염려는 거의 없을 것 같다.
  • “백업”한 사진을 남들과 “공유” 까지 할 수 있다.
  • 아이포토에서 손쉽게 올릴 수 있는 플러그인이 존재한다.
  • 연간 24불의 조건으로 위 조건을 모두 만족 시키는 곳은 아직 발견하지 못했다.
그래서, 현재는 아이포토에서 사진을 잘 관리한 다음, 그리고 Flickr 로 업로드를 시킨다. 하지만, 시간이 지나면서 느끼는 거지만, 역시 아이포토로 사진을 임포트 해 온 다음에, 사진을 바로 Flickr로 올리지 않으면, 금새 까먹는 다는 것이다. 그래서 무조건 아이포토로 옮김과 동시에 Flickr 업로드를 해 주는 것이 상책이다.
하지만 문제가 있다. 바로,
업로드 후, 아이포토에서 키워드를 추가해 주거나, 파일명, 설명을 바꾸면, 그때 부터는 Flickr 와 어긋나기 시작한다.
Flickr는 내 사진들의 가장 안전한 보관장소 인데, 여기에 내가 작업한 내용이 반영되지 않는 다는 것은 매우 슬픈 일이다. 그래서, 지금 하는 일 중에 하나가, Flickr 와 iPhoto를 Sync 시킬 수 있는 방법이 없을까 알아보는 중이다. 물론 Flickr API가 매우 훌륭하기 때문에, 어플리케이션을 작성하면 가능하다. ObjectiveFlickr를 이용하면, 더욱 편리하게 가능할 듯 하다.