前の関連記事:linuxBean14.04(186)指定時間内に更新されたファイルを指定フォルダに抽出する方法
(2018.12.2追記。このツールではcronでアップロードできなかったので、すべてシェルスクリプトで処理するようにしました。linuxBean14.04(189)Googleフォトにアップロードするシェルスクリプト参照。)
Go言語のインストール
Google photos uploader CLIを使うには1.9以降のGo言語のインストールが必要です。
Trusty用の適当なPPAが見つからなかったので、The Go Programming Languageから最新版のLinux x86版をダウンロードしました。
インストールは簡単ですが、ダウンロードファイルが105MBもあるので少し時間がかかります。
Downloads - The Go Programming Language
ここからgo1.11.2.linux-386.tar.gzをダウンロードしました。
sudo tar -C /usr/local -xzf go1.11.2.linux-386.tar.gz
ダウンロードしたディレクトリでこのコマンドを実行すると/usr/local/goにインストールされます。
goコマンドの使用にはパスを通さないといけません。
export PATH=$PATH:/usr/local/go/bin
これで/usr/local/go/binにパスが通ります。
go version
パスが通るとこのコマンドでインストールしたGolangのバージョンを確認できます。
pq@pq-VirtualBox:~/ダウンロード$ go version go version go1.11.2 linux/3861.11.2がインストールできました。
echo 'export PATH=$PATH:/usr/local/go/bin' >> .bashrc
このコマンドで.bashrcに書き出しておくと毎回exportでパスを通さなくてもよくなりますが、Google photos uploader CLIのインストールにgoを使うだけならそうする必要はなく、インストールしてしまえば、goコマンドにパスが通っていなくてもGoogle photos uploader CLIは使えました。
Google photos uploader CLIのインストール
Googleフォトに画像をアップロードするツールをインストールします。
gitコマンドを使用するのでインストールしていなければ先にインストールしておきます(linuxBean14.04(24)git-guiとgitkのインストール参照)。
go get -u github.com/nmrshll/gphotos-uploader-cli
これでホームフォルダのgoフォルダ以下にダウロードが始まります。
全部で236.2MiBもありました。
しかし~/goをのぞいてみるとbinフォルダとsrcフォルダがあり、実際に使用するのはbinフォルダにあるgphotos-uploader-cliファイルだけと思われ、このファイルサイズは8.9MiBでした。
githubのリポジトリ内にこのファイルは見つけられなかったので、ダウンロードしてからコンパイルしているようです。
実際srcフォルダを削除しても動作しました。
コンパイルが終わっているので、Go言語自体もアンイストールしても問題ないと思いますが、Google photos uploader CLIのアップデートのために残しておくことにしました。
export PATH=$PATH:~/go/bin
gphotos-uploader-cli
これで~/.config/gphotos-uploader-cli/config.hjsonが作成されるとReadmeには書いてありますが、私の環境では作成されませんでした。
gphotos-uploader-cli/configuration.md at master · nmrshll/gphotos-uploader-cli · GitHub
ここに作成されるはずのconfig.hjsonの例があります。
mkdir -p ~/.config/gphotos-uploader-cli
touch ~/.config/gphotos-uploader-cli/config.hjson
これで空のconfig.hjsonファイルが作成されるので、ファイルマネージャーで~/.config/gphotos-uploader-cliを開いて、config.hjsonファイルをLeafpadで開きます。
{ APIAppCredentials: { ClientID: "", ClientSecret: "", } jobs: [ { account: youremail@gmail.com sourceFolder: ~/folder/to/upload makeAlbums: { enabled: true use: folderNames } deleteAfterUpload: true } ] }ClientIDとClientSecretは自分で取得しないといけません(Google APIライブラリを使用する)が、まずは動作確認するために、例のままのClientIDとClientSecretを使いました。
accountにはアップロード先のGoogleフォトアカウントのGmailアドレスを書きます。
sourceFolderはアップロードする画像ファイルがあるフォルダの絶対パスを指定します。
チルダ(~)はホームフォルダのパスに展開してくれます。
makeAlbumsのenabledをtrueにするとsourceFolder下のパスの最後のフォルダ名でアルバムを作成します。
sourceFolder直下のファイルはsourceFolder名のアルバムにアップロードされます。
falseにするとどのアルバムにも入らず、すべてのファイルがフォトにアップロードされます。
deleteAfterUploadをtrueにするとアップロードした画像ファイルは削除します。
Googleフォトに画像ファイルをアップロードする
export PATH=$PATH:~/go/bin
gphotos-uploader-cli
config.hjsonを作成したあとgphotos-uploader-cliを起動します。
pq@pq-VirtualBox:~$ export PATH=$PATH:~/go/bin pq@pq-VirtualBox:~$ gphotos-uploader-cli [INFO] Config file found. Loading...
ログインキーリングのパスワードを求められたら、これはlinuxBeanでのログインパスワードを入力します。
これはlinuxBeanでGoogleフォトのアカウントのパスワードを保存するためのキーリングのパスワードのことです(linuxBean(17)seahorseでキーリングを編集する参照)。
Googleフォトへのパスワードは一旦認証するとこのキーリングに保存されるので、認証は不要となります。
初回の起動では次のようにGoogleフォトのパスワードの入力を求められます。
2018/11/28 21:22:01 Need to log login into account youremail@gmail.com 2018/11/28 21:22:02 You will now be taken to your browser for authenticationデフォルトブラウザが起動してGoogleフォトアカウントのパスワードを入力してログインします。
認証前からデフォルトブラウザ(x-www-browser)を立ち上げているとちゃんとSuccess!と表示されますが、ブラウザを立ち上げるところからやると、ログインしたあとリダイレクト中となったままになるので、ブラウザを終了させます。
タブを閉じるだけでは次に進みませんでした。
すると画像ファイルのアップロードが始まります。
(string) (len=46) "authentication will be cancelled in 40 seconds" 2018/11/28 21:27:08 Shutting down server... Server gracefully stopped 2018/11/28 21:27:11 Uploading UML2.png 2018/11/28 21:27:15 UML2.png uploaded successfully as AMl51OJUYsXzbiwc5_TXTNld4Fzvu9DkVaIfnwWDHmGBNGmC6jjsrBOEA5mLvav8r1DNVIeElsQHVGgp_OWU4QA1fqqUlBzvRg uploaded file /home/pq/toGooglePhoto/UML2.png was checked for integrity. Will now delete. 2018/11/28 21:27:19 Uploading UMLobserver.png 2018/11/28 21:27:22 UMLobserver.png uploaded successfully as AMl51OLT75WiiVscxjCInauYFyFeGYbTSmqp-9YVJQC8bw2IEAlZhyskzEbHQdHnkoUv5aRuGqbV89CnepD7LrCtni1m5MqzPQ all uploads done uploaded file /home/pq/toGooglePhoto/UMLobserver.png was checked for integrity. Will now delete. all deletions donedeleteAfterUpload: trueにしているとアップロードしたファイルは削除されましたが、フォルダは削除されませんでした。
既にアップロード済の画像をアップロードするとそれはアップロードされませんが、ローカルフォルダから削除はされます。
アップロード先が異なるアルバムの場合は同じ画像ファイルでアップロードされます。
Google photos uploader CLIをcronで実行させても認証に失敗する
*/15 * * * * ~/go/bin/gphotos-uploader-cli
これで15分おきにアップロードしようとしたのですが、うまく動きませんでした。
*/2 * * * * ~/go/bin/gphotos-uploader-cli >> ~/cronjob.log 2>&1
これでログを取得してみると以下のような結果が取得できました。
[INFO] Config file found. Loading... 2018/12/01 09:24:02 Need to log login into account @gmail.com 2018/12/01 09:24:03 You will now be taken to your browser for authentication 2018/12/01 09:24:04 failed authenticating new client --- at /home/pq/go/src/github.com/nmrshll/gphotos-uploader-cli/upload/folderUploadJob.go:66 (Authenticate) --- Caused by: all options failed with errors: --- at /home/pq/go/src/github.com/nmrshll/google-photos-api-client-go/noserver-gphotos/no-server.go:37 (NewClient) --- Caused by: 1 error occurred: * failed authenticating user --- at /home/pq/go/src/github.com/nmrshll/google-photos-api-client-go/noserver-gphotos/no-server.go:70 (AuthenticateUser.func1) --- Caused by: failed opening browser window --- at /home/pq/go/src/github.com/nmrshll/oauth2-noserver/oauth2ns.go:90 (AuthenticateUser) --- Caused by: exit status 3ブラウザでの認証が必要と言われているのにそれに失敗しています。
この実行前にTerminalで~/go/bin/gphotos-uploader-cliを実行してブラウザで認証していてもダメです。
Dec 1 09:26:01 pq-VirtualBox CRON[19525]: (pq) CMD (~/go/bin/gphotos-uploader-cli >> ~/cronjob.log 2>&1)
/var/log/cron.logで確認すると実行ユーザーがすでに認証したユーザーになっていてもだめです。
cronではTerminalを呼び出せず
*/2 * * * * xfce4-terminal -e "~/go/bin/gphotos-uploader-cli" >> ~/cronjob.log 2>&1
Terminalから呼び出せばうまくいくのではないかと思いましたがダメでした。
(xfce4-terminal:12557): Gtk-WARNING **: cannot open display:
デフォルト設定ではcronからはTerminalを呼び出せないようです。
ということで、Google photos uploader CLIをcronで動かすことは諦めました。
参考にしたサイト
Google photos uploader CLI
Googleフォトへのアップロードツール。インストールにはGo言語が必要です。
Downloads - The Go Programming Language
Go言語のコンパイラのダウンロードサイト。
API とサービス - Google Cloud Platform
Photos Library API。
API limits and quotas | Google Photos APIs | Google Developers
Photos Library APIの制限の解説。
Google Photos API limits - Stack Overflow
1日あたりのリクエスト数だけでなく、アップロード容量で制限がかかるバグがあったようです。
0 件のコメント:
コメントを投稿