PIYO - Tech & Life -

Go lang + EchoでGoogle Analytics APIの結果をHugoから使えるように

Go" echo

またもやHugo用にGoのサーバーにAPIを追加しました。HugoでGoogle Analyticsで取っているPV順に並べた結果を使ってコンテンツを作るためです。

似たようなことをこの辺↓↓で書いてます。

ブログのビルド用にOGPの情報をJSONで返すサーバーも作った - PIYO - Tech & Life -
前回の続きです。 Hugoでブログリンクの見た目をはてなブログっぽくする - PIYO - Tech & Life - これまでHeartRails Captureを使ってきたブログ内リンクを自前の実装とショートコードに置き換えました。 以

まず認証情報を作るところがなかなか面倒です。こちらのURLがほぼまんま参考になるので順を追って実施してみてください(丸投げ)。

【最新版】GoogleAnalytics API 認証設定について画像多めで説明します。 | 株式会社LIG
おはこんばんにちは。ハルです。 PHPで Google Analytics API を使おうとしたら、UIが変わっていたので、現在の管理画面UIでの認証ファイルの作成と設定を行いました。今回は、その手順について画像多めで紹介したいと思います。 (この記事が公開されてすぐにUIが一部変わってる場合もありますが、その点についてはご容赦くださいませ) Google Analytics API をPHPで取得するチュートリアルは、公式のサンプル↓をご覧ください はじめてのアナリティクス Reporting API V4: サービス アカウント向け PHP クイックスタート プロジェクトを作成する まず、Google API

jsonを取得してGoogle Analytics側にjsonの中に書いてあるメールアドレスをユーザーとして追加するところまでやっておきます。

次にコードを書きます。

まずは依存するライブラリを追加します。(Echoのコードはすでにある前提とします。

% dep ensure -add golang.org/x/oauth2
% dep ensure

そしてimportに追加

import (
	"golang.org/x/oauth2"
	"golang.org/x/oauth2/google"
	analytics "google.golang.org/api/analytics/v3"
)

Echoに新しいルーティングを追加します。

func main() {
	e.GET("/ga", getGA)
}

ハンドラはこんな感じ。こちらをかなり参考にさせてもらいました。

go langからGoogle Analytics APIを使う - 平日インプット週末アウトプットぶろぐ
こちらの記事↓ではSpring Boot + kotlinからの利用方法でしたがgoからの利用も調査しました。Spring Boot + kotlinでGoogle
func getGA(ctx echo.Context) error {
	client, err := google.DefaultClient(
		oauth2.NoContext,
		"https://www.googleapis.com/auth/analytics.readonly")
	if err != nil {
		return ctx.String(http.StatusInternalServerError, fmt.Sprintf("Unable to read client : %s", err.Error()))
	}

	service, err := analytics.New(client)
	if err != nil {
		return ctx.String(http.StatusInternalServerError, fmt.Sprintf("Unable to Access Google Analytics: %s", err.Error()))
	}

	result, err := service.Data.Ga.Get("ga:xxxxxxxxxx", "7daysAgo", "today", "ga:pageviews").Dimensions("ga:pagePath,ga:pagePathLevel1,ga:pagePathLevel2,ga:pageTitle").Filters("ga:pagePath=~^/posts/").Sort("-ga:pageviews").Do()
	if err != nil {
		return ctx.String(http.StatusInternalServerError, fmt.Sprintf("Unable to get data: %s", err.Error()))
	}

	return ctx.JSON(http.StatusOK, result)
}

ga:xxxxxxxxxxとなっている箇所はGoogle AnalyticsのViewに対応しています。

また、コードの14行目のあたりでDimensionやらFilterやらSortやらを指定しています。これらはQuery Explorerで確認して決めると便利です。

Google AnalyticsのQuery ExplorerでAPIリクエストをテストする - PIYO - Tech & Life -
読まれてる記事順のリストをブログに付けてみたいという思いつきを実現したいのですが、PV的なものはGoogle Analyticsにしか情報がありません。 またサイトジェネレータの場合はページ生成時にPag

これでコードはOKです。実行時に先ほどのjsonファイルが必要となります。環境変数での指定が必要なので、GOOGLE_APPLICATION_CREDENTIALS=path/to/jsonのような形で実行してあげると、無事Echo経由でGoogle AnalyticsのAPI呼び出しをJSONで取得できるようになりました。