node.jsでGoogleトレンドを取得する



node.jsで Googleトレンドの情報を取得する方法の紹介です。

SEOを意識した記事を書く時や 何かのマーケティングをする時など、Googleトレンドから ' よく検索されるキーワード ' の情報をチェックすることも、トレンド情報(需要)を知る方法の1つです。

Goolgeの急上昇ワードは ' Googleトレンド ' のページから容易に検索する事が出来ますが、細かい検索指定や 検索結果を保存する 用途となると使い勝手が違ってきます。

そんなGoogleトレンドの情報を「google-trends-api 」という node.js用のライブラリを使えばJSON形式で 簡単に取得できます。


google-trends-api で出来ること 

- APIを実行するだけで、調べたいのキーワードのGoogle内での検索ボリュームが簡単にJSON形式で取得できます

* google-trends-api を使って キーワード '  東京 ' でよく検索されるクエリを検索 

// 返ってきた結果
[ { query: '東京 グール',
    value: 146050,
    formattedValue: '急激増加',
    link:
     '/trends/explore?q=%E6%9D%B1%E4%BA%AC+%E3%82%B0%E3%83%BC%E3%83%AB&date=2004-01-1+2018-11-8&geo=JP' },
  { query: '東京 スカイ ツリー',
    value: 52750,
    formattedValue: '急激増加',
    link:
     '/trends/explore?q=%E6%9D%B1%E4%BA%AC+%E3%82%B9%E3%82%AB%E3%82%A4+%E3%83%84%E3%83%AA%E3%83%BC&date=2004-01-1+2018-11-8&geo=JP' },
  { query: '東京 グール ネタバレ',
    value: 27200,
    formattedValue: '急激増加',
    link:
     '/trends/explore?q=%E6%9D%B1%E4%BA%AC+%E3%82%B0%E3%83%BC%E3%83%AB+%E3%83%8D%E3%82%BF%E3%83%90%E3%83%AC&date=2004-01-1+2018-11-8&geo=JP' },
  { query: '食べ ログ 東京',
    value: 27050,
    formattedValue: '急激増加',
    link:
     '/trends/explore?q=%E9%A3%9F%E3%81%B9+%E3%83%AD%E3%82%B0+%E6%9D%B1%E4%BA%AC&date=2004-01-1+2018-11-8&geo=JP' },
// goes on ...
]


google-trends-api のインストール

google-trends-api は node.js 用のパッケージなので、' npm ' 又は ' yarn ' コマンドを使って導入します。

# google-trends-api のインストール
npm i google-trends-api


google-trends-api の基本的な構文 

google-trends-api は api メソッド内に検索するオプションを入れ、Promiseで処理を記述します。'then' メソッドにはGoogleトレンドのデータ取得が成功した時の処理、'catch'メソッド内には取得が失敗した時の処理を書きます。

// ライブラリの読み込み
const googleTrends = require('google-trends-api');

// 検索に用いるパラメーター
const param = { keyword : '検索するキーワード',
                  geo : '検索する地域',
                  hl: "言語",
                 };
// google-trends-apiを実行
googleTrends.apiメソッド名(param)
            .then( result => { /* 成功した時の処理 */ } )
            .catch( err => { /* 失敗した時の処理 */ })

 

よく使用しそうなパラメーター 

パラメーターは 上記メソッド内で指定するオブジェクトです。パラメーターを指定することで、検索する期間やタイプを指定することができます。

- keyword
"keyword" オプションには検索したい文字列がはいります。

- startTime
"startTime" には 検索する期間の開始日が (new Date()) オブジェクトで入ります。このオプションが無いと "2004年1月1日" にセットされます。

- endTime
"endTime" には 検索する期間の終了日が (new Date()) オブジェクトで入ります。このオプションが無いと "現在の日付" にセットされます。

- hl
"hl" には 検索する言語が入ります。このオプションが無いと "英語" にセットされます。 
* 日本語を指定する場合 ->  hl : "ja"  * 言語コードのリスト

- geo
"geo" は 検索する地域をしてするオプションです。”アメリカ”などの国全体、「東京、大阪」などの細かい地域も指定することが可能です。
* 日本国内の地域のリスト


- category
"category" には 検索するカテゴリのタイプが 整数型で入ります。このオプションが指定されていないと、全てのカテゴリが適応されます。
* Categoryタイプのリンク

- property
"property" オプションには検索するタイプを文字列で指定できます。現時点ではデフォルトの他に下記の4タイプが用意されています。何も指定がないと Google内の検索トレンドが指定されます。
  - youtube
  - image
  - news
  - froogle * googleショッピング-

上記のようなパラメーターを組み合わせると検索するタイプを細かく指定することができます。例えば、下のスニペット、キーワードが 'ポケモン GO', '日本', '日本語', '2015年1月 ~ 2018年10月' ,克つ ' Youtube ' 内の検索トレンドを指定になります。

const obj = {
  keyword: 'ポケモン GO', // キーワード
  startTime: new Date('2015-01-01'), // 開始日
  endTime : new Date('2018-10-01'), // 終了日
  geo: "JP", // 場所は日本
  // geo: "JP-13", // 東京を指定する場合
  hl: "ja", // 言語は日本語で
  property : "youtube" // YouTubeを指定
};

 

google-trends-apiに用意されているメソッド

- relatedTopics

"relatedTopics"メソッドは、"検索するキーワードに関連したトピック(話題)"を返します。

返ってくる結果は2種類あり、"relatedKeyword[0]"は検索ボリュームを100とした結果、"relatedKeyword[1]"は検索の増加率で返します。

const googleTrends = require("google-trends-api");

const _keyword = "ポケモン go"; // 'ポケモン GO 'で検索

const obj = {
  keyword: _keyword,
  startTime: new Date('2015-01-01'), 
  endTime : new Date('2018-10-01'),
  geo: "JP",
  hl: "ja"
};

// トピックを取得
googleTrends
  .relatedTopics(obj)
  .then(results => {
    let json = JSON.parse(results); // jsonデータをオブジェクトに変換
    console.log(json.default.rankedList[0]);
    console.log(json.default.rankedList[1]);
  })
  .catch(err => {
    console.error("エラーが起きた時の処理");
  });

/** 返ってくるデータ例

  // object 0 
    { topic: 
     {
        mid : "/g/11bw4tm1l9",
              'title' : "Pokemon GO",
              'type' : "スマートフォン向けゲームアプリ",
     },
      value: 100,
      formattedValue: '100',
      hasData: true,
      link:
       '/trends/explore?q=/g/11bw4tm1l9&date=2015-01-1+2018-10-10&geo=JP' },

// .... 

// object 1
 { topic: 
      {
         mid : "/m/02g387",
         title : "卵" ,
         type : "トピック"
            },
       value: 204400,
       formattedValue: '急激増加',
       link:
        '/trends/explore?q=/m/02g387&date=2015-01-1+2018-10-10&geo=JP' },

/// .... 
*/


- relatedQueries

"relatedQueries" は'検索ワードと一緒に検索されるキーワード'を取得するするメソッドです。下記は "ポケモン go" で検索していますが、よく一緒に検索されるワードは 'イベント'や'個体 値' だということがわかります。

const googleTrends = require("google-trends-api");

const _keyword = "ポケモン go"; // 'ポケモン GO 'で検索

const obj = {
  keyword: _keyword,
  startTime: new Date('2015-01-01'), 
  endTime : new Date('2018-10-01'),
  geo: "JP",
  hl: "ja"
};

googleTrends
  .relatedQueries(obj)
  .then((results) => {
    let json = JSON.parse(results);

    console.log(json.default.rankedList[0].rankedKeyword);
  })
  .catch((err) => {
    console.error("エラーが起きた時の処理");
  });

/* 返ってきた結果
// query 0

[
 { query: 'ポケモン go イベント',
    value: 100,
    formattedValue: '100',
    hasData: true,
    link:
     '/trends/explore?q=%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3+go+%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88&date=2017-01-1+2018-10-1&geo=JP' },
  { query: '個体 値 ポケモン go',
    value: 86,
    formattedValue: '86',
    hasData: true,
    link:
     '/trends/explore?q=%E5%80%8B%E4%BD%93+%E5%80%A4+%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3+go&date=2017-01-1+2018-10-1&geo=JP' },
  { query: 'ポケモン go レイド',
    value: 82,
    formattedValue: '82',
    hasData: true,
    link:
     '/trends/explore?q=%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3+go+%E3%83%AC%E3%82%A4%E3%83%89&date=2017-01-1+2018-10-1&geo=JP' },
/// ...
]

*/


- interestOverTime

"interestOverTime" メソッドは 対象となるキーワードが " どの時期に一番検索されたか " 調べるメソッドです。

const googleTrends = require("google-trends-api");

const _keyword = "ポケモン go"; // 'ポケモン GO 'で検索

const obj = {
  keyword: _keyword,
  geo: "JP",
  hl: "ja"
};

// interestOverTime
googleTrends
  .interestOverTime(obj)
  .then((results) => {
    let json = JSON.parse(results);
    console.log(json.default.timelineData);
    // dump(json);
  })
  .catch((err) => {
    console.error("エラーが起きた時の処理");
  });

/** 返ってきた結果
[ { time: '1483228800',
    formattedTime: '2017年 1月1日 - 1月7日',
    formattedAxisTime: '2017/01/01',
    value: [ 51 ],
    hasData: [ true ],
    formattedValue: [ '51' ] },  { time: '1483833600',
    formattedTime: '2017年 1月8日 - 1月14日',
    formattedAxisTime: '2017/01/08',
    value: [ 38 ],
    hasData: [ true ],
    formattedValue: [ '38' ] },
  { time: '1484438400',    formattedTime: '2017年 1月15日 - 1月21日',
    formattedAxisTime: '2017/01/15',
    value: [ 33 ],
    hasData: [ true ],
    formattedValue: [ '33' ] },
*/


- interestByRegion

"interestByRegion" メソッドは、対象となるキーワードが、 "どの地域で、どのぐらい検索されたか" 検索ボリュームを返してくれるメソッドです。

下のスニペットは日本で指定しているので、日本国内の都道府県で結果を返します。

const googleTrends = require("google-trends-api");

const _keyword = "ポケモン go"; // 'ポケモン GO 'で検索

const obj = {
  keyword: _keyword,
  startTime: new Date('2015-01-01'), 
  endTime : new Date('2018-10-01'),
  geo: "JP",
  hl: "ja"
};

// interestByRegion
googleTrends
  .interestByRegion(obj)
  .then(results => {
    let json = JSON.parse(results);
    console.log(json.default.geoMapData);
  })
  .catch(err => {
    console.error("エラーが起きた時の処理");
  });

/** 返ってきた結果
[ { geoCode: 'JP-19',
    geoName: '山梨県',
    value: [ 100 ],
    formattedValue: [ '100' ],
    maxValueIndex: 0,
    hasData: [ true ] },
  { geoCode: 'JP-24',
    geoName: '三重県',
    value: [ 99 ],
    formattedValue: [ '99' ],
    maxValueIndex: 0,
    hasData: [ true ] },
  { geoCode: 'JP-09',
    geoName: '栃木県',
    value: [ 99 ],
    formattedValue: [ '99' ],
    maxValueIndex: 0,
    hasData: [ true ] },
....
*/


取得したトレンドデータをCSVに変換する

google-trends-apiはJSON形式で取得データを返してくれるので、オブジェクトを加工したり CSV形式に変換することも容易です。

下のスニペットは "relatedQueries"メソッドを使って、キーワードと一緒に検索されるワードを取得、必要なデータのみをCSVファイルに書き込んでいます。
* 外部ライブラリに"ramda.js"と"json2csv"を使用しています

// 依存パッケージのインストール : npm i ramda json2csv
const googleTrends = require("google-trends-api");
const R = require("ramda");
const json2csv = require("json2csv").parse;

const _keyword = "ポケモン GO";

const obj = {
  keyword: _keyword,
  startTime: new Date("2017-01-01"),
  endTime: new Date("2018-10-01"),
  geo: "JP",
  hl: "ja"
};

// 関連するクエリを取得
googleTrends
  .relatedQueries(obj)
  .then(results => {
    const json = JSON.parse(results); // jsonデータをオブジェクトに変換

    // 必要なデータだけ取り出し
    let data = R.map(
      val => R.pick(["query", "value"], val),
      json.default.rankedList[0].rankedKeyword
    );

    // 加工したデータを CSVフォーマットに変換
    let csv = json2csv(data);

    // CSVのデータをファイルに書き込み
    fs.writeFile("result.csv", json2csv(data), "utf-8", err => {
      if (err) throw err;
      console.log("The file has been saved!");
    });
  })
  .catch(err => {
    console.error(err);
  });

 

geoコード

下記のリストはパラメーターのオブジェクト、 'geo'オプション内で使用可能な日本国内の地域です。

地域 geoコード
日本全国 JP
北海道 JP-01
青森県 JP-02
岩手県 JP-03
宮城県 JP-04
秋田県 JP-05
山形県 JP-06
福島県 JP-07
茨城県 JP-08
栃木県 JP-09
群馬県 JP-10
埼玉県 JP-11
千葉県 JP-12
東京都 JP-13
神奈川県 JP-14
新潟県 JP-15
富山県 JP-16
石川県 JP-17
福島県 JP-18
山梨県 JP-19
長野県 JP-20
岐阜県 JP-21
静岡県 JP-22
愛知県 JP-23
三重県 JP-24
滋賀県 JP-25
京都府 JP-26
大阪府 JP-27
兵庫県 JP-28
奈良県 JP-29
和歌山県 JP-30
鳥取県 JP-31
島根県 JP-32
岡山県 JP-33
広島県 JP-34
山口県 JP-35
徳島県 JP-36
香川県 JP-37
愛媛県 JP-38
高知県 JP-39
福岡県 JP-40
佐賀県 JP-41
長崎県 JP-42
熊本県 JP-43
大分県 JP-44
長崎県 JP-45
鹿児島県 JP-46
沖縄県 JP-47


Summary

以上が 'google-trends-api' を使って、node.jsでGoogleトレンドの情報を取得する方法の紹介でした。

検索ボリュームや国を含む地域別のキーワードが簡単に取得できるので、検索ボリュームをグラフ化して管理システムに組み込んだり、cronタブと組み合わせて自動取得する機能を作ったりなど、色々な場面で使えそうです。

* 自身の環境で 'google-trends-api' を使って個人的にCLIツールを作ってみました

GitHub : pat310 / google-trends-api

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ