タイトル長いですが。
OS Xのアドレスブックのカードには、アイコンというか写真を設定できます。ここを設定しておくと、OS Xと同期しているiPhoneで着信あった時にアイコンが表示されたりするので、判りやすかったりします。
問題は知人各位の写真の調達なんですが、僕はmixiとかTwitterとかSkypeのアイコンを貼付けて使っています。ただみなさんアイコンを時々変更されるので、気が付くと懐かしいアイコンになっていたりします。
そこで、最新のTwitterアイコンで、アドレスブックを自動更新するスクリプトを書いてみました。
データ入力
まずは、知人各位のカードに、「URL」を追加してください。内容はTwitterのユーザページのURLである、「http://twitter.com/user_name」としてください。ラベルは「自宅」とか「勤務先」とか選べますが、何でも構いません。URLの内容がTwitterのユーザページになっている事が全てです。
スクリプトをインストール
今回作ったスクリプトはターミナルで動作するrubyスクリプトなのですが、動作させるために必要なパッケージをインストールする必要があります。ターミナルで下記のコマンドを入力してください。
gem install twitter4r
これはRubyGemsによってユーザ領域にインストールされるので、システムを壊す心配はありません。
次に、以下のスクリプトをAddressIconPaster.rbという名前のテキストファイルとして保存してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/usr/bin/ruby require 'osx/cocoa' OSX.require_framework 'AddressBook' require 'rubygems' require 'twitter' require 'open-uri' twitter = Twitter::Client.new(:login => ARGV[0], :password => ARGV[1]) address_book = OSX::ABAddressBook.sharedAddressBook address_book.people.each do |person| urls = person.valueForProperty(OSX::KABURLsProperty) if urls for index in 0...urls.count url = urls.valueAtIndex(index) if /^http:\/\/twitter.com\/(.+)/ =~ url user = twitter.user($1) open(user.profile_image_url) do |file| person.setImageData(OSX::NSData.dataWithRubyString(file.read)) end end end end end address_book.save |
アイコンの自動更新を実行
ご自分のTwitterのユーザ名とパスワードを用意して、ターミナルで下記のコマンドを入力してください。
ruby AddressIconPaster.rb ユーザ名 パスワード
これで、カードにTwitterのURLを設定した全てのユーザのアイコンが最新の物に更新されます。
知人のカードにTwitterのURLを入力する事は、今回のアイコン設定が必要なくても自然な事だと思いますし、特別な設定が必要ないので良い感じではないかと思います。
せっかくだから、RubyCocoaでGUIを付ける所がまでやれよ自分……という気もしましたが、iPad弄りが楽しいのでここまでに致したく存じます。
2010/06/05 追記
githubで公開しました。
