top of page
Akira Mizuno

(11) 添付メディアの表示

更新日:11月12日

1.はじめに

 

今回は、ツイート内に含まれるメディアの画像を表示します。

(Animation Gif及びVideoの場合にはプレビュー画像を表示します。)


例えば、実装前には以下のようにメッセージのみですが、

実装後には以下のように画像が表示されます。



2.添付メディアデータ

 

ツイート内に含まれる画像等の添付メディアデータを格納する変数を追加します。


2.1.アクションの追加

フロー上部にある「最新のツイート日時」の下の+をクリックして、「アクションの追加」を選択します。


2.2.アクションの選択

「変数(Variable)」の中から「変数を初期化する」を選択します。


2.3.アクション設定

(1)アクションの名前を「添付メディアデータ」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Name

varMediaData

Type

Array

Value

[]



3.添付画像タグ

 

HTMLタグ用の変数を追加します。これは、添付メディアの画像をTeamsのメッセージに埋め込むために使用します。


3.1.アクションの追加

「添付メディアデータ」アクションの下の+をクリックして、「アクションの追加」を選択します。


3.2.アクションの選択

「変数(Variable)」の中から「変数を初期化する」を選択します。


3.3.アクション設定

(1)アクションの名前を「添付画像タグ」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Name

varImageTag

Type

String

Value ※


※Valueには何も入力しません。



4.添付メディアあり?

 

ツイートデータ内に添付メディアが含まれるか判定します。


4.1.アクションの追加

「添付メディアデータの処理」の中の+をクリックして、「アクションの追加」を選択します。


4.2.アクションの選択

「Control」の中から「条件」を選択します。


4.3.アクション設定

(1)アクションの名前を「添付メディアあり?」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

Condition Expression

AND





@empty(items('最近のツイートデータを分解')?['attachments']?['media_keys'])

is equal to

@false



5.添付メディアデータを変数に設定

 

X APIの応答データに含まれているメディアのデータを変数に設定します。


5.1.アクションの追加

「添付メディアあり?」アクション内の「True」内の+をクリックして、「アクションの追加」を選択します。



5.2.アクションの選択

「Variable」の中から「変数の設定」を選択します。


5.3.アクション設定

(1)アクションの名前を「添付メディアデータを変数に設定」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Name

varMediaData

Value

@items('最近のツイートデータを分解')?['attachments']?['media_keys']



6.添付画像タグに改行を設定

 

投稿メッセージを改行させた後に画像を表示させるために、HTMLの改行タグを先頭に追加します。


6.1.アクションの追加

「添付メディアデータを変数に設定」の下の+をクリックして、「アクションの追加」を選択します。


6.2.アクションの選択

「Variable」の中から「変数の設定」を選択します。


6.3.アクション設定

(1)アクションの名前を「添付画像タグに改行を設定」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。

▼パラメーター

名前

設定する値

Name

varImageTag

Value

<br>



7.添付メディアデータを空に設定

 

メディアデータが含まれていない場合には、変数を空に設定します。


7.1.アクションの追加

「添付メディアあり?」アクション内の「False」内の+をクリックして、「アクションの追加」を選択します。


7.2.アクションの選択

「Variable」の中から「変数の設定」を選択します。


7.3.アクション設定

(1)アクションの名前を「添付メディアデータを空に設定」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Name

varMediaData

Value

[]



8.添付画像タグのクリア

 

メディアデータが含まれていない場合には、添付画像タグ用の変数をクリアして何も表示しないようにします。


8.1.アクションの追加

「添付メディアデータを空に設定」アクションの下の+をクリックして、「アクションの追加」を選択します。


8.2.アクションの選択

「Variable」の中から「変数の設定」を選択します。


8.3.アクション設定

(1)アクションの名前を「添付画像タグのクリア」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Name

varImageTag

Value

@null



9.添付メディアデータを分解

 

添付されたメディアデータは複数存在する場合があるため、一つずつ処理します。


9.1.アクションの追加

「添付メディアあり?」のブロックの下の+をクリックして、「アクションの追加」を選択します。

(「添付メディアデータの処理」の中に作成します。)


9.2.アクションの選択

「Control」の中から「それぞれに適用する」を選択します。


9.3.アクション設定

(1)アクションの名前を「添付メディアデータを分解」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Select An Output From Previous Steps

@variables('varMediaData')


(3)「▼設定」の表に従って、「設定」タブから以下の赤枠のように「並列処理の次数」を「1」に設定します。

(「コンカレンシーの制御」及び「並列処理の次数」は、それぞれ「Concurrency control」及び「Degree of parallelism」の表記になっているかもれません。)


▼設定

名前

設定する値

コンカレンシーの制御

ON

並列処理の次数

1



10.メディア情報を抽出

 

添付されたメディアデータの中からツイート内で使用されているメディアのデータを取り出します。


10.1.アクションの追加

「添付メディアデータを分解」の中の+をクリックして、「アクションの追加」を選択します。


10.2.アクションの選択

「Data Operation」の中から「アレイのフィルター処理」を選択します。


10.3.アクション設定

(1)アクションの名前を「メディア情報を抽出」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

From

@body('最近のツイート一覧を取得')?['includes']?['media']

Filter Query

@item()?['media_key']

is equal to

@items('添付メディアデータを分解')



11.メディアタイプを判別

 

添付されたメディアデータのタイプを判別します。


11.1.アクションの追加

「メディア情報を抽出」の下の+をクリックして、「アクションの追加」を選択します。


11.2.アクションの選択

「Control」の中から「スイッチ」を選択します。


11.3.アクション設定

(1)アクションの名前を「メディアタイプを判別」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

On

@body('メディア情報を抽出')?[0]?['type']



12.photoの場合

 

画像の場合の処理を追加します。


12.1.アクションの追加

「メディアタイプを判別」の中で、「既定」の左にある+をクリックします。


12.2.アクション設定

(1)アクションの名前を「photoの場合」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Equals

photo



13.画像タグにphotoを追加

 

画像タグの変数に画像をimgタグで追加します。


13.1.アクションの追加

「photoの場合」の中の+をクリックして、「アクションの追加」を選択します。


13.2.アクションの選択

「Variable」の中から「文字列変数に追加」を選択します。


13.3.アクション設定

(1)アクションの名前を「画像タグにphotoを追加」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Name

varImageTag

Value

<img src="@{body('メディア情報を抽出')?[0]?['url']}">



14.animated gifの場合

 

アニメーションGIFの場合の処理を追加します。


14.1.アクションの追加

「メディアタイプを判別」の中で、「既定」の左にある+をクリックします。


14.2.アクション設定

(1)アクションの名前を「animated gifの場合」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Equals

animated_gif



15.画像タグにanimated gifのプレビュー画像を追加

 

画像タグの変数にアニメーションGIFのプレビュー画像をimgタグで追加します。


15.1.アクションの追加

「animated gifの場合」の中の+をクリックして、「アクションの追加」を選択します。


15.2.アクションの選択

「Variable」の中から「文字列変数に追加」を選択します。


15.3.アクション設定

(1)アクションの名前を「画像タグにanimated gifのプレビュー画像を追加」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。

▼パラメーター

名前

設定する値

Name

varImageTag

Value

<img src="@{body('メディア情報を抽出')?[0]?['preview_image_url']}">



16.videoの場合

 

動画の場合の処理を追加します。


16.1.アクションの追加

「メディアタイプを判別」の中で、「既定」の左にある+をクリックします。


16.2.アクション設定

(1)アクションの名前を「videoの場合」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Equals

video



17.画像タグにvideoのプレビュー画像を追加

 

画像タグの変数に動画のプレビュー画像をimgタグで指定します。


17.1.アクションの追加

「videoの場合」の中の+をクリックして、「アクションの追加」を選択します。


17.2.アクションの選択

「Variable」の中から「文字列変数に追加」を選択します。


17.3.アクション設定

(1)アクションの名前を「画像タグにvideoのプレビュー画像を追加」に変更します。

(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。


▼パラメーター

名前

設定する値

Name

varImageTag

Value

<img src="@{body('メディア情報を抽出')?[0]?['preview_image_url']}">



18.Teamsにツイートメッセージを投稿

 

Teamsの投稿時のメッセージ内に画像タグを追加します。


18.1.アクションの選択

「6.4Teamsに投稿」の記事で作成した「Teamsにツイートメッセージを投稿」アクションを選択します。


18.2.アクション設定の変更

(1)Message欄の上部メニューで、NormalやArial等のフォント指定が有効になっている(選択できる)場合、「<>」をクリックします。

(「<>」をクリックするとグレー表示になり選択できなくなります。)


(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のようにMessageのみを設定します。

※フローの保存後は、Messageの内容が少し変わりますが問題ありません。


▼パラメーター

名前

設定する値

Message

<p>@{body('投稿者情報を抽出')?[0]['name']} @@{body('投稿者情報を抽出')?[0]['username']} @{formatDateTime(convertFromUtc(item()?['created_at'],'Tokyo Standard Time'),'M月d日 HH:mm')} id:@{outputs('IDからツイートページのリンクを作成')}</p><p>@{outputs('投稿メッセージの作成')}@{variables('varImageTag')}</p>

※赤文字部分が変更箇所です。



19.動作確認

 

フローを保存して、メッセージに画像が含まれることを確認します。


19.1.フローの保存、フローチェック、テストの実行

画面上部の「保存」をクリックして、フローの作成状態を保存します。

その後、以前の記事と同様に「テスト」を実施します。


19.2.テスト結果の確認

上部に「ご利用のフローが正常に実行されました。」と表示され、すべてのアクションに緑色のチェックが表示されていることを確認します。


19.3 メッセージに画像が表示されることを確認

新着のツイートメッセージに画像が含まれる場合、それが表示されることを確認します。

例えば以下のように表示されます。



20.補足

 

▼「4.添付メディアあり?」におけるメディア添付の有無のチェック

添付されている画像や動画等が含まれる場合、以下のようにattachmentsブロックにmedia_keysが含まれます。

(応答データの本体=bodyの例です)
{
  "data": [
(ここにツイートデータが配列で格納されています)
    {
      "id": "xxxxxxxxxxxxxxxxxxxx",
(途中略)
      "created_at": "2024-10-14T04:29:56.000Z",
      "referenced_tweets": [
        {
          "type": "quoted",
          "id": "yyyyyyyyyyyyyyyy"
        }
      ],
      "text": "",
      "attachments": {
        "media_keys": [
          "3_zzzzzzzzzzzzzzzzz"
        ]
      },
      "author_id": "投稿者のID",
      "edit_history_tweet_ids": [
        "xxxxxxxxxxxxxxxxxxxx"
      ]
    }
  ],

このブロック(=「items('最近のツイートデータを分解')?['attachments']?['media_keys']」)がemptyかどうかでメディアが添付されているかどうかを判定しています。



▼「10.メディア情報を抽出」のアレイのフィルター

添付されているメディアデータはツイートデータとは違うブロックに含まれているので、アレイのフィルターを使用して抽出します。


X APIの応答データは以下のようになります。

添付メディアの情報は"includes"ブロックの"media"内に含まれているので、その中のmedia_key前項のmedia_keysに一致するデータ を探します。


(応答データの本体=bodyの例です)
{
  "data": [
(ここにツイートデータが配列で格納されています)
    {
      "id": "xxxxxxxxxxxxxxxxxxxx",
(途中略)
      "created_at": "2024-10-14T04:29:56.000Z",
      "referenced_tweets": [
        {
          "type": "quoted",
          "id": "yyyyyyyyyyyyyyyy"
        }
      ],
      "text": "",
      "attachments": {
        "media_keys": [
          "3_zzzzzzzzzzzzzzzzz"
        ]
      },
      "author_id": "投稿者のID",
      "edit_history_tweet_ids": [
        "xxxxxxxxxxxxxxxxxxxx"
      ]
    }
  ],
  "includes": {
    "media": [
(ここに添付されているメディアの情報が配列にまとめて格納されています)
      {
        "url": "https://pbs.twimg.com/media/aaaaaaaaaaaa.jpg",
        "media_key": "3_zzzzzzzzzzzzzzzzzz",
        "type": "photo"
      },
      {
        "url": "https://pbs.twimg.com/media/bbbbbbbbbbbb.jpg",
        "media_key": "3_vvvvvvvvvvvvvvvvvvv",
        "type": "photo"
      },

「アレイのフィルター処理」アクションで指定するFrom欄はフィルター対象の配列、すなわちbody('最近のツイート一覧を取得')?['includes']?['media']」となります。

("includes"ブロックは"data"ブロックと同列のため「body('最近のツイート一覧を取得')」の下になります。)


media_keysは配列、すなわち複数存在する場合があるため「9.添付メディアデータを分解」で一つ一つ処理しています。

それぞれの値は「@items('添付メディアデータを分解')」として取り出すことができます。


media_keyFromで指定した配列内にあるため、「item()?['media_key']」として指定できます。

上記二つが一致したときに目的とする投稿者情報になるため、Filter Query欄にはequals関数を使用します。



21.おわりに

 

今回はメッセージにメディアの画像を表示するアクションを追加しました。

次回は参照されているツイートメッセージを表示します。


なお、今回は以下のフローを追加・変更しました。

2~3では以下の赤枠部分を追加しました。


4~17では以下の赤枠部分を追加しました。


最後に18では以下のアクションを変更しました。


bottom of page