GoogleのサービスをNode.jsで操作したいなと思いました。当記事ではNode.jsでGoogle APIをOAuth認証して、APIを使うところまでの手順をまとめてみたいと思います。

develop or drink ?
 develop or drink ? ©

今回はGoogleウェブマスターツールにあるSearch Consoleの検索アナリティクスを、Node.jsから取得する方法を例として話を進めていきます。

目次

今回の大まかな流れ

今回はNode.jsでGoogle APIを操作するために必要な認証や情報を取得していきます。その流れは下記の通りです。

  1. Google Dev Consoleを開く
  2. 認証アプリケーション(プロジェクト)を作成
  3. 認証クライアントIDとシークレットキーを取得
  4. OAuth認証後、リレフッシュトークン取得
  5. トークンを利用してNode.jsでAPI操作(別記事)

それでは詳しく見ていきましょう。

Goolge Developers Consoleを開く

Node.jsでSearch Consoleをコントロールするには、まずクライアントIDとクライアントシークレットを取得していきます。Goolge Developers Consoleを開きましょう。

Google
Google Developers Console

プロジェクトの作成

まずはロゴの右側にあるプロジェクト名を選択後、表示されるボタンでプロジェクトを新規作成します。

Goolge API Managerでプロジェクトを新規作成
Goolge API Managerでプロジェクトを新規作成 ©

作成するプロジェクト名を聞かれますので、今回は一例としてMySearchConsoleと入力し、作成します。

プロジェクト名を入力し、作成
プロジェクト名を入力し、作成 ©

プロジェクトが作成されるまでに数十秒かかります。プロジェクトが作成されたらライブラリメニューから作成したプロジェクトを選択しておきましょう。

作成したプロジェクト名を選択
作成したプロジェクト名を選択 ©

APIのIDとシークレットキーを取得

続いて、操作したいAPIを選択していきます。今回はSearch Console APIを操作しますので、検索欄に「Search Console」と入力してGoogle Search Console APIを選択します。

API名を表示させ、Google Search Console APIを選択
API名を表示させ、Google Search Console APIを選択 ©

APIを有効にするかを聞かれますので、有効にします。

Google Search Console APIを有効にする
Google Search Console APIを有効にする ©

認証情報を作成します。

Google Search Console APIの認証情報を作成
Google Search Console APIの認証情報を作成 ©

「プロジェクトへ認証情報の追加」という画面が表示されますので、使用するAPIやAPIを呼び出す場所を指定します。

プロジェクトへ認証情報の追加
プロジェクトへ認証情報の追加 ©

今回はコマンドライン(ターミナル)からAPIを呼び出しますので、下記のような項目に設定します。

選択項目 内容
仕様するAPI Google Search Console API
APIを呼び出す場所 その他のUI(Windows、CLIツールなど)

選択後、上記画像のように必要な認証情報を選択して、次の項目に進みます。

続いて、下記画面のようにクライアントIDの作成を選択します。

クライアントIDの作成
クライアントIDの作成 ©

次の項目で、認証時に表示させるサービス名を入力していきます。今回は一例としてmySearchConsoleと入力します。入力後次へを選択します。

サービス名の入力
サービス名の入力 ©

プロジェクトの認証情報を作る設定が以上で完了しました。最後に完了を選択します。

認証情報が作成された
認証情報が作成された ©

APIマネージャートップに移動しますので、最後に、先程作成したクライアントIDを選択します。

クライアントIDの選択
クライアントIDの選択 ©

クライアントIDを選択すると、クライアントIDクライアント シークレットが表示されますので、これをメモします。

クライアントIDとシークレットをメモする
クライアントIDとシークレットをメモする ©

リフレッシュトークンを取得する

前回までの手順で、Google APIのクライアントIDとクライアントシークレットを取得していきました。最後に、Node.jsでリフレッシュトークンを取得していきます。

Node.jsとコマンドラインについては下記をご覧ください。

任意のディレクトリでNode.jsのコードを書いていきますので、必要なファイルを作成していきます。

bash
1
2
3
4
5
$ mkdir your-dir
$ cd your-dir
$ npm init
$ npm install googleapis readline --save
$ vim get_token.js

続いて、get_token.jsを下記のように記述していきます。

get_token.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
"use strict";

// 下記コードはnode v4.3以上で動作します。
const CLIENT_ID = 'あなたのクライアントIDを入力'
const CLIENT_SECRET = 'あなたのクライアントシークレットを入力'

const google = require('googleapis')
const readline = require('readline')
const rl = readline.createInterface({
input : process.stdin,
output: process.stdout
});
const REDIRECT_URL = 'urn:ietf:wg:oauth:2.0:oob'
const SCOPE = ['https://www.googleapis.com/auth/webmasters'] // APIで操作するスコープを配列形式で指定する。今回はWebマスターツールを操作するので、https://www.googleapis.com/auth/webmastersと指定。詳しくは後述
const oauth2Client = new google.auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL)
let getAccessToken = (oauth2Client) => {
// OAuth2認証のためのURLを生成する
let url = oauth2Client.generateAuthUrl({
access_type: 'offline', // refresh_tokenが必要なので、offlineを指定
scope : SCOPE
});

console.log('右記のURLをブラウザで開いてください: ', url)
rl.question('表示されたコードを貼り付けてください: ', (code) => {
oauth2Client.getToken( code, (err, tokens) => {
console.log('トークンが発行されました')
console.log(tokens)
console.log('上記の情報を大切に保管してください')
});
});
}

getAccessToken(oauth2Client)

SCOPEで指定しているAPIスコープについては、操作したいGoogleのアプリケーションによって異なりますが、下記が参考になります。

Google Identity Platform
OAuth 2.0 Scopes for Google APIs
Google APIのスコープ一覧です。Google DriveやAnaytics APIなどもあります。

上記のコードが記述できたら、node.jsを実行します。

bash
1
$ node get_token.js

実行すると次のようなURLが表示されますので、指示通りブラグザで開きます。

bash
1
2
3
$ node get_token.js
右記のURLをブラウザで開いてください: https://accounts.google.com/o/oauth2/auth?access_type=offline&scope=****
表示されたコードを貼り付けてください:

ブラウザでURLを開くと、次のような画面が表示され、認証許可を求められますので許可をします。

Googleアカウントでログイン後、認証の許可
Googleアカウントでログイン後、認証の許可 ©

認証の許可後、コードが表示されますのでコピーします。

コードが表示される
コードが表示される ©

最後に表示されたコードをコマンドラインに入力します。

bash
1
2
3
$ node get_token.js
右記のURLをブラウザで開いてください: https://accounts.google.com/o/oauth2/auth?access_type=offline&scope=****
表示されたコードを貼り付けてください: <ここでコードを貼り付ける>

コードを貼り付けると、アクセストークンとリフレッシュトークンが取得できます。refresh_tokenの内容をメモしておきましょう。

bash
1
2
3
4
5
6
7
8
9
10
$ node get_token.js
右記のURLをブラウザで開いてください: https://accounts.google.com/o/oauth2/auth?access_type=offline&scope=****
表示されたコードを貼り付けてください: <ここでコードを貼り付ける>

トークンが発行されました
{ access_token: '****',
refresh_token: '****',
token_type: '****',
expiry_date: 150***** }
上記の情報を大切に保管してください

以上の手順で、リフレッシュトークンが取得できました。次回はリフレッシュトークンを使って、node.jsで実際にAPIを操作していきたいと思います。

参考にさせて頂いた記事

下記の記事を参考にさせて頂きました。ありがとうございます。

Qiita
Google Drive Web APIを使う(node編)
Goolge Drive Web APIで画像をアップロードする例を扱った解説。アクセストークンを取得する方法やスコープを解説している。

前述しましたが、Google APIのOAuth2.0スコープの一覧です。

Google Identity Platform
OAuth 2.0 Scopes for Google APIs
Google APIのスコープ一覧です。Google DriveやAnaytics APIなどもあります。