Googleドキュメントの履歴機能は便利なのですが、やはり手元にファイルのバックアップとして定期的な保存が必要だったりします。
フリーウェアのみで特定のGoogleドキュメントを日付をつけた任意のファイル名で自分のコンピュータに毎日バックアップ取ることにします。
元のファイル名が「Mouse Inventory」だとすると2012.3.4→120304, 2012.3.5→120305と、
120304 mouse inventory.xls
120305 mouse inventory.xls
のような感じでファイルが溜まっていくようにします。
Macで行いましたが、Windows/Linuxでも同様に出来るはずです。
GoogleCLというフリーウェアがあり、これでコマンドラインからグーグルの各種サービスにアクセス出来るようになります。
それを使って特定のファイルを日付を付けてダウンロードするスクリプトを作り、
それを/etc/periodic/daily/というフォルダに入れるというのが概要になります。
まず、Pythonのバージョンが2.5以上であることをターミナルを起動して確認
YourMac:~ tosh$ python -V Python 2.7.1
GData 2.0.14 (2.0.15や16は相性悪し)とGoogleCLをインストール
sudoコマンドで聞かれるパスワードはMacへのログインパスワードを入力します。パスワードを設定していない場合はsudoは使えません。
YourMac:~ tosh$ mkdir src YourMac:~ tosh$ cd src/ YourMac:src tosh$ curl -O http://gdata-python-client.googlecode.com/files/gdata-2.0.14.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1828k 100 1828k 0 0 745k 0 0:00:02 0:00:02 --:--:-- 886k YourMac:src tosh$ tar xzvf gdata-2.0.14.tar.gz x gdata-2.0.14/ ... x gdata-2.0.14/MANIFEST YourMac:src tosh$ cd gdata-2.0.14 YourMac:gdata-2.0.14 tosh$ sudo python setup.py install Password: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: ... Writing /Library/Python/2.7/site-packages/gdata-2.0.14-py2.7.egg-info YourMac:gdata-2.0.14 tosh$ cd ~/src YourMac:src tosh$ curl -O http://googlecl.googlecode.com/files/googlecl-0.9.13.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 85690 100 85690 0 0 64726 0 0:00:01 0:00:01 --:--:-- 92637 YourMac:src tosh$ tar xzvf googlecl-0.9.13.tar.gz x googlecl-0.9.13/ … x googlecl-0.9.13/PKG-INFO YourMac:src tosh$ cd googlecl-0.9.13 YourMac:googlecl-0.9.13 tosh$ sudo python setup.py install running install … Finished processing dependencies for googlecl==0.9.13
これでソフトのインストールは終わり。後はGoogleへの認証のみ。これも対話式なので指示通りに入れていけばOK。
色々なGoogleのサービスへのアクセスができる。ここではyoutubeにアップロードしたリストを取得してみる。
YourMac:googlecl-0.9.13 tosh$ cd YourMac:~ tosh$ google youtube list Please specify user: toshiki.saito Please log in and/or grant access via your browser at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2FA62soD028vPKHABqZA9GVQ&hd=default then hit enter. 2011 Athletic Festival,http://www.youtube.com/watch?v=hZSplbQ&feature=youtube_gdata ... 1st concert,http://www.youtube.com/watch?v=AxFNTaw&feature=youtube_gdata
次にGoogleドキュメントへのアクセスを試みる。Googleドキュメントのファイル一覧を取得してみる。指示通りにGoogleアカウントのユーザー名とパスワードを入れるとブラウザが開くので指示通りに表示された確認コード(Verification Code)を入力すると、一覧が表示される。
YourMac:~ tosh$ google docs list Please specify user: toshiki.saito Please log in and/or grant access at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2FF9R8_nT7ulks0qGomLkhe3-&hd=default Please enter the verification code on the success page: 3egM-DKMKArS8FQbB3 Ptosh SOP Clerk DM,https://docs.google.com/document/d/1Wx7sAik8lOAGrLMsQa-A-Tt2DTPUHPLLBiFCY/edit ... Otsuka 2006,https://docs.google.com/Doc?docid=0AfBu_SyaL1DWYWg4bjliZ2NrNmDQ4anBocG5od2M
次に任意のファイルをダウンロードしてみる。–titleでファイル名を指定します。正規表現でまとめて複数ファイルをダウンロードすることも可能です。
YourMac:~ tosh$ google docs get --title "Mouse Inventory" Please specify dest: test123 Downloading Mouse Inventory to test123.xls
指定しないとこのように対話式に保存ファイル名を要求される。Googleドキュメント上の「Mouse Inventory」というファイルをDocuments(書類)フォルダの中のBACKUPS/Mouse Inventoryというフォルダの中に日付を付けて「120305 mouse inventory.xls」こんな感じのファイル名で毎日バックアップさせます。–destで保存先を指定します。
YourMac:~ tosh$ google docs get --title "Mouse Inventory" --dest "$HOME/Documents/BACKUPS/Mouse Inventory/`date +%y%m%d` mouse inventory" Downloading Mouse Inventory to /Users/tosh/Documents/BACKUPS/Mouse Inventory/120305 mouse inventory.xls
``で囲まれた部分はシェルで実行された結果をファイル名に文字列として反映させることができます。
YourMac:~ tosh$ date +%y%m%d 120305 YourMac:~ tosh$ date +%Y%m%d 20120305 YourMac:~ tosh$ date +%H%M 1600
思い通りにファイル名を指定して目的のフォルダにダウンロードできたことを確認したら、シェルスクリプトの実行ファイルにします。ターミナルのVimかTextEdit(フォーマット→プレーンテキストを忘れずに)で下記のようなテキストファイルを作ります。backupMouseInventory.shというファイル名にしました。拡張子は「.sh」である必要があります。1行目はおまじないですが、必要ですので加えて下さい。最終的にはroot権限で実行するので、”$HOME”は”/Users/tosh”とフルパスに変更します。またroot権限ではパスが通っていないので、/usr/local/bin/googleとフルパスで記載します。
#!/bin/sh /usr/local/bin/google docs get --title "Mouse Inventory" --dest "/Users/tosh/Documents/BACKUPS/Mouse Inventory/`date +%y%m%d` mouse inventory"
ちゃんとできているか確認し実行属性を与え、実行できるかどうか確認します。パスが通っていないことあるので、ファイル名の前に「./」を付けてあるいはフルパスでファイルを指定して実行してみます。
YourMac:ScriptsMac tosh$ cat backupMouseInventory.sh #!/bin/sh /usr/local/bin/google docs get --title "Mouse Inventory" --dest "/Users/tosh/Documents/BACKUPS/Mouse Inventory/`date +%y%m%d` mouse inventory" YourMac:ScriptsMac tosh$ chmod 777 backupMouseInventory.sh YourMac:ScriptsMac tosh$ ./backupMouseInventory.sh Downloading Mouse Inventory to /Users/tosh/Documents/BACKUPS/Mouse Inventory/120305 mouse inventory.xls
上手くダウンロードされることが確認できたら、/etc/periodic/daily/にコピーまたは移動します。sudo periodic dailyとして、ファイルのダウンロードがされることを確認します。
YourMac:ScriptsMac tosh$ sudo cp backupMouseInventory.sh /etc/periodic/daily/ YourMac:~ tosh$ sudo periodic daily
ここまで上手く行ったらRoot権限でGoogleへの認証を取っておきます。
まずMacのRootアカウントを有効化します。
http://support.apple.com/kb/HT1528?viewlocale=ja_JP
上記で行なったことと同じことをRoot権限で行います。
YourMac:~ tosh$ login login: root Password: Last login: Wed Mar 7 09:53:46 on console YourMac:~ root# google docs list Please specify user: toshiki.saito 0:123: execution error: An error of type -10810 has occurred. (-10810) Please log in and/or grant access at https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=4%2FsxerBjcxdfsUhtM4vN&hd=default Please enter the verification code on the success page: FLehmasdfaserersgk2Xy3w
毎日早朝(3:15am)にバックアップが取られるようになりました。時間はlaunchdで設定されています。
YourMac:LaunchDaemons tosh$ cat /System/Library/LaunchDaemons/com.apple.periodic-daily.plist < ?xml version="1.0" encoding="UTF-8"?> < !DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">Label com.apple.periodic-daily ProgramArguments /usr/sbin/periodic daily LowPriorityIO Nice 1 StartCalendarInterval Hour 3 Minute 15 AbandonProcessGroup
最初スクリプトファイルの中でフルパスを指定しなかったら、上手く動いていなかった。ログをみると下記のようになっていたので、絶対パス指定とした。
YourMac:~ tosh$ tail -n 100 /var/log/daily.out ... /etc/periodic/daily/backupMouseInventory.sh: line 2: google: command not found-- End of daily output --