GASでGoogleドライブの情報をJSONファイルとして作成し保存する
Googleドライブ上にフォルダやファイルを格納し、その情報をGASで取得し、JSON形式でファイル保存するということをこの記事では紹介していきます。
JSONとは
MDN Web DocsのJavaScript オブジェクト入門における定義を引用すると下記の通りです。
具体的な扱い方などについてはJSON の操作が詳しいです。アプリケーション間でデータをやり取りするときに一般的に用いられているデータ形式ですね。
今回作成したもののご紹介
Googleドライブ内にあるフォルダやファイルの名前・IDを取得して、最終的にJSONファイルを作成します。
Googleドライブの形式は以下となります。親フォルダとなるRootのフォルダがあり、カテゴリー>タイトルのフォルダという3階層になります。タイトルフォルダには、png, mp3, txtの3ファイルがあるといった形です。
├Folder A (Category)
│ │└a.png , a.mp3 , a.txt
│└Folder b (Title)
│ └b.png , b.mp3 , b.txt
│ │└c.png , c.mp3 , c.txt
│└Folder d (title)
│ └d.png , d.mp3 , d.txt
- GoogleドライブでRootフォルダIDを指定して、直下のフォルダとファイルの情報を取得する。
- 取得した情報をGoogleスプレッドシートに書き込む。
- Googleスプレッドシートに書き込まれた情報を元にJSONを生成し、JSONファイルとして保存する。
また、同じく事前準備として、Rootフォルダ名、RootフォルダID、上書き時に保存するJSONファイルのIDをスクリプトエディタ内にて記述しておきます(スプレッドシートに設置したIDを読み込むようなことももちろんできますが、今回はそこまでやってません)。
それでは、実際にフォルダ名やフォルダ・ファイルのIDを取得していきます。カスタムメニューの「リスト更新」を実行します。
すると、下記のようにスプレッドシートに各種値が記述されます。
最後のJSONファイルで保存する部分ですが、前述のカスタムメニューの画像内にあるように、以下の3種類を作ってみました。
- Rootフォルダに新規作成する。
- RootフォルダにあるJSONファイルのファイルIDを指定して上書き保存する。
- HTMLダイアログからダウンロードする。
それでは、RootフォルダにあるJSONファイルのファイルIDを指定して上書き保存してみます。先程のファイルではdurationの指定がありませんでしたので、スプレッドシート側で直接記入をして値設定をしておき、ファイルをアップデートしてみます。
カスタムメニューの「JSONをドライブで上書きする」を実行すると以下のように指定したGoogleドライブ内にあるJSONファイルの内容が保存されます。今回はdurationの値が変更されていることが確認できました。
最後に、HTMLダイアログを使って、JSONファイルをローカルドライブへダウンロードしてみます。今回もとりあえず値の変更を確認するために、durationの値を任意の値に変更します。
カスタムメニューの「JSONをダウンロード」を実行すると以下のようにHTMLダイアログが表示されます。HTMLダイアログ内にある「ダウンロード」リンクをクリックすると、ローカルドライブへのダウンロードを行うことができます。
実際にファイルを開いてみると、durationの値が変更されたJSONファイルを確認することができました。
Googleドライブへの新規ファイルやファイル更新については、トリガー設定を行うことで定期実行するような処理に向いてそうですね。一方で、HTMLダイアログを用いることで、直近の値をすぐに取得したいというニーズに応えることができるのではないかと思います。
参考
スプレッドシートからjsonを作る
コピペでスプレッドシートをJSON形式のAPIにする方法
create nested json from array of objects dynamically
How to create json by JavaScript for loop?
How can I overwrite the old file with app script when I save the file?