Help us understand the problem. What is going on with this article?

Power Automateを使ってconnpassの参加イベントリマインダーを作成してみた~データの整形編~

前回

毎朝9時になったらconnpassのマイページ情報を取得するフローを作成しました。
情報取得編「記事はこちら」をやったので、今回は、データの整形編をお送ります~

取得したデータの整形

image.png
メチャクチャあるやん!っえどうしよう…

今回取得したいもの
・タイトル
・開始時間
・終了時間
・URL
取得したいものはこれ
image.png
開始?マップとは何ぞや…何を入れればいいんや…

1.開始(下の写真のどここから始めるのかい?)

値の入力(式):

split(body('HTTP'),'<div class="event_list vevent">')

イベントで分割して開始したい!

<div class="event_list vevent">
が一つのイベントなので、
・split→イベントごとに分割する。
・body →HTTP本文(結果で帰ってくる)
・<~> →イベントごとに始める。

2.マップ

以下の5つを取りたいので、式を書きます。

 1.ステータス

  Enterキー:status
  値の入力(式):

indexOf(item(),'<span class="label_status_event offer">')

  ・最初に出てくる指定した文字列の開始地点を取得するindexOf()
  ・開催前or終了<span class="label_status_event offer">

 2.タイトル

  Enterキー:title
  値の入力(式):

last(split(first(split(substring(item(),Add(indexOf(item(),'<p class="event_title"><a class="url summary" href="'),52)),'</a>')),'">'))

 ・タイトル<p class="event_title"><a class="url summary" href="
 ・最初に出てくる指定した文字列の開始地点を取得するindexOf()
 ・開始位置を進めるsubstring( ,52)
 ・分割するsplit()

 3.開始時刻

  Enterキー:eventStart
  値の入力(式):

take(substring(item(),Add(indexOf(item(),'<span class="dtstart"><span class="value-title" title="'),55)),20)

 ・開始時間<span class="dtstart"><span class="value-title" title="
 ・最初に出てくる指定した文字列の開始地点を取得するindexOf()
 ・開始位置を進めるsubstring( ,55)
 ・何文字とるかtake( ,20)

 4.終了予定時刻

  Enterキー:eventEnd
  値の入力(式):

take(substring(item(),Add(indexOf(item(),'<span class="dtend"><span class="value-title" title="'),53)),20)

 ・終了予定時刻<span class="dtend"><span class="value-title" title="
 ・最初に出てくる指定した文字列の開始地点を取得するindexOf()
 ・開始位置を進めるsubstring( ,53)
 ・何文字とるかtake( ,20)

 5.イベントのURL

  Enterキー:eventURL
  値の入力(式):

first(split(first(split(substring(item(),Add(indexOf(item(),'<p class="event_title"><a class="url summary" href="'),52)),'</a>')),'">'))

 ・イベントのURL<p class="event_title"><a class="url summary" href="
 ・最初に出てくる指定した文字列の開始地点を取得するindexOf()
 ・開始位置を進めるsubstring( ,52)
 ・分割するsplit()

開催前か終了しているか

image.png
開催前のものだけを取りたいなー!

差出人

フィルターを適用するアレイ:選択の出力
image.png

値の選択(式):

item()?['status']

開始、終了予定時刻の修正

image.png

開始

アレイのフィルター処理の結果で帰ってきた本文
image.png

マップ

開始時間と終了予定時間の時間を日本時間に修正する
Enterキー:英語から日本語に変更

 1.タイトル

  Enterキー:タイトル
  値の入力(式):

item()?['title']

 ・選択でtitleを作っているので、再利用する

 3.開始時刻

  Enterキー:開始時刻
  値の入力(式):

addHours(item()?['eventStart'],9,'yyyy/MM/dd HH:mm')

 ・選択でeventStartを作っているので、再利用する
 ・協定世界時の時間を取ってくるためaddHours( ,9, )
 ・自分の好きな形式で表示yyyy/MM/dd HH:mm

 4.終了予定時刻

  Enterキー:終了時刻
  値の入力(式):

addHours(item()?['eventEnd'],9,'yyyy/MM/dd HH:mm')

 ・選択でeventEndを作っているので、再利用する
 ・協定世界時の時間を取ってくるためaddHours( ,9, )
 ・自分の好きな形式で表示yyyy/MM/dd HH:mm

 5.イベントのURL

  Enterキー:eventURL
  値の入力(式):

item()?['eventURL']

 ・選択でeventEndを作っているので、再利用する

当日参加するイベントを取得

image.png

差出人

フィルターを適用するアレイ:選択2の出力
image.png

左側の値の選択(式):

formatDateTime(item()?['開始時刻'], 'yyyyMMdd')

・選択2で開始時刻を作っているので、再利用する
自分の好きな形式で表示yyyyMMdd
とった日付を整形formatDateTime()

右側の値の選択(式):

formatDateTime(body('タイム_ゾーンの変換'), 'yyyyMMdd')

・選択2で開始時刻を作っているので、再利用する
自分の好きな形式で表示yyyyMMdd
当日の日付を整形formatDateTime()

まとめ

データ整形編長かった…
でもやりたいことはできたし、あとは通知編だけ!
APIがなくてもHTTPから取得するやり方も難しくない!
このPower Automateのフローをつくちゃえばほったらかしでも当日になったら通知してくれるからちょー便利!

sayaka121413
おーにーくー!! いまはpowerappsでアプリを使ってるのがすごく楽しい(●´ω`●) 自己満で書いてるだけ、日記みたいなのも
sentreseau
お客様の業務に最適なDXソリューションをご提案しています。
http://sentreseau.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away