※この記事は RPACommunity Advent Calendar 2022 の12/1担当分です。
スライドは、Speaker Deckにあります。
この記事は、RPA COMMUNITY「【自動化やIT活用ネタ】ライトニングトーク大会 vol.6~初参加者大歓迎~」(2022/11/30)のLT内容をもとに作成しました。
やること
海外のブログを購読したいので、更新されたときにTwitterに通知してくれるといいな。英語がわからないわけじゃないけど、できれば、通知の内容は日本語に翻訳して、ある程度内容がわかるようになっていると、優先度が決めやすいんだけどな。
データの取得
1. RSSトリガーを使う
規模の大きなブログは、大抵 RSS という、ブログの更新情報を通知してくれる仕組みがあったりします。これを使えば、Power Automate のトリガーとして拾うことができます。
個のトリガーを使って、Dataverseに書き込めがさっさと出来上がります。
2. RSSアクションを使う
RSSアクションを使用すれば、定期的にブログの更新情報を取得することができます。決まった時間に動かしたい場合は、こちらを使います。
3. データフローを使う
今回、データフローを使い方法を詳しく説明します。
RSSが提供されていない場合、ブログの情報をいい感じに取り出してくれる データフロー を使います。データフローはETLツールなので、少々面倒な処理でもこなすことができます。
データフローの処理を作成するには、 Power BI Desktop の Power Query エディタ を使用すると簡単です。
RSSが提供されていない場合は、「例を使用してテーブルを作成」でWebを表示させながら取得したいデータをいくつか書き込むと、いい感じに続きを補完してくれます。
ただし、このままではデータフローで使えないので、 Web.BrowserContents関数 を Web.Contents 関数に変更します。(カッコ内の引数はそのままでOK!)
Html.Table でCSSセレクタを使って取得していますので、M言語とCSSセレクタを勉強すれば詳細エディタで動作を書くことができます。
※参照:「Power QueryでCSSセレクタを使ってWebページからデータを取得する」
作成したクエリをPower Appsのデータフローに貼り付けます。
貼り付けは Ctrl + v で行います。
テーブルのマッピングを行って読み込みます。タイトルやリンクの項目は、ここでは複数行テキストにしていますが、1行テキストのほうが適しています。しかし、ここで新しいテーブルを作成して読み込むと最大100文字に設定されてしまい、読み込み時にエラーになることがあります。後で文字数を300程度に変更しなければなりません。
出来上がったテーブルには、キーの作成と、日本語のタイトル、説明を入れる項目を追加しておきます。
翻訳
タイトルと内容を日本語にするには、Power AutomateのTranslateアクションを使用します。
本文の中にHTMLタグが混じっている場合は、Htmlからテキスト のアクションを追加します。また、改行をスペースに変更したい場合は、以下のような式を使います。
replace(body('Html_からテキスト'),decodeUriComponent('%0A'),' ')
ツイート
先のフローに続いて、ツイートするアクションを追加します。
説明文は、ツイッターの文字数制限があるので、切り詰める必要があり、私は以下のような関数を使っています。
slice(
replace(
body('Html_からテキスト'),
decodeUriComponent('%0A'),
' '
),
0,
sub(
110, // エラーになる場合は、この値を調整
length(
body('Translate_Title')
)
)
)
キャンバスアプリ
Power Appsで、Dataverseに保存されたデータをギャラリーで表示してみます。私は、以下のようなものを作成しています。データフローでは、1つの処理の中で複数のソースをまとめることもできるので、Power Apps, Power Automate, Power BI, Power Virtual Agent, Excel のブログ情報を一括して登録しています。