(Bubble)Google DocsにAPI経由でアクセスする(実践編)領収書を作成してPDFでダウンロードする
概要
前々回、前回と、BubbleでGoogle DocsにAPI経由でアクセスする準備を行いました。
今回はいよいよ実際にGoogleのAPIにアクセスします。
例として、BubbleのDBを元に領収書を作成してPDFでダウンロードする処理を実装します。
雛形のドキュメントファイルを作成
書き換え元になる領収書をGoogle Docsに以下のように作成しました。
どのAPIを使うか調べる
まずは、処理の流れと、使用するAPIを整理します。
今回は領収書を作成するので、以下の流れになります。
(1)雛形になるドキュメントファイルを作成・・・手動(URLからファイルIDをメモしておく)
(2)雛形ファイルを編集用にコピー・・・Google DriveのAPIのfile/copy
(3)コピーしたファイルの指定文字列(宛名など)を、BubbleのDBの値に従って置換・・・Google DocsのAPIのdocuments/batchUpdate
(4)置換済みのファイルをPDF化・・・Google DriveのAPIのFiles/export
(5)PDFファイルをダウンロード・・・File Downloaderプラグインに渡す
APIドキュメントを探す
上記の(2),(3),(4)のAPIドキュメントを調べます。
(2)雛形ファイルを編集用にコピー・・・Google Driveのfile/copy・・・https://developers.google.com/drive/api/v3/reference/files/copy
(3)コピーしたファイルの指定文字列(宛名など)を、BubbleのDBの値に従って置換・・・documents/batchUpdate・・・https://developers.google.com/docs/api/reference/rest/v1/documents/batchUpdate
(4)置換済みのファイルをPDF化・・・Files/export・・・https://developers.google.com/drive/api/v3/reference/files/export
APIドキュメントを見てパラメタを把握する
APIドキュメントを見ながら、必要なパラメタを把握します。
ここでは、(2)のファイルコピーを説明します。
まずここからAPIドキュメントを見ます。
Requestの項目を見ると、APIの呼び出しに必要なURLやメソッドやパラメタやbodyの中身が分かります。
Responseの項目を見ると、戻り値が分かります。Files resourceという形式で返ってくるので、見ておきます。
idやnameなどを含んだJSON形式で返ってくることが分かります。
下のほうにある「Try this API」の拡大ボタンを押すと、パラメタを入れて、どういったリクエストが送信されるかを見ることができます。
ファイルIDが「abcd1234」、新しい名前を「recept-new-01」にした時のリクエストは上記の画像のようになります。
URLにファイルIDやアクセストークンを含める必要があること、ヘッダに3種類指定する必要があること、変更する内容はbodyに入れることも分かります。
BubbleのAPI Connectorを設定する
APIの呼び出しに必要な情報が分かったので、Bubbleで画面を作り、API Connectorに設定します。
今回はデモ用に、ファイルIDとコピー後の名前を入力して実行ボタンを押すとファイルがコピーされるようにします。
デザインタブで、inputやButtonを配置します。
プラグインタブで、API Connectorの設定をします。
「Add another call」をクリックして、定義を追加します。
以下の4箇所を編集します。
(1)URLやメソッドと、Use as
(2)ヘッダ
(3)body
(4)レスポンスの形式
API Connectorの設定(1)URLやメソッド
メソッドをPOST、URLをコピペで指定します。[ ]を使うと、後から値が設定できるようになります(後述)。
「Use as」をActionに変更します。これを忘れると、後述のWorkflowで一覧に表示されません。
API Connectorの設定(2)ヘッダ
ヘッダを3つ指定します。[ ]を使うと、後から値が設定できるようになります(後述)。 AcceptとContent-Typeは後から変更しないので「Private」にチェックをいれておきます。
API Connectorの設定(3)body
APIドキュメントの「Try this API」で作ったJSONをコピペし、値の部分を< >でくくって、後から変更出来るようにします。
API Connectorの設定(4)レスポンスの形式
「Manually enter API response」をクリックし、APIドキュメントの「Resource representations」から、必要な項目をコピペし、値を""でくくります。
Workflowの設定
ボタンを押したらパラメタを渡してAPIを呼び出すように、Workflowを設定します。
Workflowの設定(1,2)トークンのリフレッシュ(必要に応じて)
アクセストークンの期限が切れている場合は、リフレッシュしてDBを更新します。
Workflowの設定(3)ファイルコピーAPIの呼び出し
それぞれ値を設定します。
FILEIDとnew_file_nameは入力欄から、YOUR_API_KEYはDBに格納しておいたclient_id、AuthorizationはDBに格納しておいたaccess_tokenから代入します。
Workflowの設定(4)戻り値をDBに保存
step4で、戻り値のファイルIDをDBに保存しておきます。
「Result of step3」を使って、step3でAPIを呼び出した際の戻り値を指定できます。
動作確認
ファイルIDと新しいファイル名を入れてボタンを押すと、ファイルがコピーされます。
Google Docsの画面で、ファイルがコピーされているのが確認できます。
文字列の置換
あとはAPIドキュメントを見ながら、各APIにパラメタを指定して戻り値を確認すればOKです。
置換に使うJSONは、APIドキュメントの「Try this API」を使って生成すると楽です。<と>でくくると、Workflowから値が指定できます。
なお、URLに「?key=」を含める必要はありません。(APIドキュメントは含める書き方になっていますが)
PDF化とダウンロード
PDF出力は、 https://www.googleapis.com/drive/v3/files/[FILEID]/export?mimeType=application%2fpdf&key=[YOUR_API_KEY] でできます。
mimeTypeはURL部分に直書きする必要があり、パラメタで渡そうとすると「/」付近が妙なURLエンコードをされてエラーになります。
また、APIの出力をJSONではなくFILEにする必要がありますが、Initializeの時に実際のデータを渡さないと初期化してくれないため、最初だけは妥当なパラメタを入れておく必要があります。
ダウンロードには「File Downloader」プラグインを使い、Dynamic Linkの項目に前段で作成したPDFファイルのURLを指定します。
Docsファイル削除
生成したDocsファイルはダウンロードしたら使用しないので、削除しておきます。
https://www.googleapis.com/drive/v3/files/[fileId] にDELETEメソッドで送信します。戻り値はありません。APIドキュメントはこちらです。
参考リンク
API Connectorの使い方は、ノーコードラボさんの以下のページが分かりやすいです。
・BubbleでAPIを使ってみよう!
https://blog.nocodelab.jp/entry/2019/12/03/Bubble%E3%81%A7API%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%21
終わりに
いかがでしたでしょうか?長い記事になりましたが、一度やってしまえば後はコピペ作業が大半なので難しくないと思います。
Google APIを使うと可能性が大きく広がりますので、皆さんチャレンジしてみてください。
この記事が気に入ったらサポートをしてみませんか?