DrivePickerでドライブのドキュメントURLを取得する

どうもこんばんは、みかんです。

**！！！！とつぜんですがたいせつなおしらせ！！！！**

2020年1月27日
App Maker の提供終了に向けた対応のご案内
https://support.google.com/a/answer/9682494?p=am_announcement&visit_id=637157414793613981-426262357&rd=1


??!???!?!?!???!?

残念ながら2021年1月19日には終了してしまうそうです(涙)
移行先はAppSheetかApp EngineかGoogleフォームだそうです・・・

消すのは忍びないので記事は残して置きますが、何かの間違いじゃ無い限り役に立つことはないでしょう・・・


**！！！！おしらせはおわりです！！！！！**

今回は「DrivePickerでドライブのドキュメントURLを取得する」方法を書いてみます。
下記ステップでやっていきます。

* 1 下準備
* 2 動きの確認
* 3 プロパティの確認
* 4 resultオブジェクトを見てみる

# 1 下準備

下記サンプルが必要なことをほとんど整えてくれているのでそこから始めます。

https://developers.google.com/appmaker/samples/drive-picker?hl=ja

|![ap01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/00f1c3a3-4366-e141-e027-bae50fc8ead6.png)|
|:-:|

開くと、下記の様な感じです。

|![ap02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/54e2e6ad-d11b-ac27-ae4b-87aedf0d5426.png)|
|:-:|

(AdventCalendar的には)久々に、日本語化もしてみます。

|![ap03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/b63b255e-e0bd-25c6-0ea5-40fae221d96e.png)|
|:-:|

ﾄﾞﾄﾞﾝ

Pickerと言いつつアップロードもできたりして。ただバグによって動きません。

[こちら](https://qiita.com/ExistMikan/items/dc507813b23ac1d5f07a)を参考にダミーコードを仕込んでおきましょう！

# 2 動きの確認

プレビューで動きを確認してみます。色々出ちゃうので今回は画像でお届けします。

|![ap04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/e00470ed-3cd2-9ec5-787f-304a6246d86a.png)|
|:-:|

ボタン一個だけのワイルドなUI。ならば押すしかありません。

|![ap05-c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/78ea3792-f823-6b8a-896e-33c49810aaa5.png)|
|:-:|

こういう感じのダイアログが表示されます。見たことがある人も多いのではないでしょうか。「Google Drive」タブが選択されている状態です。

|![ap06-c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/4fbc737e-bab1-64dd-0cd6-64190e6f0545.png)|
|:-:|

こちらは「Shared drives」です。Google Driveには普通のドライブのほか、共有ドライブ(旧名チームドライブ)というのがあります。このDrive Pickerでは、普通のドライブと共有ドライブを一緒に検索することはできないようになっているので、、探したいものがどちらにあるかは知っている必要があります。

|![ap07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/f69c73b1-29d2-8415-ae18-5bb8fa2ce999.png)|
|:-:|

最後にアップロードタブです。他のタブでは既にドライブにあるファイルを選択する感じですが、ここではファイルをアップロードすることができ、それが選択されている状態になります。

|![ap08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/79094620-fb08-2d42-7b2e-dce9d4101f11.png)|
|:-:|

一旦「Google Drive」タブに戻り、検索バー右端の下矢印を押した状態です。このように、探すファイルのタイプで結果を絞り込むことができます。

|![ap09-c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/b05c9e79-b3fa-6fde-ee4f-7ec51f2984f0.png)|
|:-:|

選択すると、検索バーの左端に「Documents x」という表示が増えました。Google Documentsのファイルだけが対象になっています。

|![ap10-c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/7cc1dd25-c37e-4afa-e435-4021b6fbabe4.png)|
|:-:|

適当に選択した結果がこちらです。ファイルの名前は当然のこと、そのファイルのURLや、ファイルの種類を表すFileType、アップロードの結果なのか否かなどが表示てきているようです。

# 3 プロパティを確認

というわけで、Drive Pickerウィジェットのプロパティを見ていきます。

|![ap11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/64ff4f46-978d-1715-932f-9b390ba95e3e.png)|
|:-:|

そんなに数は多くありません。それぞれ見ていきましょう。

**text**
ボタンに表示されるテキストです。

**dialogTitle**
ボタンを押して開くダイアログの上部に表示されるタイトルです。

**features**
Drive Pickerの機能を設定します。複数設定できます。

|![ap12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/eb37b977-473e-199c-646e-af6c39698fd5.png)|
|:-:|

MINE_ONLY : 自分がオーナーのファイルだけが表示されます。
MULTISELECT_ENABLED : 複数選択が可能になります。
NAV_HIDDEN : タブが消えます。
SIMPLE_UPLOAD_ENABLED : アップロードだけのダイアログになります。ただ何も指定しなくても「Upload」タブは表示されてしまうので、設定する必要が無さそうです。
SUPPORT_TEAM_DRIVES : 共有ドライブも検索対象にする場合はセットする必要があります。先程の「Shared drives」はこれを設定していたので表示されていました。TEAMは旧名ですね。

**views**
どのようなタブをダイアログに表示させるかを制御します。

|![ap13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/12e025b9-a6c7-1251-a7ce-ee0d489311aa.png)|
|:-:|

DOCS : なんでも検索です。とりあえずこれ指定しておけばいいでしょう。
DOCS_IMAGE/DOCS_IMAGES_AND_VIDEOS/DOCS_VIDEOS/DOCUMENTS/DRAWINGS/FOLDERS/FORMS : このあたりは、このファイルタイプで絞り込んだ状態のタグが表示されます。用途に応じたPickerを作る場合はしっかりと設定したいところです。
IMAGE_SERACH : これはGoogle画像検索です。Drive Pickerといいながら外部へ検索しにいきます。自由ですね。

|![ap14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/66fd145d-34ad-751b-85e8-b68ae1b202f7.png)|
|:-:|

後半部分です。
MAPS : 地図から住所を選びます。開発者モードになっているせいで表示が残念な感じです。。動きは大体確認したんですが、、まあ開発者モードなので実用できませんね。GoogleMapウィジェットを活用して自分で作成したほうがいいでしょう。
PDFS/PRESENTATIONS/SPREADSHEETS : このあたりは、このファイルタイプ(省略)
RECENTLY_PICKED : 最近選択したファイルが表示されます。これは入れておいてあげると良いでしょう。
VIDEO_SEARCH : Google動画検索でしょう。ただなぜか上手く動きませんでした。。

めちゃんこ長くなるので、それぞれの画像を貼るのは止めておきます。

迷ったら
features : SUPPORT_TEAM_DRIVES
views : DOCS/RECENTLY_PICKED
で良いと思います。

**selectedDocUrl**
ここには選択したファイルのURLが入ります。本時期のタイトル、「DrivePickerでドライブのドキュメントURLを取得する」の答えはこれです。

**selectedDocName**
選択したファイルの名前が入ります。

**onDocumentSelect**
ドキュメントを選択した時、ファイルのURLや名前は専用のプロパティにセットされますが、それ以外の情報も取得することができます。このメソッドに「result」というオブジェクトが届くので、それを色々みる感じです。

|![ap15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/079ca845-b9e8-c7f1-b177-c5020af52f17.png)|
|:-:|

他にもDrivePicker用のイベントがあります。

**onCancel**
選択せずキャンセルした時に呼び出されます。あまりすることは無さそうです。

**onPickerInit**
DrivePickerのライブラリを初期化するタイミングで何か処理を挟むためのイベントです。DrivePickerを知る手練向けのイベントになります。
たとえば必ず追加されてしまうUploadタブを消すとか、、、は上手くいきませんでした。

# 4 resultオブジェクトを見てみる

ドキュメントの名前とURLは専用のプロパティがあるのでサクっと使えそうですが、それ以外の情報はどうでしょうか。

ということで、onDocumentSelectイベントで渡されるresultオブジェクトをどう扱っているか？を見てみます。

```javascript:onSelectFile
/**
 * Drive Pickerウィジェットでファイルが選択された時のイベントを扱う.
 * @param {widget} widget - Drive Picker ウィジェット.
 * @param {Object} result - ユーザの選択情報を含むオブジェクト.
 */
function onSelectFile(widget, result) {
  var props = widget.root.properties;
  props.FilesCount = result.docs.length;

  var firstItemInfo = result.docs[0];
  props.FileId = firstItemInfo.id;
  props.FileType = firstItemInfo.type;
  props.FileMimeType = firstItemInfo.mimeType;
  props.FileIsShared = firstItemInfo.isShared === true;
  props.FileIsNew = firstItemInfo.isNew === true;
}
```

ドキュメントの詳細はresult.docsという配列に入っているようです。
長さを取得した後、とりあえず1番上のオブジェクトについてのみ詳細情報を控えていますね。

どのような情報が含まれているかは
[こちら](https://developers.google.com/picker/docs/results?hl=ja)
を参考にすると良いと思います。

propsはカスタムプロパティのことで、DrivePickerSampleページに用意してあります。
画面側の項目もそのプロパティとデータバインディングをしています。

|![ap16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26085/182552b1-1999-94db-9cde-ec72fc1fde38.png)|
|:-:|


思った以上にDrivePicker専用のサンプルだったので、動きに迷ったらとりあえずこれを立ち上げていじってみる感じが良さそうですね。

以上です。良いApp Makerライフを!