1.はじめに
今回は、直近7日間のツイートを取得するAPIをHTTPアクションで呼び出すフローを実装します。
APIに渡す検索文字列などのデータはListsの巡回リストから取得します。
2.ベアラートークンの確認
X APIを使用するためのベアラートークンを確認しておきます。
2.1.X Developer Potalへのアクセス
以下のURLにアクセスして、X Developer Portalの「Projects & Apps」の「Overview」画面にアクセスします。
※Xのツイート画面に遷移してしまう場合には、Xにログインした状態で、再度上記のURLにアクセスしてください。
2.2.アプリの選択
「(4) X APIを使用するための準備」の「3.アプリの認証設定」で設定を行ったアプリの鍵のアイコンをクリックします。
2.3.再生成の実行
「Authentication Tokens」欄に表示される、「Bearer Token」の横の「Regenerate」をクリックします。
確認画面で、「Yes, regenerate」を選択します。
2.4.ベアラートークンの取得
表示されたベアラートークン(Bearer Token)の値は、次節の「3.X API情報の設定」で使用します。その設定が終わるまでこの画面を閉じないで表示しておくか、メモ帳アプリ等に一時的にコピー&ペーストしておいてください。
※値を忘れた場合には、再度Regenerateを行えばOKです。もし、他でこのトークンを使用している場合には、そちらも新しい値に置き換える必要があります。
※この値を知っていれば誰でもX APIを利用できてしまいます。漏洩したと思われる場合にもRegenerateして新しいトークンに置き換えてください。
3.X API情報の設定
X APIにアクセスするために必要な情報を変数として設定します。
3.1.アクションの追加
「リスト情報」アクションの下の+をクリックして、「アクションの追加」を選択します。
3.2.アクションの選択
「変数(Variable)」の中から「変数を初期化する」を選択します。
3.3.アクション設定
(1)アクションの名前を「X API情報」に変更します。
(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。
※value内の「bearerToken」には、「2.4.ベアラートークンの取得」の値を貼り付けます。
▼パラメーター
名前 | 設定する値 |
---|---|
Name | varXApi |
Type | Object |
Value | ※下記参照 |
Valueは、以下のようにJSON形式で設定します。
{
"bearerToken": "「2.5.ベアラートークンの取得」のベアラートークンの値",
"endpointUrl": "https://api.twitter.com",
"expantions":"author_id,attachments.media_keys,in_reply_to_user_id,referenced_tweets.id,referenced_tweets.id.author_id",
"mediaFields": "url,duration_ms,preview_image_url,variants",
"tweetFields": "created_at,public_metrics,referenced_tweets",
"userFields": "",
"maxResults": 10,
"xUrl": "https://x.com"
}
4.巡回リストの解析
前回の記事でListsから巡回リストを取得しました。このデータはJSONとして返却されるため、「JSONの解析」アクションのデータに取り込んで、動的なコンテンツとして扱えるようにします。
4.1.アクションの追加
「リストから巡回情報を取得」アクションの下の+をクリックして、「アクションの追加」を選択します。
4.2.アクションの選択
「Data Operation」の中から「JSONの解析」を選択します。
4.3.アクション設定
(1)アクションの名前を「巡回リストの解析」に変更します。
(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。
▼パラメーター
名前 | 設定する値 |
---|---|
Content | ※下記参照 |
Schema | ※下記参照 |
Contentは、以下のように、動的なコンテンツの挿入(稲妻アイコンをクリック)して、「リストから巡回情報を取得」の「本文」を設定します。
Schemaは、以下を直接入力(コピー&ペースト)します。
{
"type": "object",
"properties": {
"value": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ID": {
"type": "integer"
},
"Title": {
"type": "string"
},
"query": {
"type": "string"
},
"teams_group_id": {
"type": "string"
},
"teams_channel_id": {
"type": "string"
},
"is_enabled": {
"type": "boolean"
},
"newest_id": {
"type": "string"
},
"newest_time": {
"type": "string"
}
},
"required": [
"ID",
"Title",
"query",
"teams_group_id",
"teams_channel_id",
"is_enabled"
]
}
}
}
}
5.巡回リストを分解
Listsに登録されている巡回リストは複数登録することができます。
これらを一件ずつ処理するために、行毎に分解します。
5.1.アクションの追加
「巡回リストの解析」アクションの下の+をクリックして、「アクションの追加」を選択します。
5.2.アクションの選択
「Control」の中から「それぞれに適用する」を選択します。
5.3.アクション設定
(1)アクションの名前を「巡回リストを分解」に変更します。
(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。
▼パラメーター
名前 | 設定する値 |
---|---|
Select An Output From Previous Steps | ※下記参照 |
Select An Output From Previous Stepsは、動的なコンテンツの挿入(稲妻アイコンをクリック)して、「巡回リスト解析」の「Body value」を設定します。
(3)「▼設定」の表に従って、「設定」タブから以下を赤枠のように「制限」を「オン」として、「並列処理の次数」を「1」に設定します。 (「コンカレンシーの制御」及び「並列処理の次数」は、それぞれ「Concurrency control」及び「Degree of parallelism」の表記になっているかもれません。)
▼設定
名前 | 設定する値 |
---|---|
コンカレンシーの制御 | オン |
並列処理の次数 | 1 |
6.最近のツイート一覧を取得
X APIにアクセスして、最近のツイート一覧を取得します。
6.1.アクションの追加
「巡回リストを分解」アクションの枠内の+をクリックして、「アクションの追加」を選択します。
6.2.アクションの選択
「HTTP」の中から「HTTP」を選択します。
6.3.アクション設定
(1)アクションの名前を「最近のツイート一覧を取得」に変更します。
(2)「▼パラメーター」の表に従って、「パラメーター」タブから以下の赤枠のように設定します。
▼パラメーター
名前 | 設定する値 |
---|---|
URI | ※下記参照 |
Method | GET |
Headers | ※下記参照 |
URLは、以下を入力(コピー&ペースト)します。
@{variables('varXApi')?['endpointUrl']}/2/tweets/search/recent?max_results=@{variables('varXApi')?['maxResults']}&sort_order=recency&query=@{uriComponent(item()['query'])}&expansions=@{variables('varXApi')?['expantions']}&media.fields=@{variables('varXApi')?['mediaFields']}&tweet.fields=@{variables('varXApi')?['tweetFields']}&user.fields=@{variables('varXApi')?['userFields']}
Headersには以下を入力(コピー&ペースト)します。
Authorization | Bearer @{variables('varXApi')?['bearerToken']} |
7.動作確認
フローを保存して、X APIを使用してツイート情報を取得できるかどうか確認します。
7.1.フローの保存、テストの実行
今回の手順までのフローを作成すると下図のようになります。
画面上部の「保存」をクリックして、フローの作成状態を保存します。
その後、前回の記事と同様に、次に「テスト」を実施します。
7.2.テスト結果の確認
上部に「ご利用のフローが正常に実行されました。」と表示され、すべてのアクションに緑色のチェックが表示されていることを確認します。
「最近のツイート一覧を取得」のアクションをクリックすると、実際にこのアクションを実行したときの詳細情報を確認できます。
「出力」欄の「body」欄を見ると、取得したツイートデータを取得できていることが分かります。
ちなみに、ツイートの検索文字列に一致するデータが存在しない場合には、「出力」欄の「body」欄が以下のようになります。
8.補足
▼「4.巡回リストの解析」アクションについて
直前の「リストから巡回情報を取得」アクション実行後に、意図したデータが返っているかをチェックする目的で追加しています。
そのため、このチェックが不要であれば省略することができます。(後のアクションで参照している変数を調整する必要がありますが。)
具体的には、取得したリストのデータが「Schema」として登録した構文と一致しているかをチェックしています。
特に、「(3) 巡回用リストの作成」の記事でリスト作成時に必須とした列は、以下のように「Schema」のrequireブロックで必須の値として指定しています。
"required": [
"ID",
"Title",
"query",
"teams_group_id",
"teams_channel_id",
"is_enabled"
]
必須とした列が取得したデータに含まれていなかったり、作成したリストの列名が間違っていると、次のように「ValidationFailed」エラーになります。
このようなエラーが発生したときには、「(3) 巡回用リストの作成」の記事で作成したリストの設定内容も見直してください。
▼「4.3.アクション設定」のSchema
本記事では、Schemaの文字列が予め分かっているため直接入力しています。
「リストから巡回情報を取得」アクションの出力(ペイロード)を元に設定する場合には以下のように行います。
「巡回リストの解析」アクションのSchema欄に、以下のように「{}」を入力します。
フローのテストを実行します。
実行後、「リストから巡回情報を取得」アクションを選択して、「パラメーター」の「出力」にある「body」欄をコピー(赤丸部分のアイコンをクリック)します。
フローの編集に戻り、「巡回リストの解析」アクションを選択します。
「Schema」欄の「サンプルのペイロードを使用してスキーマを生成する」をクリックして、先ほどコピーした内容を貼り付けます。
貼り付けた内容を元に「Schema」が作成されます。
(「4.3.アクション設定」の「Schema」では、requiredブロックが調整されているため、内容が若干異なりますが、どちらの内容でも機能します。)
▼「5.巡回リストを分解」
巡回リストとしてMicrosoft Listsを使用しているため、複数の行を追加することができます。
「リストから巡回情報を取得」アクションではそれらすべてを取得するため、「それぞれに適用する」アクションを使用して 1行ずつに分解してループ処理を行います。
例えば、以下のデータはvalueの値として、[~]が設定されているため、配列を意味しています。
このデータを「それぞれに適用する」アクションに渡すと、最初のループでは青字のデータが、次のループではオレンジ色の文字のデータが・・・というように順番に取り出されます。
{
"value": [
{
"@odata.etag": "\"12\"",
"ItemInternalId": "1",
"ID": 1,
"Title": "PowerAutomateテスト1",
※途中省略
},
{
"@odata.etag": "\"16\"",
"ItemInternalId": "2",
"ID": 2,
"Title": "PowerAutomateテスト2",
※途中省略
}
]
}
▼「5.巡回リストを分解」のコンカレンシー制御
「それぞれに適用する」アクションのループ処理では、共通の変数を使用します。
ループを並列実行すると変数に意図しない値が格納される場合があるため、直列(コンカレンシーに1を指定)で処理されるようにしています。
▼「6.最近のツイート一覧を取得」のURI
次のようにHTTPアクションのURIパラメーターに埋め込んでいますが、@{と}で囲まれた青字の箇所が「式」になります。
@{variables('varXApi')?['endpointUrl']}/2/tweets/search/recent? 以降省略
ですので、以下のように▲の場所にカーソルを置いて、右のfxボタンをクリックし、
以下のようにその値を追加しても同じ意味になります。
さて、「3.X API情報の設定」で、変数(Variable)アクションを使用して「varXAPI」変数を設定しました。
ここでは、その変数の['endpointUrl']を指定しているため、フローの実行時に「https://api.twitter.com」に置き換わります。(将来的に、「https://api.x.com」に変わった場合には「X API情報の設定」アクションを修正すればOKです。)
また、URIで指定しているクエリ文字列は以下を参考に設定します。
最終的にフローで使用するすべての情報を取得するように指定しています。
9.おわりに
説明が長くなりましたが、X APIを使用して、ツイート一覧を取得するまでのフローを作成しました。
次回は、ツイート内容をTeamsのチャネルに送信する前に、いくつかの処理を追加します。
Comments