つくりおき

スタートアップで働くWebエンジニアのブログ

Node.jsでGoogle Analytics APIを使って楽にアクセスランキングを作る

今友人と作ってるやつでアクセスランキングが必要になったので作り方考えたけどDBのアクセス数インクリメントしていったらトータルランキングはできるけど、週間とか月間とかやりたい時どうすんだ???ってなって調べてたらGoogle Analyticsにたどり着いた。
というわけでNode.jsでGoogle Analytics APIを使ってWebページのアクセスランキングを集計してAWS Lambdaで毎日定期実行して更新するようにした記事です。

Google Analytics APIの設定

こちらを参考にさせて頂きました。ありがとうございます。

Google AnalyticsのデータをNode.jsを使って取ってくる(OAuth認証なし) | 株式会社ビヨンド
サービスアカウントキーの取得やらはこちらを参照されたい。
どうせGoogleのUIなんてそのうちすぐ新しくなるのでまとめるのめんどい。こういうの最新っぽい記事と直感でなんとかしてるけど英語のドキュメントとかあるんだろうか

ランキング取得までの流れ

MySQLにarticlesとweekly_rankingテーブルを作っておいてweekly_rankingテーブルを毎日更新してinner joinとかで結合した結果をAPIで返す前提。

  1. articles/:idのようなURLでWebページを用意する
  2. MySQLでarticlesテーブルとweekly_rankingテーブルを用意しておく
  3. Google Analytics APIでarticlesをURLに含むデータに対して指定の期間内のアクセスランキングを集計させる
  4. 集計結果Jsonからアクセス先の記事IDを抽出し、weekly_rankingテーブルに書き込む
  5. AWS Lambdaに配置して定期実行するよう設定
  6. APIアクセスでweekly_rankingとarticlesを結合して返す(ビュー作っておいてもいいかもしれない)

Google Analytics APIでアクセスランキング取得してDBに書き込み

 

AWS Lambdaの設定

zipに固めてアップロードして毎日定期実行されるよう設定

f:id:daryo:20171123105724p:plain

後はweekly_rankingのAPIを用意して`SELECT * FROM weekly_ranking INNER JOIN articles ON weekly_ranking.article_id = articles.id ORDER BY rank `で結合して取得するようにした

まずは週間ランキングだけ作った。
設定値や集計期間を環境変数に逃して日間や月間ランキングもすぐに用意できるようにする予定。

近況

内定もらえるやろ!って思ってた状態で一週間ハワイ旅行に行ってる間に選考進んだ2社とも落ちてた。ほぼ転職先決まった報告してしまってたのに恥ずかしい。そういう報告は内定もらってからにしようね。
CTOさんと面談しまくってはいるがほんとに行きたいと思ったベンチャー企業しか選考に進んでいないので2社しか受けなかった。転職活動はまだ続く。