表題にある通り、

Go言語でGoogle Search Consoleの値を取得してみる。


search_console_ln

https://search.google.com/search-console/about


Google Search Consoleというのは、

運営しているサイトがどのような検索ワードで訪問してくるか?

を調べることが出来るWebサービス。


早速、Search Consoleの値をGo言語で取得する為の手続きを見てみる。


search_console_search

https://console.cloud.google.com/apis/library


Google API Console - Google Cloud Consoleを開き、

トップページのAPIとサービスを検索で、Search Consoleと入力する。


search_console_detail


Google Search Console APIをクリックし、


search_console_active


APIを有効にする。

有効後に管理をクリックし、


search_console_create


認証情報を作成をクリックする。


search_console_create1


認証情報の画面で

使用するAPIをGoogle Search Console API

APIを呼び出す場所をその他のUI (Windows, CLIツールなど)

アクセスするデータの種類をアプリケーションデータ

にして必要な認証情報をクリックする。


search_console_create2


次の画面で再び認証情報を作成をクリックし、

サービスアカウントキーをクリックする。


search_console_create3


サービスアカウントで管理したいサイトを作成して、

キーのタイプをJSONにして作成をクリックする。


次の画面で生成されたjsonファイルをダウンロードして、

ファイル名をsecret.jsonにリネームしておく。




続いて、

Google Search Consoleの方の設定を行う。

先程作成したsecret.jsonを開き、client_emailの値をコピーしておく。


search_console_ln

https://search.google.com/search-console/about


Google Search Consoleを開き、

サービスの画面で設定を開く。


search_console_add_user


ユーザを追加の画面で、

先程コピーしたメールアドレスを貼り付け、

権限をフルにして作成する。


これでSearch Console APIの設定は終了。




Go言語でSearch Console APIを使用する為のコードに話を移す。


はじめにAPIの使用に必要なライブラリを取得しておく。

$ go get golang.org/x/oauth2
$ go get golang.org/x/oauth2/google
$ go get google.golang.org/api/webmasters/v3

https://godoc.org/google.golang.org/api/webmasters/v3


今回は/home/saito/workspace/consoleでGoのコードを作成することにする。

consoleディレクトリに先程取得したsecret.jsonを配置する。


consoleディレクトリは下記の通り

console
├── main.go
└── secret.json

main.goで書いたコードは下記の通り。

package main

import (
	"fmt"
	"log"
	"time"

	"golang.org/x/oauth2"
	"golang.org/x/oauth2/google"
	webmasters "google.golang.org/api/webmasters/v3"
)

func main() {
	//認証資格情報を取得するHTTPクライアントを返す
	client, err := google.DefaultClient(
		oauth2.NoContext,
		"https://www.googleapis.com/auth/webmasters.readonly")
	if err != nil {
		log.Fatal(err)
	}

	// データ取得用の構造体の値を取得
	service, err := webmasters.New(client)
	if err != nil {
		log.Fatal(err)
	}

	analyticsService := webmasters.NewSearchanalyticsService(service)

	yesterday := time.Now().AddDate(0, 0, -1)
	oneWeekBefore := yesterday.AddDate(0, 0, -7)
	format := "2006-01-02"

	//8日前から1日前までのデータを取得する RowLimitは取得する件数
	req := &webmasters.SearchAnalyticsQueryRequest{
		StartDate:  oneWeekBefore.Format(format),
		EndDate:    yesterday.Format(format),
		Dimensions: []string{"query"},
		RowLimit:   10,
	}

	//saitodev.coの値を取得する
	resp, err := analyticsService.Query("https://saitodev.co", req).Do()
	if err != nil {
		log.Fatal(err)
	}

	//結果を一行ずつ取得する
	for _, row := range resp.Rows {
		fmt.Println(row)
	}
}

端末を開き、下記のコマンドで実行する。

$ cd ~/workspace/console
$ GOOGLE_APPLICATION_CREDENTIALS=secret.json go run main.go

実行結果は下記の通り。

&{61 0.12734864300626306 479 [鶏糞] 2.0250521920668056 [] []}
&{31 0.62 50 [ジスルフィド結合 切断] 1.04 [] []}
&{28 0.1339712918660287 209 [牛糞堆肥] 2.1291866028708135 [] []}
&{25 0.9259259259259259 27 [植物のミカタ] 1 [] []}
&{21 0.27631578947368424 76 [廃菌床] 1.1052631578947367 [] []}
&{20 0.02047082906857728 977 [解糖系] 9.795291709314228 [] []}
&{17 0.6071428571428571 28 [ubuntu android エミュレータ] 1 [] []}
&{17 0.4473684210526316 38 [コーンコブ] 1 [] []}
&{16 0.1391304347826087 115 [シリカゲル 水] 3.217391304347826 [] []}
&{16 0.13008130081300814 123 [スランプ構造] 2.91869918699187 [] []}