top of page
  • Akira Mizuno

XのツイートをTeamsに投稿するフローの作成~2.概要/Power Automate

更新日:6 日前

1.はじめに

 

Power Automateでは、用意されたコネクタを接続してサクッと作ることがきる、シンプルなフローを作成することが多いと思います。

今回テーマとするフローは、HTTPアクセスの実装やX APIの仕様を理解してアルゴリズムを考える必要があります。

また、何も考えずに作りこむとフローの入れ子の制限である8を超えてしまいます。


このような場合には、開発者がプロコード(Pythonなどのプログラム)で実装する方法も選択肢になりますが、複雑なフローならではの工夫の仕方が見えてくると思います。


実際に今回のフローを作成してPower Automateの理解が深まったと私自身が感じていますので、主に学習目的のために作成方法を記載していきたいと思います。

(まだ初めの方の記事しか書いていませんが、合計10回くらいになりそうです。)


あれもこれもと機能を拡充していくと少し複雑になりましたので、まずは機能の概要などについてまとめてみます。



2.前提

 

まずは、フローを作成するにあたり、想定あるいは前提となる条件は以下の通りです。


▼フローのタイプ

Power Automateのクラウドフローを使用します。フローの作成は、以前のクラシックデザイナーではなく、クラウドフローデザイナー(以下のリンク参照)を使用します。 クラウド フロー デザイナーについて - Power Automate | Microsoft Learn


▼必要なライセンス

以下の通り、有料版のライセンス/プランが必要です。

  • OneDrive for Business/SharePoint Online及びMicrosoft Teamsを利用できるライセンス 例えば、Microsoft 365 Business Standard/Microsoft 365 Business Premium/Microsoft 365 E3/Microsoft 365 E5等で、Teamsを含むプランが必要です。

  • Microsoft Power Automate Premium プレミアムコネクタを利用するため有料版ライセンスが必要です。 1か月のお試しライセンスがあります。 本記事を参考にフローを作成する場合には、プレミアムコネクタ(HTTPアクション)を利用するまではこのライセンスがなくても、フローの作成と確認を行うことができます。 ※代わりにAzure Logic Appsも利用できます。ただ、従量課金ですので意図しない料金の発生には注意が必要です。こまめな料金のチェックや予算アラートの設定をお勧めします。 ※テスト・開発のみの利用であれば、以下のPower Apps Developer Planを利用できると思います。(制限や条件等を確認してください。) →Power Apps 開発者プランについて - Power Platform | Microsoft Learn

  • X API Basicプラン 以下のリンクから別途契約が必要です。(ドル表記に慣れていないと費用感がわかりませんが、別のプランを申し込まないようにご注意を。) X API | Products | Twitter Developer Platform 本記事を参考にフローを作成する場合には、X APIを呼び出すアクションを実装するまではこのプランがなくても、フローの作成と確認を行うことができます。


▼Power Automateの知識

本記事では、トリガーやアクション等のフローの作成方法やテスト、関数や動的なコンテンツの使い方、「条件(Condition)」や「それぞれに適用する(Apply to Each)」等のよく利用されるアクションの動作についても理解していることを想定しています。

また、JSONのデータ構造を多用しています。ソフトウェア開発経験がなければ少し難易度が高いと思いますが、理解できればPower Automateの活用の幅が広がります。

もし、Power Automateの理解度に自信がないようでしたら、下記のリンクや関連する書籍を参考にしてください。


▼投稿先Teamsのチャネルの準備

X APIで取得したツイートを投稿するTeamsのチャネルが必要です。


▼アクセス権限

利用者自身でフローを作成して実行する想定です。Power Automateフローを作成する権限やMicrosoft Listsにアクセスする権限の追加が必要になる場合があります。



3.機能・仕様

 

以下に記載した機能を実装していきます。


▼X APIの認証方法

今回使用するX APIは、以下のリンクのOAuth 2.0 App-Onlyという認証を利用可能ですので、これを使用します。Bearer Tokenという文字列で認証できるため、簡単に実装できます。

※この文字列を知っていれば誰でもX APIにアクセスできてしまうため、漏洩しないように注意が必要です。


▼ツイートデータの取得

繰り返しトリガーにより、一定間隔でX APIにツイートデータを取りに行きます。 15分単位で取得件数の制限があるため、取得間隔と一度に取得できるメッセージ数を調整できるようにします。前者は繰り返しトリガーで設定を行い、後者はX APIによるメッセージ取得時に最大取得件数を指定できるようにします。


また、同じメッセージが再度Teamsに投稿されないように、前回最後に取得したツイートのIDを保持しておき、次のツイート取得時にそれ以降のデータを取得するようにします。

なお、7日間以前のツイートIDを条件とするとX APIでエラーとなるため、その投稿日時も保持しています。


▼ツイートと投稿先Teamsの設定

ハッシュタグや投稿者等のツイートの検索条件と投稿先のTeamsチャネル情報をMicrosoft Listsで管理できるようにします。

それらの条件は複数登録できるため、条件ごとに巡回してツイートデータを取得します。


また、前項の前回最後に取得したツイートのIDとその投稿日時も保存します。


▼ツイートの検索条件

Microsoft Listsで指定した検索条件(クエリ)をX APIでそのまま利用します。以下のリンクのように指定することができます。


▼投稿内容

ツイート本文に加えて、添付された画像も表示します。

動画やアニメーションGIFの場合には、プレビュー画像を表示するようにします。

※ツイート本文は文字数制限があります。


引用したツイートも投稿メッセージに含めて表示します。引用に画像が添付されていれば表示します。二階層以上の引用は処理が複雑になるので非対応とします。


リプライについては、フローが実行された時点のメッセージを親の投稿に紐づけて表示します。仕組み上、後からはリプライが追加されません。


その他、カード表示には非対応です。



4.利用イメージ

 

フローの完成後に利用方法は以下のようになります。


まずは、Microsoft Listsを利用して、巡回用のリストを作成します。

ツイートの検索文字列と、投稿先のTeamsチャネル情報をそれに登録します。


例えば、Teamsのチャネルに次のようにツイートが投稿されます。

投稿者名、投稿日時、ツイートIDも記載しています。

ただ、文字数制限がありますので、すべての文章が表示されない場合があります。


引用付きの場合は以下のようになります。



5.補足

 

用語、細かい仕様や制限等を以下に補足します。


▼フローの制限

様々な機能を組み入れて全体のアクション数が大きくなりますので、設定によっては下記のフロー関連の制限を超える場合があります。

必要に応じて、巡回リストに登録する件数、フローの実行タイミング、ツイートデータの取得件数を調整してください。


▼APIについて

アプリケーションプログラミングインターフェースの略で、ソフトウェアやサービスが他のソフトウェアやサービスと通信するための方法を定義したものです。

今回は、X APIに対して決められた方法(アクセスURL、クエリ文字等)でアクセスすると、ほしい情報(最近のツイート一覧やツイートデータ等)をJSON形式で取得することができます。取得できるデータはJSON形式のため、詳細な内容(ユーザー名やツイート本文等)を抽出する処理が必要になります。


▼「それぞれに適用する(Apply to Each)」のコンカレンシー

ループ内で変数を使用しているため、1(並列実行しない)に制限します。


▼セキュリティ

利用するユーザーや各サービスはセキュリティで保護されて信頼できるものとして、今回作成するフローでは不正アクセス等のチェックは省略しています。


▼エラー処理

厳密にエラーをチェックするとフローが長く複雑になるため、最小限のエラー処理のみ追加しています。


▼その他

チューニングの余地はたくさんあります。余力や機会があれば、Copilotやプロセスマイニング機能も利用してみたいと思います。

また、バグが含まれているかもしれません。ご利用は自己責任でお願いします。



6. おわりに

 

次回の記事では、「4. 利用イメージ」の巡回リストの作成方法を記載します。



Comments


Commenting has been turned off.
bottom of page