Googleドライブにファイルを格納し、格納したフォルダやファイルのURLをSlackに通知する

やりたいこと

  1. 毎日の処理で作成されたファイル数点をGoogleドライブに置きたい
  2. 置いたファイルの直接のリンクをSlackに通知したい。

、、、これらを簡単にやりたい

課題

特に2が課題でAmazon S3などであれば置く先と、パスの構成とファイル名があれば再現できるが、GoogleドライブはURLが独特の構成をしているため、置く場所とフォルダ名やファイル名だけではURLが再現できない(たぶん)。

解決方法

・いずれもrcloneを駆使する
・rclone lsjson でフォルダやファイルのIDが返却されるのでそれで頑張る
・jq職人になる

手順

rcloneセットアップ

割愛します、が
・本連携用のサービスアカウントキーのJSONを用意
・rclone config でdriveを選択肢、JSONファイルを絶対パスで指定

ファイルを転送してみる

今回、上記config で xxxxxxxx_daily_report というremoteを作成しています。

送り込むファイル

・フォルダ構成

root_folder/
     └yyyymmdd/
         └diva/
           └ yyyymmddhis.csv
           └ yyyymmddhis.png
         └divb/
           └ yyyymmddhis.csv
           └ yyyymmddhis.png

これらのファイルを、Googleドライブの特定のフォルダ以下に毎日転送したいです。

以下のコマンドで出来ます。

$ rclone copy ./yyyymmdd/ xxxxxxxx_daily_report:yyyymmdd/

実際にGoogleドライブにアクセスすると、無事ファイルが転送されています。

転送したファイルのURLの取得

上記ドライブに置かれること、自体を運用ルールとしても良いのですが、Slackだけ見ていればリンクが通知され押せばファイルが確認できる、ようにしたほうがQOLが上がろうというものです。

結論としては、lsjson というサブコマンドを使うことでIDが取得可能です。

アップしたディレクトリの取得

$ rclone lsjson  xxxxxxxx_daily_report:
[
{"Path":"20200226","Name":"20200226","Size":-1,"MimeType":"inode/directory","ModTime":"2020-02-26T09:54:29.000Z","IsDir":true,"ID":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},
{"Path":"20200227","Name":"20200227","Size":-1,"MimeType":"inode/directory","ModTime":"2020-02-26T21:56:13.071Z","IsDir":true,"ID":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},
{"Path":"20200228","Name":"20200228","Size":-1,"MimeType":"inode/directory","ModTime":"2020-02-27T22:05:59.635Z","IsDir":true,"ID":"ccccccccccccccccccccccccccccccccc"},
{"Path":"20200229","Name":"20200229","Size":-1,"MimeType":"inode/directory","ModTime":"2020-02-28T22:12:34.958Z","IsDir":true,"ID":"ddddddddddddddddddddddddddddddddd"}
]

こんな感じで返ってきます。bash, grepとjqを駆使し

DIRID=`rclone lsjson xxxxxxxx_daily_report: |grep 20200229| jq .'ID'`
DIRURL="https://drive.google.com/drive/u/0/folders/"${DIRID//\"//}

とか することでURLの生成が行えます。
※ワンライナーに拘っている訳ではないので自己責任にてお願い致します...

アップしたファイルの取得

以下のように remote:(フォルダ)/ファイル名 をlsjsonに渡すと、上記同様にIDが返却されます。

$ /usr/bin/rclone lsjson  xxxxxxxx_daily_report:/20200229/diva/yyyymmddhis.csv
[
{"Path":"aaa","Name":"aaa","Size":0,"MimeType":"application/octet-stream","ModTime":"2020-02-29T11:58:55.419Z","IsDir":false,"ID":"1ixOc30WmdczvNAlUlgeiyZ5dN97y2oHT"}
]

さきほどのようにgrepをしても良いのですが、1個しかないので

DIVACSVID=`/usr/bin/rclone lsjson  xxxxxxxx_daily_report:/20200229/diva/yyyymmddhis.csv|jq .[].ID`
DIVACSVURL="https://drive.google.com/file/d"${DIVACSVID//\"//}

といった形で取得できます。
※ワンライナーに拘っている訳ではないので自己責任にてお願い致します...

無事URLが取得できたので、事前に用意したワークフローにPOSTすればSlack通知完了です。

※活用イメージ
image.png

猫は正義

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント
この記事にコメントはありません。
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした