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

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

Google Analytics APIを使ってブログのPV数を見る

f:id:nogawanogawa:20200323213207p:plain

せっかくのGWなんで(?)、今回は普段は絶対やらないことをやってみたいと思います。

今回はGoogle Analytics APIを使ってブログに対するアクセスを可視化してみたいと思います。

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

note.com

それではやっていきたいと思います。

Google Analytics

Googleアナリティクスとは、Googleが提供するアクセス解析ツールです。 【今さら聞けない】Googleアナリティクスとは?導入手順から使い方まで5分で理解!|アクセス解析ツール「AIアナリスト」ブログ

Webサイトの運営をしていたり、ブログをちゃんと運営している方にはおなじみのサービスですね。 ユーザーがどこから来て、どんな特徴を持っていて、どんなふうな行動をとったのかを確認することができるので、Webサイトの運営はサイトの改善のためのインプット情報として使うことができます。

このサービスは、Google Analyticsのサイトに行けば十分利用できるのですが、APIも提供されおりAPI経由でデータを取得してプログラム等で使用することができるようになっています。

やりたいこと

今回は手始めに、

  • ブログに対するアクセスの総数
  • 頻繁に閲覧されている記事のリスト

を取得してみたいと思います。

Google Analytics API

公式のドキュメントとしては、こちらからご参照ください。

developers.google.com

今回は、その中でも"Core Reporting API"を使っていきたいと思います。

developers.google.com

準備

基本的にこちらの記事をそのままなぞれば動きましたので、詳しくはこちらの記事を是非ご参照ください。

note.com

大まかな手順としては、

  • Analytics Reporting APIの有効化しjsonを取得
  • Google Analytics側でAPIユーザーを追加

となります。 詳しい手順は上の記事をご参照ください。

取得してみる

準備が整ったら、実際の値を取得してみます。

アクセスの総数

上の記事を参考にアクセス数を取得してみるとこんな感じです。

実行するとこんな感じです。

$ python3 get_num_access.py
-----------------------------
ga:pagePath: /entry/vue_vuetify
ga:pageTitle: Vuetify.jsを使ってみた - どこにでもいるSEの備忘録
ga:pageviews: 136
-----------------------------
ga:pagePath: /entry/nuxtjs
ga:pageTitle: Nuxt.jsでSSRを勉強してみる - どこにでもいるSEの備忘録
ga:pageviews: 106
-----------------------------
ga:pagePath: /entry/vue_flask_1
ga:pageTitle: 【自由研究】Vue.js+Flask+Dockerで普通のWebアプリケーションを作る(その1:FlaskからVueのHelloWorld) - どこにでもいるSEの備忘録
ga:pageviews: 73
-----------------------------
ga:pagePath: /entry/twitter_embed
ga:pageTitle: TwitterのタイムラインをVueで作ったWebページに埋め込むメモ - どこにでもいるSEの備忘録
ga:pageviews: 69
-----------------------------
ga:pagePath: /entry/flask_2
ga:pageTitle: Flaskでrest apiを作ってみる(MySQLへ接続する) - どこにでもいるSEの備忘録
ga:pageviews: 68
-----------------------------
ga:pagePath: /entry/vue_flask
ga:pageTitle: 【自由研究】Vue.js+Flask+Dockerで普通のWebアプリケーションを作る(その2:画面をちゃんとする) - どこにでもいるSEの備忘録
ga:pageviews: 68
-----------------------------
ga:pagePath: /
ga:pageTitle: どこにでもいるSEの備忘録
ga:pageviews: 64
-----------------------------
ga:pagePath: /entry/agile
ga:pageTitle: 仮説検証型アジャイル開発とはなにか - どこにでもいるSEの備忘録
ga:pageviews: 57
-----------------------------
ga:pagePath: /entry/backend_api
ga:pageTitle: 【自由研究】Vue.js+Flask+Dockerで普通のWebアプリケーションを作る(その3:Dockerコンテナでマイクロサービスっぽくする) - どこにでもいるSEの備忘録
ga:pageviews: 55
-----------------------------
ga:pagePath: /preview
ga:pageTitle: 【読んでみた】シン・ニホン AI×データ時代における日本の再生と人材育成 - どこにでもいるSEの備忘録
ga:pageviews: 55

過去30日によく見られた記事が取得できていますね。

頻繁に閲覧されている記事のリスト

こちらは、基本的に上で書いている内容のリクエストをちょっといじるだけで取得できます。 変えるところだけ抜粋するとこんな感じです。

これで実行するとこんな感じです。

% python3 get_num_access_per_day.py
-----------------------------
ga:date: 20200402
ga:1dayUsers: 33
-----------------------------
ga:date: 20200403
ga:1dayUsers: 36
-----------------------------
ga:date: 20200404
ga:1dayUsers: 17
-----------------------------
ga:date: 20200405
ga:1dayUsers: 24
-----------------------------
ga:date: 20200406
ga:1dayUsers: 37
-----------------------------
ga:date: 20200407
ga:1dayUsers: 38

--- 長いので以下省略 --- 

可視化

次に、取得した値をグラフ化してみたいと思います。 今回は、vue-chartjsを使用して可視化したいと思います。

vue-chartjs.org

下準備

上記のPythonコードのままだと扱いづらいので、json形式で応答するように”print_response”メソッドを書き換えます。

これで上記の応答がjson形式でやり取りできるようになりました。 ここまでできれば適当にFastAPIなどでAPIサーバー立ててあげたら良いと思います。

アクセスの総数

過去30日分のアクセス総数について、折れ線グラフ(line chart)で可視化したいと思います。 vueコンポーネントはこんな感じになっています。

見た目としてはこんな感じです。

f:id:nogawanogawa:20200503015752p:plain

頻繁に閲覧されている記事のリスト

こちらについては、過去30日でアクセスの多かった記事を棒グラフ(bar chart)で可視化したいと思います。 vueコンポーネントはこんな感じになっています。

こちらも、見た目としてはこんな感じです。

f:id:nogawanogawa:20200503015952p:plain

その他の実装・サイト

github.com

サンプルはこちら。

https://profile-691e5.firebaseapp.com/BlogAnalysis

感想

なんとなくできたので満足です。

はてなブログを使ってる限りは、上でやった内容(+流入経路)はすべてユーザーのダッシュボードから確認することができます。 なので、はっきり言って今回やったことは無駄の極みですが、やってみたくなったんだから仕方ないです。

ということで、なんでやったのか全くわからないけど、ただやってみたかったという記事でした。