1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

#やりたいこと

  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

猫は正義

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?