#MicrosoftFlow を使って指定したページが変更されたことを自動で通知する

# 概要

Microsoft Flow を使って特定のサイトページが更新されたかを検知し通知するワークフローを作成する。


# 前提条件

Microsoft Flow の Premiumコネクタを利用します。
そのため、Freeライセンス相当のアカウントでは実現することはできませんのでご了承ください。

- Common Data Service(以下CDS) コネクタ (Excel や SQL Server などでも代用可)
- HTTP コネクタ

また基本的に取得できる値はページソースでとれる値になります。
こんな感じのやつ（view-source:https://www.google.co.jp/）
ですので思っていた値が検知できない可能性もありますので、その場合は別な施策が必要です。
今回作成するワークフローは Microsoft Docs の特定のページが更新されたかどうかを検知し Tweet する仕組みです。

# 全体のワークフロー

今回は 2 つのワークフローを作成しています。

1つ目は ページを取得し比較するための Flow 
2つ目は 検索するサイトページを登録する Flow 
となっています。
2つ目の Flow に関しては PowerApps や Excel などでも代用可能(データが登録できればいいだけなので)です。

ページを取得し比較するための
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/e2cd6318-a5c0-70df-479e-15de2bef1c78.png)


検索するページを登録する Flow 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/c30e2a62-9614-2618-d52d-d86afb818104.png)

## データソースの準備

今回のURLが保存されている CDS のエンティティはこのようになっています。
URLMsts
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/f04491fd-bd46-a61a-1a08-762ffd7be6f9.png)


ページDOMが保存されている CDS のエンティティです。
PageDoms
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/32858319-9283-dd96-b6db-5e85da7ff4aa.png)



ここはご自身の環境やデータソースに合わせて作成してください。
テキストのサイズはguid以外すべて上限値にしています。


## 1つ目のワークフロー ページを取得し比較するための Flow を作成する


### トリガー 繰り返し

指定した時間間隔で自動的に実行するトリガーです。
今回は 6時間に 1 回と設定しています。
プラン次第で実行頻度（10分に1回とか5分に1回とか）は増やせますが、実行回数がバーストしやすいのでご注意ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/49fa1626-3b0a-7cb6-e11a-f763831fdab9.png)


### アクション URL一覧を取得

CDS(データソース)に登録されている URLを一覧で取得してきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/de724516-6265-cfba-a736-094160d530ac.png)

ここに関してはご自身のデータソースに合わせて設定を行ってください。


### アクション 変数を初期化する

guid用の変数を初期化しています。
変数初期化の理由はこちらをご参照ください。
https://idea.tostring.jp/?p=4753&fbclid=IwAR0DqXFcQACtU46JXHzAieMdvtgbwQl9Ts1JV85KyZmJbzp7E6mWlxOFOO0

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/3ea4947d-fbf9-ca51-cdea-fae8325de2d8.png)

### アクション HTTP 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/3020ead4-a17a-0f3c-821e-5406d39039d7.png)


URL を指定すると勝手に Apply to each が作成されますが、そのままでかまいません。（配列になっている値を参照すると自動的に作成されます。） 

### アクション レコード一覧を表示

URLMsts に登録されている guid を使って PageDoms に登録されている最新の PageDom を取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/54b3c7cc-9f48-ab17-c28e-12c887c0c9ea.png)



#### フィルタークエリの書き方

CDS の場合

```
名前 eq 値
```

とすることで指定カラム（名前）にした指定した値があるレコードの一覧だけが取得できます。
**表示名ではなく名前**を指定してください

#### 並べ替え順

```
並べ替えたい名前
```

と指定することで昇順後ろに desc とつけることで降順になります。

```
並べ替えたい名前 desc
```

今回は CDS が自動的に作ってくれるカラムを利用し最新データが欲しいので降順にしています。

```
createdon desc
```

データソースが CDS ではない場合はそれに対応するカラムを作成してください。

#### 上から順に取得する

前回との比較が欲しいだけなので 1 と指定します。
1レコードだけ取得できます。

### アクション 変数の設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/92b9497f-e778-8a52-e168-51b016ca2fe8.png)


guid()関数を利用します。

### アクション 新しいレコードの作成

ここまでで取得できた値をデータソースに登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/c4a8fd56-2405-f6fe-be07-6a27b703f401.png)


### アクション 条件

前回のページDomと今回のDomを比較します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/22a7c2ac-10e4-130a-8253-aadb93d4afdb.png)

左の pagedom は  **レコード一覧を表示** で取得した値 
右の pagedom は　**新しいレコードの作成** で保存した値

条件が「いいえ」つまり何か変更があった場合に Tweet するようにアクションを追加して終了です。
もちろん Facebook や メール 、モバイル通知なんかでも同様に行ってください。

## 2つ目のワークフロー 検索するページを登録する Flow 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/ffcec24b-67b5-c520-ffd3-273ff8fb6203.png)


レコードを PowerApps から受け取って登録しているだけです

# テスト

それぞれ作成したワークフローを実際に動かしてみましょう。
まずは レコードの登録です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/5dd8c4b2-479b-294c-2abf-61e57ccce8cd.png)

実行ボタンを押してレコードを登録します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/64228a37-c732-c4b3-568b-1419bf29a9a7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183354/7dd7a1e9-10e1-41f0-2ee3-caab043023bb.png)


登録が完了したら、6時間ほど待つか、同じく1つ目のワークフローを実行してください。
後はページが変更されるのを静かに待ちましょう。


# 拡張アイディア

## どこが変更されたかを検知する

結構面倒で、Flow で行うのは現実的ではない気がします。（テキストや値ならともかく、class名などが変更されてたら検知するのは至難）

## 2つ目のワークフローのトリガーを変更する

今回は PowerApps トリガーを利用していますが、例えば Forms にして、外部のユーザーでも登録できるようにするのも面白いかもしれません。

## 承認を追加する

2つ目のワークフローに承認機能を設ければ自分がいいと思ったページの更新だけを検知することができるようになります。

# まとめ

HTTPコネクタはPremiumコネクタですが、それだけの利用価値はあると思います。
今回はサイト検知ですが、 API の変更なんかも検知できそうですね。

私が書いた Microsoft Flow に関する他の記事はこちらのサイトから確認できます。
https://www.powerplatform.work/blog/categories/#Flow