今回はSlidePackというPowerPoint向けのテンプレートエンジンを提供するサービスを使って、OneDriveに配置したデータ (JSON) とテンプレートになるpptxファイルから自動的にスライドを作成するフローをご紹介します。
SlidePack は 2018年に設立されたQitarという会社が提供しているPowerPoint向けのテンプレートエンジンです。10月9日にAPI利用の無料トライアルが開始されたので、早速使ってみました。
やっていることはPowerPointの中に {xxxxxx}
のようなプレースホルダーを書いておいてそのファイルをテンプレートとし、別途用意するJSONファイルに挿入する内容を書いておくことで2つを結合したスライドを作成するというものです。
これまでもWordやExcelへのデータの流し込み、テンプレート化は様々な3rdパーティのサービスあるいはPower Automate上でもWordのコネクターとして提供されてきました。このような仕組みをPowerPointに適用したようなサービスはあまり見ないように思います。
注目ポイントは、今回このスライド作成の処理がAPIで提供されたということです。APIが提供されればあとはiPaaSなどを利用してHTTPリクエストを行うことで自動処理ができますよね。
また、ほかのSaaSが持つデータからテンプレートへの流し込みもやりやすくなります。
今回提供されたAPIに関しては以下のAPIドキュメントが非常に有効です。認証~実際の操作、ケース別のテンプレート、制限事項まで一通り書いてあるので、どのようなことができるかはここを先に見てもいいかもしれません。
API無料トライアルは30日間です。この申し込みはSlidePackのトップページから申し込みフォームに移動し、必要事項を入力することで仮パスワードが送られてきます。
では実際にPower Automateでの処理を見ていきましょう。
準備 : データとテンプレートのzip圧縮
SlidePackのAPIでははじめに、データを収めたJSONファイルとテンプレートのPPTXファイルを含むzipファイルのアップロードを行います。 (認証したあと)
必ず データは data.json
というファイル名で、テンプレートのPPTXは template.pptx
というファイル名で作成してください。
今回のフローでは、このzipファイルをOneDriveから取得してSlidePackの処理を進めていきます。
Power Automateでの処理
まずフローの全体は下図のようになります。
- まずはセッションの払い出しを行います。ここで返却されるデータを利用してzipファイルのアップロードを行うので、結果をパースしておきます。
- zipファイルアップロードのためのmultipart/form-dataを構成します。
- 最初に取得しておいたOneDrive上のzipファイル (のコンテンツ) をアップロードします。
- アップロードが成功したら、レンダリングを実行します。これにより生成されたPPTXのスライドのダウンロードURLが返されます。
4.のステップまで完了したら、あとはメールでダウンロードURLをおくったり、OneDriveに保存してください。
1. セッションの払い出し
SlidePackのすべてのエンドポイントでは、SlidePackのWebコンソールで発行されるAPIキーを利用します。
Power Automate で「HTTP」アクションを追加し、以下の通り設定してください。
パラメータ | 設定値 |
---|---|
メソッド | POST |
URI | https://slidepack.io/sessions |
ヘッダー | {"Authorization": "Bearer ここにAPIキー"} |
このリクエストで返されるデータを「JSONの解析」アクションでパースします。
スキーマには以下を設定してください。これで後続ステップで返却されたデータを動的コンテンツから利用できます。
{ "type": "object", "properties": { "session": { "type": "object", "properties": { "uuid": { "type": "string" }, "created_at": { "type": "string" }, "rendered_at": {}, "render_succeeded": {}, "render_slide_count": {}, "render_message": {} } }, "upload": { "type": "object", "properties": { "action": { "type": "string" }, "method": { "type": "string" }, "enctype": { "type": "string" }, "params": { "type": "object", "properties": { "acl": { "type": "string" }, "key": { "type": "string" }, "Content-Type": { "type": "string" }, "X-Amz-Security-Token": { "type": "string" }, "X-Amz-Credential": { "type": "string" }, "X-Amz-Algorithm": { "type": "string" }, "X-Amz-Date": { "type": "string" }, "Policy": { "type": "string" }, "X-Amz-Signature": { "type": "string" } } } } } } }
2. multipart/form-dataの構成
SlidePackのzipファイルアップロードは multipart/form-dataでデータを送ります。
以前 Cloudmersive のAPIで行ったのと同様の手続きで、multipart/form-dataをJSONで書き換えます。
SlidePackのAPIドキュメントを参考に、JSONを書くか、「JSONの解析」アクションを「Parse JSON」にリネームしたのち、「作成」アクションを追加して以下のように設定してください。
{ "$content-type": "multipart/form-data", "$multipart": [ { "body": "private", "headers": { "Content-Disposition": "form-data; name=\"acl\"" } }, { "body": "@{body('Parse_JSON')?['upload']?['params']?['key']}", "headers": { "Content-Disposition": "form-data; name=\"key\"" } }, { "body": "application/zip", "headers": { "Content-Disposition": "form-data; name=\"Content-Type\"" } }, { "body": "@{body('Parse_JSON')?['upload']?['params']?['X-Amz-Security-Token']}", "headers": { "Content-Disposition": "form-data; name=\"X-Amz-Security-Token\"" } }, { "body": "@{body('Parse_JSON')?['upload']?['params']?['X-Amz-Credential']}", "headers": { "Content-Disposition": "form-data; name=\"X-Amz-Credential\"" } }, { "body": "@{body('Parse_JSON')?['upload']?['params']?['X-Amz-Algorithm']}", "headers": { "Content-Disposition": "form-data; name=\"X-Amz-Algorithm\"" } }, { "body": "@{body('Parse_JSON')?['upload']?['params']?['X-Amz-Date']}", "headers": { "Content-Disposition": "form-data; name=\"X-Amz-Date\"" } }, { "body": "@{body('Parse_JSON')?['upload']?['params']?['Policy']}", "headers": { "Content-Disposition": "form-data; name=\"Policy\"" } }, { "body": "@{body('Parse_JSON')?['upload']?['params']?['X-Amz-Signature']}", "headers": { "Content-Disposition": "form-data; name=\"X-Amz-Signature\"" } }, { "body":@{outputs('Get_file_content')?['body']} , "headers": { "Content-Disposition": "form-data; name=\"file\"" } } ] }
※ここではOneDriveに保存されたファイルを「Get file content」のアクションで取得している前提です。もしほかのデータソースを利用する場合にはJSONの最後の部分
{ "body":@{outputs('Get_file_content')?['body']} , "headers": { "Content-Disposition": "form-data; name=\"file\"" } }
この"body":
の右側を書き換えてください。
3. zipファイルのアップロード
zipファイルをアップロードするためのHTTPアクションを追加し各種パラメータを設定します。
パラメータ | 設定値 |
---|---|
メソッド | POST |
URI | @{body('Parse_JSON')?['upload']?['action']} ※JSONの解析の動的コンテンツから追加 |
ヘッダー | {"content-type": "multipart/form-data; boundary=--@{guid()}"} |
ボディ | @{outputs('Compose_multipart_formdata')} ※STEP2の結果を挿入 |
これが成功すると、204 No Content
が返却されてきます。それ以外、何らかの失敗であればエラーメッセージが返されますので、確認し修正しましょう。
4. レンダリング実行
zipファイルのアップロードが終わったら、あとはレンダリング (データを埋め込む処理) を実行するリクエストを出します。
パラメータ | 設定値 |
---|---|
メソッド | POST |
URI | https://slidepack.io/sessions/@{body('Parse_JSON')?['session']?['uuid']}/render ※JSONの解析の動的コンテンツから追加 |
ヘッダー | {"Authorization": "Bearer ここにAPIキー"} |
これで一連の処理は完了です。
最後のレンダリングリクエストでは、結果としてファイルのダウンロードURLが返却されます。
おわり
今回はSlidePackのAPIを利用して、PPTXのテンプレートとデータからスライドを自動生成するフローを紹介しました。
基本的にはここで書いたように、data.json と template.pptxが用意できればスライドの作成までを自動化できます。月次ミーティングで使うような定型的なスライドを作成するのにも便利かもしれません。 (こういうのが一番面倒で楽しくないので自動化できたらうれしいですよね)
また、応用として「データを外部から取得して、テンプレートと合わせてzip作成する」という自動処理もできます。
この場合には3rdパーティの Cloudmersive File Processing コネクターを利用することでzip作成部分の自動化ができます。
いろいろ応用できますし、30日間トライアルは無料ですので、ぜひ試してみてください。