■ 連載目次記事
Power Automate のフローを組んで行きます。
■ 前回の進捗
前回で Twitter コネクタを使ってツイートを取得するところまで来ました。
■ 今回の概要
Tweet は通常のツイートとリツイートでデータが変わります。この変化に分岐を使用して対応します。
■ 全体ゴール
連載のゴールの様子です。
■ 「コントロール」 コネクタの 「条件」 をアクションを追加
2022/08/30 現在、挙動が変わって null の時はエラーになるようになっています。信じていたのに......。
回避案として length(string(item()?['OriginalTweet/TweetId']))
を設定してください。
次の 1 つのステップを追加します。
コネクタ | アクション | ステップの名前 | |||
---|---|---|---|---|---|
コントロール | 条件 | length(item()?['OriginalTweet/TweetId']) | 次の値より大きい | 0 | 直ツイートか RT かを評価 - 本文と ID を記録する |
こんな感じの部分です。
■ ステップの追加
ステップの追加をします。
[ + 新しいステップ ] をクリックします。
検索枠に 「 条件 」と入力し、[ 組み込み ] をクリック、[ 条件 ] をクリックします。
前述の表の内容で条件を入力します。
これでツイートが通常のツイートかリツイートかで条件分岐できます。
■ length 関数について
今回使った length 関数は文字列の文字数が得られる関数です。大事な挙動として、文字列が null の場合に 0 を返してくれます 。これが仕様なのかはドキュメントに記述がありませんでした。この先もずっとそう動くかは不明ですが、今は信じて使うしかありません。
2022/08/30 現在、挙動が変わって null の時はエラーになるようになっています。信じていたのに......。
回避案として length(string(item()?['OriginalTweet/TweetId']))
を設定してください。
IsNullOrEmpty または IsNullOrWhiteSpace 関数を使うべきでは?
読んでくださっている皆様そう思われるでしょう。当然の疑問です。私もそう思います。しかし無念なことにそういった関数は見つけられませんでした。なので古式ゆかしい length での評価を行っています。
■ 評価の意図について
Twitter 検索の結果にはツイートの内容が入る場所が二つあります。普通に投稿したツイートとリツイートしたリツイート元が入る場所です。データによって参照するデータの場所が変わるので、そのデータが普通のツイートなのかリツイートなのかを評価しています。
今回の処理では item()?['OriginalTweet/TweetId']
を評価しています。OriginalTweet がリツイート元のツイートのデータです。ここにツイートの ID があればリツイートという評価をしています。
■ 条件の分岐の はい と いいえ それぞれで変数に値を設定
条件分岐ができました。はいの場合はリツイート元のツイートのテキストと ID を、いいえの場合は通常のツイートのテキストと ID を変数に設定します。
はい の場合
コネクタ | アクション | 名前 | 値 | ステップの名前 |
---|---|---|---|---|
変数 | 変数の設定 | tweet | ツイートの検索 の 元ツイートのテキスト | tweet 本文を記憶 (RT 元) |
変数 | 配列変数に追加 | result | ツイートの検索 の 元ツイート ID | tweet の ID を結果配列に追加 (RT 元) |
いいえ の場合
コネクタ | アクション | 名前 | 値 | ステップの名前 |
---|---|---|---|---|
変数 | 変数の設定 | tweet | ツイートの検索 の ツイートテキスト | tweet 本文を記憶 (直ツイート) |
変数 | 配列変数に追加 | result | ツイートの検索 の ツイート ID | tweet の ID を結果配列に追加 (直ツイート) |
こんな感じです。
■ 簡単ですね
簡単ですね。