6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Power Automate】Atom FeedをPull型で取得するPower Automate Flow

Posted at

はじめに - Feedとは

  • RSS, Atomの総称。双方ともにBlogを始めとした記事、または更新情報などを配信するための文字規格
  • 情報配信技術の総称として説明されることもある
  • 「XML」(Extensible Markup Language)で構成されている
  • Feedlyを始めとした情報収集アプリは、 RSSリーダーであり、RSSフィードを収集している。

参考

RSSフィードの活用方法

Power AutomateにRSSフィードの更新情報をキャッチするトリガーがあるため、
Teamsを中心としたアプリで、REST APIで情報収集の自動化が可能です

Botなどで活かされているのはこのテクニックであると想定されます

PULL型の情報収集(Atom Feed)

一方、コネクタがないAtom Feedの場合は、HTTP要求を送信することによって情報をキャッチできる

  • ユーザーからHTTP要求を送ってフィードを取得する方法
  • なおYouTubeの最新チャネルを取得する、といった場合にも応用可能
    • コネクタが用意されていない場合に使える技術(YouTubeはコネクタが存在します)

今回は上記の記事を参考に、PULL型の情報収集をローコードで実践する方法をご紹介します。

1. XMLのリンクを調べる

👆の記事を参考にして展開すると、サイトによって.xmlといったURLが存在します!

今回は極めてわかりやすいサイトとして「Publickey」を紹介

image.png

上記がXMLを取得できるリンクです。

2. Power AutomateでHTTP要求を送信する

  • シンプルにHTTP要求をGET Methodで送信するとXMLが戻り値として返ってきます!
  • XMLの中から最新のFeedを取得する方法もあるが、Power Automateのjson関数でJSON形式にデータを変更します
    • JSON形式にすることによって後続の作業が進めやすくなるため
    • 筆者の感覚では 見やすい という点もポイント

推しポイント!
json関数でXMLが一瞬でJSON形式に変わる・・・
json関数大好きです🐟✨

3. JSONから最新の情報を抜き出す

JSONをで読み解くと、entry が配列になっており、こちらのインデックス[0]のオブジェクトが、
最新記事と解釈できる👀✨

  • より詳細に調べたい方は自分でやってみましょう!
関数
json(body('XML_PULL'))?['feed']?['entry'][0]

配列のインデックスは0始まり!

戻り値
{
  "title": "Ruby30周年イベント(中編)~言語を「作りたい」と思ってから10年以上経って、スキルと環境が追いついてRubyを作ることができるようになった",
  "link": {
    "@rel": "alternate",
    "@type": "text/html",
    "@href": "https://www.publickey1.jp/blog/23/ruby3010ruby.html"
  },
  "id": "tag:www.publickey1.jp,2023://2.7104",
  "published": "2023-03-01T16:21:41Z",
  "updated": "2023-03-02T02:56:10Z",
  "summary": "まつもとゆきひろ氏によって開発が始まったRuby言語の30周年を祝うイベント「プログラミング言語Ruby30周年記念イベント」が2月25日にオンラインで開催されました。 イベントでは関係者やRuby愛好家らによる過去30年の振り返りやRub...",
  "author": {
    "name": "jniino"
  },
  "category": [
    {
      "@term": "プログラミング言語",
      "@scheme": "http://www.sixapart.com/ns/types#category"
    },
    {
      "@term": "ruby",
      "@label": "Ruby",
      "@scheme": "http://www.sixapart.com/ns/types#tag"
    }
  ],
  "content": {
    "@type": "html",
    "@xml:lang": "ja",
    "@xml:base": "https://www.publickey1.jp/",
    "#text": "\n\nまつもとゆきひろ氏によって開発が始まったRuby言語の30周年を祝うイベント「プログラミング言語Ruby30周年記念イベント」が2月25日にオンラインで開催されました。 イベントでは関係者やRuby愛好家らによる過去30年の振り返りやRubyにまつわるライトニングトークなどが行われ、最後にまつもとゆきひろ氏による基調講演「D is for Dream, V for Vaporware」が行われました。 基調講演では、Rubyを開発する前にまつもと氏が手がけた、Rubyの原点と……\n\n    "
  }
}

ここから取得するデータを抜き出し、POSTする方法を組み立てて、情報収集ツールとして活かせます!

4. スケジュールされたトリガーで情報収集

PULL型の情報収集になるため、スケジュールされたトリガー で定期的にHTTP要求を送信する

  • HTTP
    image.png

URIを指定するだけの極めてシンプルな内容になります。

筆者の意見
より短いスパンでHTTP 要求を送信することもできますが、相手方の㏋のサーバー負荷の軽減と、
Power Automateの制限も考慮したスケジュールを考えましょう

5. 連続投稿を避けるために

スケジュールされたトリガーで実施することを考えると、同じ情報を連続して投稿してしまう可能性があります。
そのため、取得したフィードが配信済みか、未配信か判断することが必要になるでしょう。

ここでは使いやすいSharePointのListにて対処します。
image.png

  1. 最上段のレコードにタイトルと最新更新日時を格納しています。
  2. この値との一致・不一致でPOSTするか、どうかを判断する方法です!

SharePoint ListにURIを格納することで、
複数サイトからまとめて収集することもできますね!

JSONのスキーマからpublishedに当たる部分が配信日付です。
投稿する際にpublishedが同じ値であれば配信済み情報と判断することが出来ます。

  • 上記はあくまで一例です。Excelを始め、好きなものを使いましょう。
  • 今回はPower Platformの相性の良さからSharePointを推します🐟✨
Title latest_Date
feed title publish datetime
  • 日付文字列でyyyy-MM-DDThh:mm:ssZの形式で比較できる簡単さ・・・好きです🐟✨

具体的なフロー

  1. Recurrence
  2. HTTP 要求
  3. 戻り値のXMLをjson関数で変換
  4. SharePointのレコードで配信済みの情報かどうか、条件分岐で確認する
  5. 条件分岐
    • 配信済みの判断はレコードの「lastest」 = Jsonの「published」で判断、equelの場合は終了
    • Not equelの場合は、アダプティブカードをデザインし、ポスト
    • Imageは要求先のfaviconを利用

image.png

Teamsに表示される最新情報!

image.png

アダプティブカードでCoolに情報をストックできます!
最新情報を見逃さない👀✨!

取得された情報

VUCA時代、AIの新情報も一切見逃せません。
Teamsを中心に、組織や個人で情報収集感度を高める上でもオススメです。

またPostされたFeedを話題に、議論が始まり、新たなコラボレーションが生まれると良いですね。

Goodな情報収集ライフを!

以上が説明でした。
RSSフィードについては、情報を取得しやすいコネクタが既にあるので、そちらを活用しましょう。

  • ちなみにこんな感じになります
    • ナチュラルにJSONでFeedの情報が返ってくるの本当にラク・・・💦
      image.png

お付き合いいただき、ありがとうございました!
楽しいPower Lifeを!

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?