Power Automate を使って月曜朝に先週のニュースをまとめ読みする

Power Automate
スポンサーリンク

Microsoft 365 好きとしては、毎週のニュースチェックは欠かせません。普段の仕事においても、自社に関するニュースをチェックしたり、お客様に関するニュースをチェックしたり、気になる商品やスポーツのニュースをチェックしたりと、ネットでニュースを見る機会が多くなっていますよね。

そんなわけで、そうしたニュースをまとめてチェックできる仕組みを Power Automate を利用して作成してみました。

情報元は Google ニュース

Microsoft の Power Automate を利用するんだから、やっぱり Bing だよねッ!とも思ったのですが、使い慣れた Google からデータを取得することにしました。調べてみると、Google ニュースの情報は RSS で取得できることが分かりました。次のような URI にアクセスして取得できます。

https://news.google.com/rss/search?q=Microsoft 365+after:2021/11/21+before:2021/11/27&hl=ja&gl=JP&ceid=JP:ja

「q=Microsoft 365」の部分が、探したいニュースのキーワードです。「after:2021/11/21」は、2021年11月21日以降のニュースを取得するという意味、同様に「before:2021/11/27」は、2021年11月27日以前のニュースを取得するという意味です。(おそらく指定する日付は世界標準時なので、日本時間とは 9 時間の時差があるかも?)あとは言語などに関する指定ですね。after や before は省略することもできます。

(2021/12/22 追記)Google 検索演算子が利用できるので、過去 1 日間のニュースを取得したい場合には、下記のように検索キーワードに「when:1d」を含めると良さそう。

https://news.google.com/rss/search?q=Microsoft 365 when:1d&hl=ja&gl=JP&ceid=JP:ja

さっそくフローを作成

Google ニュースから情報を取得する方法が分かったので、さっそくフローの作成に取り掛かりましょう。今回作成したフローは次のようなものになりました。

それでは、ポイントとなる部分を紹介していきます。

毎週月曜日に繰り返し

このフローは、毎週月曜日の朝に動いてほしいので、スケジュール トリガーから始めます。

月曜日の 9 時にセットしました。月曜日が休みの日はどうするかって?…そういうのは諦めます。こうした諦めが Power Automate でサクッとフローを作るポイントですね。

Google ニュースの RSS を取得する

いよいよ RSS を取得していきます。URI に含めるキーワードや after や before の日付に指定する値は、後から分かりやすいように変数として作成しておくことにしました。

after には、次のような計算式で得られる先週の日曜日の日付を指定します。

addDays(
    startOfDay(
        convertFromUtc(
            utcNow(),
            'Tokyo Standard Time'
        )
    ),
    sub(
        -7,
        dayOfWeek(
            convertFromUtc(
                utcNow(),
                'Tokyo Standard Time'
            )
        )
    ),
    'yyyy/MM/dd'
)

一方で before には、こちらも計算式で得られる先週の土曜日の日付を指定します。

addDays(
    startOfDay(
        convertFromUtc(
            utcNow(),
            'Tokyo Standard Time'
        )
    ),
    sub(
        -1,
        dayOfWeek(
            convertFromUtc(
                utcNow(),
                'Tokyo Standard Time'
            )
        )
    ),
    'yyyy/MM/dd'
)

これらの値を含めて、Google ニュースの RSS を取得する URI を作成しました。

ニュースの一覧をメールで送る

さて、結果をどうやって受け取るかを検討したのですが、ニュースの件数が多くなることもあるだろうなというわけで、そうした場合にでも見やすいだろうと思われるメールを採用することにしました。

ニュースの一覧を見やすくメールに含めるために、まずは RSS で取得した情報を HTML のテーブルに変換します。この変換は「HTML テーブルの作成」アクションを利用すると簡単にできます。

ここでちょっと一工夫としては、タイトルの値では A タグを利用してクリックできるようにし、公開日時の値はタイムゾーンと表示形式の変換を行いました。

タイトルの値は次のような計算式を入れています。

concat(
    '<a href="',
    item()?['primaryLink'],
    '" target="_blank">',
    item()?['title'],
    '</a>'
)

公開日時は次のような計算式です。

convertFromUtc(
    item()?['publishDate'],
    'Tokyo Standard Time',
    'yyyy/MM/dd HH:mm'
)

これで取得したデータのテーブル化ができたのですが、このままメールに貼り付けてしまうと、先ほど追加した A タグなどが上手く動作しません。そのため次のような計算式で修正し、その結果を変数に入れておくことにしました。

replace(
    replace(
        replace(
            body('HTML_テーブルの作成'),
            '&lt;',
            '<'
        ),
        '&gt;',
        '>'
    ),
    '&quot;',
    '"'
)

これがどのような処理を行っているかをちゃんと理解するには HTML の知識が必要になりますが、Power Automate によって「<」が「&lt;」などに勝手に変換されてしまっているので、それを元に戻してあげています。

そして、テーブルも見やすく表示されるように Style タグの形式で書き、これも変数に入れておきます。

<style>
table{
  border-collapse:collapse;
}
th{
  color:#0067B8;
  text-align: left;
  font-weight: bold;
  font-size: large;
}
td{
  border-bottom:1px dashed #EDEBE9;
}
th,tr:last-child td{
  border-bottom:2px solid #0067B8;
}
td,th{
  padding:10px;
}
</style>

(2023/8/15 追記)上記のスタイルだと、Outlook のデスクトップアプリでは上手くスタイルが適用されなかったので、下記の通り修正版を作成。

<style>
th{
  color:#0067B8;
  text-align: left;
  font-weight: bold;
  font-size: large;
  border-bottom:2px solid #0067B8;
}
td, th{
  padding:10px;
}
td{
  border-top:1px dashed #EDEBE9;
}
table{
  border-collapse:collapse;
  border-bottom:2px solid #0067B8;
}
</style>

さあ、あとはメールを作成して送信するだけです。ここまでにそろった情報を含めてメールを送りましょう!

(2023/8/15 追記)Outlook のデスクトップアプリでは、テーブルのスタイルタグはテーブルタグ本体よりも先にある必要があります。上のキャプチャの順番ではスタイルが適用されないので、テーブルタグとテーブルスタイルの順番を入れ替えてください。

どんなメールが届くか楽しみです。

おおお!これは便利だ!

次のようなメールが届きます。設定したキーワードに関するニュースが一覧で届くので、これはすごく便利になりそうです。

来週からの月曜朝のニュースチェックが楽しみです。

さいごに

個人的に欲しいなと思った機能ですが、Power Automate を使って数時間で作成することができました。途中の計算式で利用した関数などは、その都度調べながらだったので時間がかかりましたが、それでも楽しく短時間で作成できたと思います。

思いつきで作った割には、なかなか満足度高でした。

タイトルとURLをコピーしました