クイックノート

ちょっとした発見・アイデアから知識の発掘を

【R】R で Google API を使う超入門

Google Search Console や、Google Analytics を使って、
サイトのアクセス情報を見ることができますが、
これを分析しようと思うと、プログラムに直接データとして渡せた方がいいですよね。

ということで、RからGoogle Seach Console や Google Analytics のデータを直接取得しましょう。

使うのは、Google が提供している API です。

API の設定さえ終わってしまえば、
R からデータを取得する方法についてはパッケージが提供してくれます。

とはいえ、初めて Goole API を利用すると、
戸惑うこともあると思うので、その当たりからまとめておきます。

事前準備:Google API の設定

まずは、この API を使いますよという宣言を Google さんにしたり、
API を使う時の認証情報を取得する必要があります。

全てオンラインで出来るので、焦らず順番通りにやっていきましょう。

プロジェクトを作成する

Google は「プロジェクト」と呼ばれる単位で、
API の管理を行います。

このプロジェクトに対してはこの API を使うけど、
別のプロジェクトでは、別の API を使うなど、
分けて扱うことができます。

別に使い分けるつもりないんだけど、という人も、
とりあえず、プロジェクトを作らないことには始まりません。

ということで、下の手順に沿って、プロジェクトを作りましょう。

  1. Google Cloud Platformにアクセスする
  2. 「プロジェクトの作成」をクリック
  3. 「作成」をクリック
  4. 「プロジェクト名」を適当につけて、「作成」をクリック

これで、プロジェクトの作成が始まり、
しばらく時間が経つと、プロジェクトが作成され、
プロジェクトのページに移動します。

使いたい API を有効にする

プロジェクトを作成すると、
そこで使いたい API を選ぶことができます。

プロジェクトのページからいつでも API を有効に切り替えることができますが、
有効にしておかないと、当然使えないので、使うものは全て有効にしておきましょう。

ここでは、「Google Search Console」を例に API を有効にする手順を見てみましょう。

  1. 上で作成したプロジェクトのページの左側のメニューから「ライブラリ」を選択
  2. 検索ウィンドウで「google search console API」を検索し、表示されたAPIを選択 f:id:u874072e:20180614174400p:plain 3.「有効にする」をクリック

これでしばらく待つと、APIが有効になります。

初めて、APIを有効にすると、
そのまま、次の認証情報の作成に移ります。

認証情報を作成する

API を使うと、プログラムからGoogleにアクセスすることになります。
誰が作ったプログラムでもアクセスできるとなると良くないので、
有効にしたAPIを使えるプログラムを認証する必要があります。

そのために、IDとパスワードのような認証情報を作るというのがここで行う操作になります。
この認証情報はプロジェクトに対する認証情報となり、
この認証をクリアすると、
プロジェクトで有効となっている全ての API にアクセスすることができるようになります。

認証情報の作成は次の手順で行います。

  1. 上の続きで認証情報の画面から「認証情報の作成」をクリック
    f:id:u874072e:20180614175644p:plain
  2. APIを呼び出す場所」で「その他のUI」を選択
  3. 「アクセスするデータの種類」で「ユーザーデータ」を選択
  4. 「必要な認証情報」をクリック
  5. 「OAuthクライアントID」を適当に入力
  6. 「ユーザーに表示するサービス名」を適当に入力
  7. 「ダウンロード」をクリックして認証情報をダウンロード

これで、R でアクセスするために必要な認証情報が、
「client_id.json」というファイルに保存されます。

ファイルの中には、IDとパスワード(client_secret)が含まれていて、
これらを使って API の接続を行います。

R で Google Search Console のデータを取得する

ここまでで準備が整ったので、
R から API を通じて Google Search Console のデータを取得してみましょう。

パッケージのインストール

まずは、R で Google API を使うためのパッケージをインストールします。

install.packages("googleAuthR")
install.packages("searchConsoleR")

googleAuthR は R から Google の認証を行うためのパッケージで、
searchConsoleRGoogle Search Console からデータを取得するためのパッケージです。

初めに Google の認証

API からデータを取得するまえに、
データを取得する資格があることを認証で確認してもらいます。

次のコードを実行すると、ブラウザを経由してユーザー認証を行います。

gar_set_client(json = "client_id.json", 
               scopes = "https://www.googleapis.com/auth/webmasters")
gar_auth()

gar_set_client では、
先ほどダウンロードした認証情報の書かれたファイルclient_id.jsonを読み込みます。
また、どの API を使うのかをを scopes で指定しています。
今の場合、Google Search Console ですが、これは Google Webmasters の一部なので、
Google Webmasters を scopes に設定しています。

そして、gar_auth() でブラウザ経由での認証を実行します。
ユーザーに紐づいたデータを取得するため、
ここで、ユーザーの認証と、データ取得の許可を行います。

Google Search Console のクエリデータを取得

認証が完了すると、API を使ってデータを取得することができます。

Google Search Console の検索クエリについてのデータを取得するには、
次のコードを実行します。

site_list = list_websites()
df = search_analytics(siteURL=site_list[1,1],
                      startDate=Sys.Date() - 120,
                      endDate=Sys.Date()-3,
                      dimensions=c("query"))

list_websites()Google Search Console に登録しているサイトの一覧を取得しています。

そして、search_analytics で実際にデータの取得を行っています。

Google Search Console では複数のサイトを登録することができるので、
どのサイトのデータが欲しいのかをsiteURLで指定しています。
今の場合は、取得したサイトの一覧から一番上にきたサイトを指定しています。

次に、startDate, endDate はデータを取得する機関を指しています。
この例では、今日の日付Sys.Date()から120日前から初めて、3日前までのデータを取得しています。
Google Search Console で取得できるのは最新でも3日前のデータとなるので、注意しておきましょう。

dimensions は、どの単位でデータを取得するかを表していて、
ここでは検索クエリ毎のアクセス数などのデータが欲しいので、queryを指定しています。
他にも、ページ毎のデータが欲しい場合は、pageであったり、
ページとクエリの組み合わせで欲しい場合は、c("query","page") などとすることで、
データの単位を柔軟に変更することができます。

とりあえずプロット

せっかく、データを取得したので、とりあえずプロットしてみましょう。

取得されたデータはデータフレーム形式になっていて、
各列が クエリ、クリック数、表示回数、クリック率、順位 となっています。

クリック数を横軸に、表示回数を縦軸にプロットしてみましょう。

plot(df[,2],df[,3],log="xy", xlab="click",ylab="impression")
for(i in 1:5){
  text(df[i,2],df[i,3]*1.2,df[i,1],cex = 1,col=i)
}

f:id:u874072e:20180615110003p:plain

ついでに、クリック数上位5位までのクエリも表示しています。

漫画ビレッジの検索が多いのが分かりますね。
また、当然ですが、クリック率と表示回数には正の相関も見えますね。

ワードクラウド

もっとクエリを中心にプロットしたいので、
ワードクラウドでプロットしてみます。

library(tagcloud)
N = 30
tagcloud(df[1:N,1],weights = log(df[1:N,2]),col=smoothPalette(log(df[1:N,2])))

f:id:u874072e:20180615115609p:plain:w400

アクセス数に応じて色の濃さと文字の大きさを変えて表示してみました。

これで、大体どういう検索でこのサイトにたどり着いてきたが視覚的に分かりやすくなりました。

プライバシーポリシー