SNSでは書けない長めの話

WEBマーケティング、グロースハック、ときどきツールの使い方紹介

Googleトレンドをスプレッドシートから検索

Googleトレンドで一度にたくさんのキーワードのトレンドを確認したいことがあるのですが、通常5つまでしか同時に検索することができないんです。
そこで今回はスプレッドシートで、検索したいキーワードのトレンドを取得できるような仕組みを作ってみました。

どうやって作るか

スプレッドシートのimportxml()を使ってGoogle トレンドから元のデータを引っ張ってきます。
そのデータからleft(),right(),find()などを使いながらうまいこと処理して、トレンドの数字だけを引っ張ってくることができれば、完成です。

完成系

ちょっと複雑なので先に完成系を貼っておきます。コピーしてご利用ください。
検索数が多い場合はスクレイピングのスピードが下がるので、その場合は時間を空けて試してみてください。

f:id:iwa_k:20170301134702p:plain

作ってみましょう

1.googleトレンドから元データを取得

まずgoogleトレンドの検索結果の元データを取得します。

=importxml("https://www.google.com/trends/fetchComponent?q="&"検索したいキーワード"&"&geo=JP&hl=ja&cid=TIMESERIES_GRAPH_0&export=5")

試しにキーワード"楽天"のトレンドを取得してみました。

Google Trendsvar _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-4401283-1']); _gaq.push(['_setDomainName', 'google.com']); _gaq.push(['_setAllowLinker', true]);_gaq.push(['_setCookiePath', '/trends']);_gaq.push(['_trackPageview', window.location.pathname + window.location.search + window.location.hash]); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); google.load('visualization', '1',{'packages':['corechart']});google.setOnLoadCallback(drawChart); function drawChart() { var chartData = {""columns"":[{""id"":""d"",""label"":""Date"",""type"":""datetime""},{""role"":""annotation"",""type"":""string""},{""p"":{""html"":true},""role"":""annotationText"",""type"":""string""},{""id"":""q0"",""label"":""楽天"",""type"":""number""},{""role"":""annotation"",""type"":""string""},{""p"":{""html"":true},""role"":""annotationText"",""type"":""string""},{""role"":""certainty"",""type"":""boolean""}],""headlineDataPoints"":[],""width"":485,""axisAnnotations"":[{""row"":84,""url"":""//support.google.com/trends/bin/answer.py?hl\u003dja\u0026answer\u003d1383240""}],""rows"":[
[{""v"":new Date(2004, 0, 16, 12, 0),""f"":""2004年1月""},null,null,19,null,null,true],
[{""v"":new Date(2004, 1, 15, 12, 0),""f"":""2004年2月""},null,null,20,null,null,true],
[{""v"":new Date(2004, 2, 16, 12, 0),""f"":""2004年3月""},null,null,19,null,null,true],
[{""v"":new Date(2004, 3, 16, 0, 0),""f"":""2004年4月""},null,null,20,null,null,true],
[{""v"":new Date(2004, 4, 16, 12, 0),""f"":""2004年5月""},null,null,21,null,null,true],
[{""v"":new Date(2004, 5, 16, 0, 0),""f"":""2004年6月""},null,null,20,null,null,true],
[{""v"":new Date(2004, 6, 16, 12, 0),""f"":""2004年7月""},null,null,20,null,null,true],
[{""v"":new Date(2004, 7, 16, 12, 0),""f"":""2004年8月""},null,null,20,null,null,true],
...
[{""v"":new Date(2016, 8, 16, 0, 0),""f"":""2016年9月""},null,null,49,null,null,true],
[{""v"":new Date(2016, 9, 16, 12, 0),""f"":""2016年10月""},null,null,46,null,null,true],[{""v"":new Date(2016, 10, 16, 0, 0),""f"":""2016年11月""},null,null,47,null,null,true],
[{""v"":new Date(2016, 11, 16, 12, 0),""f"":""2016年12月""},null,null,53,null,null,true],
[{""v"":new Date(2017, 0, 16, 12, 0),""f"":""2017年1月""},null,null,48,null,null,true],
[{""v"":new Date(2017, 1, 15, 0, 0),""f"":""2017年2月(集計途中のデータ)""},null,null,46,null,null,true],[{""v"":new 
Date(2017, 2, 16, 12, 
0),""f"":""2017年3月""},null,null,null,null,null,true]],""showHeadlines"":false,""percentData"":false,""colors"":[""#3f85f2""],""height"":230}; 
var htmlChart = new trends.HtmlChart( 'time-chart', chartData.columns, chartData.rows, chartData.headlineDataPoints, null , chartData.showHeadlines,true, chartData.percentData, chartData.colors, chartData.width, chartData.height, chartData.axisAnnotations,true);htmlChart.render(); }  body {margin: 8px}; 

上がトレンドの検索結果となります。
データの概要を簡単に説明すると、2004年からのデータで、100を検索ボリュームの最大値としてトレンド結果を返してくれています。
[{""v"":new Date(2017, 0, 16, 12, 0),""f"":""2017年1月""},null,null,48,null,null,true]
2017年1月のトレンドは48となります。(nullに挟まれている数字)

2.元データから必要なデータを抽出する

取得した元データから必要なデータは、「2017年1月のトレンドは48」というデータのみです。
それらを集めて、下の表のようなものを作っていきます1

キーワード 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
楽天 20 40 60 80 20 40 60 80 20 40 60 80
amazon 50 60 80 70 50 60 80 70 50 60 80 70
メルカリ 10 20 40 90 10 20 40 90 10 20 40 90

元データからfind()してleft()やright()で該当の数字だけを取り除く処理はまた別の機会に書きたいと思います2:。
mid()を使うともっとシンプルにかけるよ。などございましたらコメントください。宜しくお願いします。


  1. 表内の数値は僕が独断と偏見で入力した値ですので、きちんと作成したシートで検索し直してください。

  2. 実は疲れてしまったとういうのはここだけの話です。