英語ブログの更新通知を受け取る

※この記事は [RPACommunity Advent Calendar 2022](https://adventar.org/calendars/7503) の12/1担当分です。

https://adventar.org/calendars/7503

スライドは、[Speaker Deck](https://speakerdeck.com/fukuyori/rpacommunity-lt-20221130)にあります。

この記事は、RPA COMMUNITY「【自動化やIT活用ネタ】ライトニングトーク大会 vol.6～初参加者大歓迎～」(2022/11/30)のLT内容をもとに作成しました。

---

# やること
海外のブログを購読したいので、更新されたときにTwitterに通知してくれるといいな。英語がわからないわけじゃないけど、できれば、通知の内容は日本語に翻訳して、ある程度内容がわかるようになっていると、優先度が決めやすいんだけどな。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/bddf7394-3ca1-b634-dba4-fa782a907e8d.png)


ということで、各種組み合わせて作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/1eb7a176-e49d-86a1-1051-9a9176fb2fb2.png)

# データの取得
## 1. RSSトリガーを使う
　規模の大きなブログは、大抵 **RSS** という、ブログの更新情報を通知してくれる仕組みがあったりします。これを使えば、Power Automate のトリガーとして拾うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/ebf97611-185d-7c60-1552-2b39a137ac1d.png)
　個のトリガーを使って、Dataverseに書き込めがさっさと出来上がります。

## 2. RSSアクションを使う
　RSSアクションを使用すれば、定期的にブログの更新情報を取得することができます。決まった時間に動かしたい場合は、こちらを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b7bb3b8a-c183-e555-c38a-55dfa427cace.png)

## 3. データフローを使う
　今回、データフローを使い方法を詳しく説明します。

　RSSが提供されていない場合、ブログの情報をいい感じに取り出してくれる **データフロー** を使います。データフローはETLツールなので、少々面倒な処理でもこなすことができます。
　データフローの処理を作成するには、 **Power BI Desktop** の **Power Query エディタ** を使用すると簡単です。

　RSSが提供されているブログをデータフローで取得する場合。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/173cc769-f08e-7255-f9a3-142151ab9388.png)

　RSSが提供されていない場合は、「例を使用してテーブルを作成」でWebを表示させながら取得したいデータをいくつか書き込むと、いい感じに続きを補完してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/989932b6-7996-7675-bc6d-0b2e3bd02215.png)
　ただし、このままではデータフローで使えないので、 **Web.BrowserContents関数** を **Web.Contents** 関数に変更します。（カッコ内の引数はそのままでOK!）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/7151f60d-3116-4d7f-c1c8-4dcd7ec952f5.png)

　**Html.Table** でCSSセレクタを使って取得していますので、M言語とCSSセレクタを勉強すれば詳細エディタで動作を書くことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/d691f92c-0d2b-7d9b-5f59-2e12c8a80c5a.png)

※参照：「[Power QueryでCSSセレクタを使ってWebページからデータを取得する](https://qiita.com/spumoni/items/cad005c1deaa522531d8)」

　作成したクエリをPower Appsのデータフローに貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/d8cb4045-1a7a-0814-027f-05ad6c92901c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/9a859ac2-a013-ef6d-d208-9bfb050423a8.png)

　貼り付けは **Ctrl + v** で行います。
　テーブルのマッピングを行って読み込みます。タイトルやリンクの項目は、ここでは複数行テキストにしていますが、１行テキストのほうが適しています。しかし、ここで新しいテーブルを作成して読み込むと最大１００文字に設定されてしまい、読み込み時にエラーになることがあります。後で文字数を３００程度に変更しなければなりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/ed6f2bce-0ef0-983d-c41d-54c97183f252.png)
　出来上がったテーブルには、キーの作成と、日本語のタイトル、説明を入れる項目を追加しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/b80bb23b-4eaa-8338-3523-7bd019203951.png)

# 翻訳
　タイトルと内容を日本語にするには、Power AutomateのTranslateアクションを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/dd178451-d8a7-1ec8-88e1-b9c7d3087cae.png)
　本文の中にHTMLタグが混じっている場合は、**Htmlからテキスト** のアクションを追加します。また、改行をスペースに変更したい場合は、以下のような式を使います。

```text:文章中の改行をスペースに変換
replace(body('Html_からテキスト'),decodeUriComponent('%0A'),' ')
```

# ツイート
　先のフローに続いて、ツイートするアクションを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/5007ec59-cbec-562a-fe4e-73d4e3982444.png)
　説明文は、ツイッターの文字数制限があるので、切り詰める必要があり、私は以下のような関数を使っています。

```
slice(
    replace(
        body('Html_からテキスト'),
        decodeUriComponent('%0A'),
        ' '
    ), 
    0, 
    sub(
        110, // エラーになる場合は、この値を調整
        length(
            body('Translate_Title')
        )
    )
)
```

# キャンバスアプリ
　Power Appsで、Dataverseに保存されたデータをギャラリーで表示してみます。私は、以下のようなものを作成しています。データフローでは、１つの処理の中で複数のソースをまとめることもできるので、Power Apps, Power Automate, Power BI, Power Virtual Agent, Excel のブログ情報を一括して登録しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/cd0a0cbe-d528-9d64-d776-a34ade3d149e.png)

# 公開
　このデータをPower Pagesで公開することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/5cea98c4-c0a9-fbdb-f054-f7747481c87a.png)