あまプロではGoogleDriveを扱う事が有ります。
先日、日次処理や週次処理などで毎回グーグルドライブにファイルをアップロードするのが面倒やったので、バッチ(スクリプト)で自動化しました。
その手順をあメログ。
グーグルドライブの操作を自動化するには、ブラウザからのGUIの操作をCLI( CUI?)で行う必要があります。
マウスでぽちほち遣るのをコマンドでぽちぽちに変えるだけです。
グーグルドライブには既にプログラムなどからグーグルドライブを操作するAPIが用意されてまして、プログラムに詳しい人はAPIを操作できるんですが、詳しくない方はAPIとプログラムを両方学ぶ必要が有り…だいぶ敷居が高いです。
なので今回はAPIを後ろで実行してくれるコマンドを利用します。
ほなどのコマンドを使うねんって話なんですが、有名なのはrcloneやgdriveなどがあります。
今回は今月リリースされたgws( GoogleWorkSpace)を使ってみます。Google謹製の非公式ツールだそうです。
グーグルアカウントは事前に作成して、ホストのブラウザでログインしておいて下さい。
先ず、Dockerでコンテナを作成します。LXDとかでもいけますので、お好みで。
docker run -it --name googledrive_ctn alpine:latest
今回はイメージにアルパインを用いました。イメージも何でも良ぇので、お好みで。
コンテナに入って、パッケージを最新化します。
他のディストリビューションの場合は適宜読み替えて下さい。
apk update && apk upgrade
次に必要なパッケージをインストールします。
gwsはnodeで動作しますので関連パッケージを一式インストールします。
apk add nodejs npm vim bash curl tar python3
不要なパッケージも有りますが、お好みで。特にvimは好みが分かれるけど、お好みで。
alpineのデフォルトシェルはashですが、各インストーラのシェルはbash用なのでご注意を。
インストール後にコンテナにbashで再ログインして下さい。
docker exec -it googledrive_ctn bash
次にgcloudCLIをインストールします。
gwsはgcloudに依存しているので、先にこっちからインストールします。
パッケージでインストールできれば楽なんですが、今の所は個別にインストールせなあきません。
インストール方法は公式に掲載の手順通りに行います。
パッケージをダウンロードして
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
それを解凍して
tar -xf google-cloud-cli-linux-x86_64.tar.gz
インストーラを起動するだけ
./google-cloud-sdk/install.sh
インストール完了後、source ~/.bashrcで設定を反映するか、コンテナに再ログインして下さい。
次にgcloudの初期設定を行います。
gcloud init ここからが少しややこしくて、コンテナのターミナルとホストのブラウザを行ったり来たりします。まず、複数行に渡る長いURLが生成されますので、それをコピーしてホストのブラウザでアクセスします。
グーグルアカウントを選択して Google Cloud SDKへログインして
許可して
認証パスワードをコピーします
コピーした認証パスワードをコンテナのターミナルへ貼り付けます
これでgcloudコマンドがグーグルアカウントのGoogleCloudへ紐付きます。次にプロジェクトを選択します。
既存のプロジェクトを選択するか、無ければプロジェクトを作成します。
今回はお試しでCreate a new projectを選択します。
適当なProjectIDを設定して、問題なければこれでgcloudの初期設定は完了です。
ではいよいよgwsのインストールです。
こちらも公式に載っている手順通りに行います。
npm install -g @googleworkspace/cli
次にgwsの初期化を行います。
gws auth setup
グーグルアカウントを選択して
GoogleCloudのプロジェクトを選択して
APIを選択して
今回はGoogleDriveのみにします。色々操作できますので、興味のある方は試してみて下さい。
またまたややこしくて、コンテナのターミナルとホストのブラウザを行ったり来たりします。
OAuth認証します。
Step AでURLが生成されますので、コピーしてホストのブラウザでアクセスします。
次にOAuthクライアントを作成します。
表示の通り、アクセスできるのはテストユーザーのみになります。
なので、テストユーザーを作成します。
作成したOAuthクライアントのクライアントIDをコピーして、コンテナのターミナルへ貼り付けます。
次にOAuthクライアントのシークレットもコピーして、コンテナのターミナルへ貼り付けます。
ここまででgwsの初期設定は完了です。
続いてgwsのログインが実行されます。
実行されない場合は下記を実行します。
gws auth login
次にOAuthの範囲を指定します。
今回はグーグルドライブの操作が目的なのでdrive.fileを選択しておきます。
適宜必要な機能を選択して下さい。
またまたURLが生成されますので、コンテナのターミナルからコピーしてホストのブラウザでアクセスします。
認証します。
ホスト上のgwsだとこのままgwsへリダイレクトされてログイン完了するんですが、コンテナ内のgwsの為に接続できません。
面倒ですが、ブラウザのURL<http://localhost:38555/?.....>をコピーして、もう一つ別のターミナルを起動してコンテナにログインします。別ターミナルのコンテナ内でコピーしたURLへアクセスします。
curl 'http://localhost:38555/?iss=https://accounts.google.com&code=*******'
URLをシングルクォートで括るのをお忘れなく。
<html><head><title>Success</title></head><body>You may now close this window.</body></html>が表示されればログイン成功です。このターミナルは閉じても大丈夫です。
元のターミナル(gws auth setupしてたの)がログインしています。
お疲れ様でした。これでgwsの設定完了です。
試しにファイルの一覧を取得してみましょう。
gws drive files list
ファイルをダウンロードしてみましょう。
gws drive files get --params '{"fileId": "*****", "alt": "media"}' -o ファイル名ファイルをアップロードしてみましょう。
gws drive files update --params '{"fileId": "*****", "supportsAllDrives": true, "uploadType": "multipart"}' --upload ファイルパス
この様にgws drive*コマンドで、グーグルドライブへの色々な操作が行えます。
これらをスクリプト(バッチ)ファイルに記述すると、 その操作を自動的に行ってくれます。
認証が少し複雑なんですが、認証さえできてしまえば便利なので是非ご活用下さい。



































0 件のコメント:
コメントを投稿
つっこみ