自分のPCにある写真をPicasa webに丸ごとアップ
自分のPCにあるjpg写真をサブディレクトリーの階層ごと丸ごとアップロードします。
G* Advent Calendar 2011 17日目のネタです。 #gadvent2011
特にGroovyの新技術を使うこともなく、あくまて日用の小道具として、目的志向でGroovyを活用したいと思います。
picasaのwebストレージも Google+に参加するとほぼ容量無制限となるので、
公開するかどうかは、後でアクセス権の設定の時に考えるとして自分のPCの写真を全てPicasaに保存します。
目的は洪水対策ですね、自分の家のPCが全壊してもアルバムは保全したいと思います。
前提として使うアプリケーションは Gladinet Cloud Desktopです。
これによりPicasa web サービスがドライブとしてPCにマウントして見ることができます。
したがって動作OSはWindowsです。
Picasa webサービズがドライブとして見えているのだから、
ここに一気に xcopy か robocopy で一気にコピーできるかというと、Picasa web には制約があって、サブディレクトリーは一段までです。
例えば
c:/趣味/つり/伊豆/船1.jpg
という深いディレクリーにある画像ファイルはそのままでは送れません、それを
c:¥趣味_つり_伊豆¥舟1.jpg
という風にディレクトリー名をひとつの長いものに変えて送る必要があります。
ここでは特にPicasaのWebサービスAPIとかは使っていなのでPicasa以外の似たようなサービスにも適用できると思います。
以下のスクリプトは、自分の持っているjpgをまるごと複製するので、動かす頻度がとても少ないのでハードコードしまくりです。
コピー先のPicasaディレクトリーは、ルートが z:/GooglePicasa という設定になっている前提です。
またこのスクリプト自体は、複製元の写真の配置してある場所のルートで起動します。
sleep で相当遅くなってますが、これは Gladinet のフリー版は、一日あたりの転送数に、制限がある為です
まったりPCをつけっぱなしにて動かすことが前提です。
多分Gladinet側の問題たと思いますが、何やら動作が不安定です。
量的にGladinetに負荷をかけすぎているのかもしれません。
def targetDrive="z:\\GooglePiasa\\" // Gladinet で設定したPicasa Webサービスのroot directory File.metaClass.copy = { String destName -> if(delegate.isFile()){ new File(destName).withOutputStream{ out -> out.write delegate.readBytes() } } } new File(".").eachFileRecurse { file -> if(file.isFile() && file.name.endsWith('.jpg')){ curName = file.getPath().replaceAll(/.\\(.*)/) {m0,m1 -> m1} newName = curName.reverse().replaceFirst("\\\\", "----").reverse() newName = newName.replaceAll("\\\\", "_") newName = newName.replaceAll("----", "\\\\") newFile = new File(URLDecoder.decode(newName, "UTF-8")) println "現行ファイル名: "+curName println "新規ファイル名: "+newName subDir = newName.toString().replaceAll(/\\.*$/,"") if (subDir && subDir.length() +2< newName.length() ) { targetDir = new File(targetDrive+subDir) if (!targetDir.exists()) { println "Subdir作成:" + targetDrive+subDir new File(targetDrive+subDir).mkdir(); //make folders Thread.sleep(1000*60) } } new File(curName).copy(targetDrive+newName) Thread.sleep(1000*60) } }
すみません、いまいち安定動作していません、うーん。