どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

Twitter API+GCP+Vue.jsで作るword cloud

f:id:nogawanogawa:20200216202934p:plain

昨年からTwitter 始めて、割とツイートも溜まってきたのでそろそろTwitter分析的なことができるかなと思って、やってみました。 ただ、泥沼にハマりました。

思いの外、めんどくさかったので記念に残しておきます。

word cloud

word cloudはこういうのです。

f:id:nogawanogawa:20200216214418p:plain

自然言語処理界隈の方々は、それなりによく見かけるのではないでしょうか?

Tweetを使ってword cloud

こちらも、もはや何番煎じだよ!ってくらい、やり尽くされてます。 先人の記録もたくさん出てきます。

www.randpy.tokyo

クラウドを使って自動定期実行したい

Twitterなんて継続する人はずっと継続していくものなので、一回word cloudを作ってもすぐに古くなってしまいます。 そのため、定期的に自動生成して、最新の状況を維持したくなります。 ここで一つポイントになるのは、貧乏人の私的にはなるべくコストを抑えたいのでサーバーレスでやりたかったわけです。

ここまで来てちょっと困りました。

  • なるべくお金はかけたくないから、サーバーレスがいい
    • 常時生成するわけではないので、使ってないときはインスタンスを消去したい
  • サーバーレス環境で日本語フォントをどうやって導入したらいいかわからん
    • これはおそらくストレージサービス(GCPではCloud Storage)で日本語フォントを管理する必要あり
    • => めんどくさそう

この結果、最終的に

  • クラウドでバッチ処理でTweetに含まれる単語のカウントを行い、そのデータを配信
    • こうするとサーバー側でフォントを気にしなくて良くなる
  • wordcloudのレンダリングはフロントエンドで行う
    • wordcloudの描画処理をクライアントサイドで実施することで、クライアントサイドで日本語フォントの問題を解決

というのが収まりが良さそうでした。 ということで、ローカルでやればアホほど簡単な処理を、縛りプ○イでやっていきます。

Twitter API

Tweetの取得にはTwitter社からAPIが提供されているので、そちらを使います。

developer.twitter.com

使い方

使用にあたり、英語でDevelopper登録が必要になります。登録の仕方はこちらを参考にやってみました。

qiita.com

英語で使用用途を書かないといけないですが、そのへんはgoogle 翻訳先生に頑張って貰えば余裕です!!←

作る

ここから本題です。実際にクラウドを使って作ってみます。 Cloud Storageのバケットを"for_twitter"と作成して、やってみました。

構成

こんな感じにしようと思います。

f:id:nogawanogawa:20200218195529j:plain:w600

多分こんな感じにすれば行けるかと思います。

Cloud Functions + Cloud Storage

Cloud SchedulerでCron設定して上げれば時間が来ると勝手に最新のTweetを取得して集計結果をCloud Storageに保存するようにします。

自分のTweetの取得 -> 形態素解析・単語数のカウント -> 保存

  Cloud Functionsで上記の処理をすべて実行して、Cloud Storageに配置します。

上で登録が済んでいるので、次はtwitterのデータを実際に取得します。 下の4つの値をcloud functionsの環境変数に登録します。

  • API_key
  • API_secret_key
  • access_token
  • access_token_secret

コード本体はこんな感じにしてます。

App Engine

集計結果の配信

作ったファイルを配信するエンドポイントを作ります。

単語数が多すぎると表示がうまくいかなかったり、遅延がひどくなったりするので、単語数は程々に。 (今の所300までは表示できました)

フロントエンド

こんな感じですかね。

動かしてみた感じ

こんな感じでしょうか。

f:id:nogawanogawa:20200311202950p:plain

参考

こちらの記事を参考にさせていただきました。

www.isoroot.jp

qiita.com

cloud.google.com

謝辞

お恥ずかしい限りですが、こんな感じに嘆いていたらいくつか書籍やリンクを紹介いただきました。 こんなくだらないことのために、なんだか本当に申し訳ないです。。。 せっかく紹介いただいた文献を備忘録として残しておきます。

GCPでデータサイエンスをやるという切り口で見た、GCPの使い方に関する書籍でした。

GCPのデザインパターンの例です。

gcp.solutions

GCPのアイコン集です。

cloud.google.com

AWSのクラウドデザインパターンだとこんな感じのものも紹介いただきました。

aws.amazon.com

この手のクラウドでのデザインパターンについては全然知識がなかったで、勉強になりました。 ありがとうございました。

感想

ローカル環境でwordcloud作るだけなら、先人の記事をなぞればそのままできます。 何を血迷ったか、サーバーレスで自動運用しようとか考えたら、めちゃくちゃ泥沼にハマりました。 結局、GCPのサービスについて調べる方が時間かかりました。トホホ。。。

今回はこんな感じで、簡単な(?)お遊びでした。