2013年1月23日水曜日

perlでPicasaの写真をダウンロード

perlでPicasaウェブアルバム上の写真を取りたくなった。
CPANでモジュールを探してみたところ、ちゃんとありました。
http://search.cpan.org/~hanenkamp/Net-Google-PicasaWeb-0.11/

cpanでインストールして早速試してみる。

アルバムごとにディレクトリを作って、その下に写真をダウンロードするスクリプト。


use Net::Google::PicasaWeb;

my $service = Net::Google::PicasaWeb->new;

$service->login('YOUR USER ID','YOUR PASSWORD');

my @albums = $service->list_albums(user_id => 'YOUR USER ID');

foreach my $album (@albums) {
  print "Album ID: ", $album->entry_id, "\n";

  mkdir $album->entry_id;

  my @photos = $album->list_media_entries;
  foreach my $photo (@photos) {
    my $media_info = $photo->photo;

    my $main_photo = $media_info->content;
    print "Image URL: ", $main_photo->url, "\n";

    my $photo_data = $main_photo->fetch;
    $main_photo->fetch( file => $album->entry_id . "/" . $media_info->title );
  }
}



アルバム名の方が分かりやすいけど、日本語を使いたくなかったのでアルバムIDを使っただけなので、アルバム名の方がよければ
$album->title
を使ってください。

list_albumsで指定するuser_idは自分にアクセス権があれば他のユーザ名でもいけるらしい。試してないけど。

ALMiniumでbashのシンタックスハイライト

redmine+backlogsの環境を構築するのに、ALMiniumを利用した。
(自分でやってハマったせいもある)
https://github.com/alminium/alminium

便利になったなぁ…。
インストールに時間はかかるけど、シェルスクリプト起動しただけでほとんど終わった。

そのまま利用していたが、bashやperlのシンタックスハイライト(syntax highlight)が出来ない。
よく使うのになぁ…。

シンタックスハイライトにはcoderayというものを使っており、現在のバージョン(1.0.8)だと対応言語が少ない…。
http://coderay.rubychan.de/
1.1ではかなり増やす予定らしいが、現時点では使えない

ultravioletという似たようなツールもあり、こっちの方が圧倒的に対応言語が多いのでこっちを使ってみたかったけど、redmineのプラグインは1.3までしか対応してないし、開発も2年前くらいで止まってしまっているような感じ…。
一応、試してみたけどエラーが出てしまって、うまく行かない

coderayでなんとかするしかないかなぁ~と探してみたところ、bashのcoderayスキャナーは発見。
https://github.com/pejuko/coderay_bash
http://odd-eyed-code.org/issues/31
でも、どっちも動かなかった…。

で、発見したのがこちら。
http://www.redmine.org/boards/3/topics/29926

ここのbash.rbをダウンロードして、rubyの/coderay-1.0.8/lib/coderay/scanners入れたら、あっさり動いた!

自分の場合は、/usr/lib/ruby と /usr/lib64/ruby の両方があって、困惑したけど以下のスクリプト書いてパスを出させたらすぐ分かった。

require 'rubygems'

version = '1.0.8'

gem 'coderay', version
print Gem.bin_path('coderay', 'coderay', version)


こんな感じで動きました!

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions