linuxBean14.04(187)ローカルフォルダからGoogleフォトにアップロードする方法

2018-11-30

旧ブログ

t f B! P L
Google photos uploader CLIを使ってローカルフォルダの画像ファイルをGoogleフォトにアップロードします。

前の関連記事: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/386
1.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 done
deleteAfterUpload: 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日あたりのリクエスト数だけでなく、アップロード容量で制限がかかるバグがあったようです。

次の関連記事:linuxBean14.04(188)cronの実行ログ、cronで実行させたコマンド出力、の取得方法

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ