CCCMKホールディングス TECH Labの Tech Blog

TECH Labスタッフによる格闘記録やマーケティング界隈についての記事など

Power Automateを使ってSNSデータ自動収集フローをかんたん構築

CCCマーケティング データアナリストの小林です。

マーケティングを行う上で、SNSの情報やバズり具合などに注目することが当たり前になってきましたね。
でも、SNSデータの収集・解析を自前で行うのは難しい&外部サービスを利用するにも高い・・・ などのお悩みを抱えている方も多いでしょう。

今回は、簡単かつ費用・環境・エンジニアリングの知識がほぼ不要で、SNSのデータの検索・収集を定期実行する仕組みを作ってみたお話です。

定期ツイート検索・自動収集のアーキテクチャ

今回の目的は以下に設定します。

  • 「CCCマーケティング」のワードが入っているツイートデータを収集する
  • リツイートは除外対象とする
  • 毎日のツイートをExcelに保存する
  • 収集は自動的に行う
  • 実行が正常に行われたらTeamsにメッセージを通知する
  • お金をかけない
  • 誰でも自分でつくれる

アーキテクチャとカッコよく言っていますが、要はどんなサービスを組み合わせて実現するか。
以下が概要図です。


f:id:kopaprin:20200316154916j:plain


今回はMicrosoft Power Automateを利用するのが勘所です。

Microsoft Power Automate


f:id:kopaprin:20200316155050j:plain


※Power Automate は個人利用であればPower Apps Community Planにより一定の範囲を無料で利用することも可能です。(記事執筆時点)

Power Automate はサーバー等の環境構築不要で様々なタスクのワークフローをローコーディングで作成できるプラットフォームです。

このサービスを利用し、ツイートの定期収集ワークフローを作成してみます。

ワークフローの作成

スケジューラーの設定とツイート検索条件指定

Power Automateでは、データ操作やボタン操作等、なんらかのトリガーに応じて実行されるフローなどがありますが、
今回は定期的に自動で実行する処理にしたいので、スケジュールをトリガーとして実行されるフローをつくります。


f:id:kopaprin:20200316155524j:plain

f:id:kopaprin:20200316155538j:plain


希望のスケジュールを設定したら、次に実行される処理(action)を接続します。
Twitterの検索アクションを指定します。


f:id:kopaprin:20200316160321j:plain


f:id:kopaprin:20200316160056j:plain


検索ワードですが、これはこのままTwitterの検索コマンドを利用できます。
例えば、以下検索コマンドを入れて実行してみると、

CCCマーケティング OR @hisashikobayashi lang:ja exclude:retweets since:2020-03-01

ツイート本文に「CCCマーケティング」の文字列のある、日本語で、リツイートを除く、2020年3月1日以降のツイートを取得することができます。

OR @<存在しないユーザー名> で、検索ワードがユーザー名に入っているパターンを除外できます。
※Twitter上では上記条件で抽出できますが、Power Automate上だとユーザー名も含まれて検索されてしまいます。検索ワード全体をstring()関数で指定するとうまくできるかもしれません。

ここまでの指定でテストを回してみると、ツイートデータがJSONで取得できているのが分かります。


f:id:kopaprin:20200317175003j:plain


なお、Power Automateでの1回のツイート数上限は100のようです。
一度に大量のツイートを収集するタスクには向かないのでご注意ください。

もし、意図通りのデータが収集できていれば、データを格納する箱(今回はExcel)を準備しましょう。

データ格納先の準備(Excel)

ツイートデータの格納先は、誰でも理解&利用しやすいExcelとします。
(もちろん、各種DBなど接続先は様々です)

ローカルファイルだと簡単に接続することが困難であるため、OneDrive上にExcelファイルを作成しましょう。

JSONデータを見ながら、必要なカラムを作成していきます。
列名は任意ですが、必ずすべての列頭をテーブル形式に変換するのを忘れないようにします。
→筆者はここで躓きました。列ごとテーブル形式に変換したりするとエラーを起こします。

f:id:kopaprin:20200316161110j:plain


テーブルに格納する変数の指定

Excelが作成できたら、テーブルに格納するフローを作成します。


f:id:kopaprin:20200316162610j:plain


検索してヒットするデータに揺らぎがあったので、ツイート本文に「CCCマーケティング」を含むか含まないかの条件分岐を設定しています。
ツイートデータが正しく収集できていれば、この処理は回避できます。
※今回のケースも関数string() の処理をすればここは不要かも。

条件がTrueの場合のみ、先ほど作成したExcelのテーブルにデータを格納します。
Excel Onlineから、「テーブルへの行の追加」を選択。
データの場所などをプルダウンで指定していくだけです。


f:id:kopaprin:20200316162826j:plain


挿入するデータはJSONで取得した内容はもちろん、関数により動的に取得することも可能です。 例えば ReceiveDateカラムとして、utcNow()を入れ込めばレコード作成日時を記録し、管理しやすくしたりできます。

Teamsへの通知

最後に、処理が終わったことをTeamsに通知するフローを作ります。
以下のとおり、Teamsのアクションで自分当てにメッセージを投げる設定をするだけで終わりです。


f:id:kopaprin:20200316162932j:plain


これでテストを回してみましょう。
Teamsで以下のとおり通知が飛んでくるようになりました。


f:id:kopaprin:20200316163114j:plain


※「成功したよ!」と言いつつ、上記設計だと例え0件でも自身満々な通知が飛んできます。
 収集した数がゼロなら分岐するとか、もうちょっと複雑にすればそこらへんも解決できるかも(怠惰)

検索日を動的に変動させる

話がTwitterの検索コマンドに戻りますが、検索日(since:~~~~)のとこは出来れば動的に変動させたいですね。
例えば毎日1日前のツイートを収集するのはこんな感じで実装できました。

CCCマーケティング OR @hisashikobayashi lang:ja exclude:retweets
since:formatDateTime(addDays(utcnow(),-1), 'yyyy-MM-dd')
until:formatDateTime(utcnow(), 'yyyy-MM-dd')


f:id:kopaprin:20200316163536j:plain


これで1日1回、自動的に最大100ツイートをExcelに保存してくれるワークフローができました。


f:id:kopaprin:20200316163630j:plain


f:id:kopaprin:20200317180019j:plain

おわりに

このあたりまでのワークフロー作成を30分程度で作れるようになってしまうのがPower Automateの素晴らしいところです。

今回の手順では1日数千~数万ツイート以上出現するようなトレンドデータ収集には向きません。 しかし、そこまでツイート数が多くないケド、データを貯めておきたい場合などはこれくらいで充分です。
もちろん、詳しくなればもっと作りこむことも出来るので、拡張性も申し分ありません。

貯めたデータは、テキストマイニングしてみるとか、BIツールに流してみるとか、自然言語処理のコーパスとして利用してみるとか、使い方は無限大です。

ツイートデータのマーケティング活用についても、今後試行錯誤していきたいと思います。