"Diary" インターネットさんへの恩返し

いつもソースコードコピペばかりなので,みなさまへ少しばかりの恩返しを

Excelでjsonデータの取得方法(手作りGoogle AnalyticsのExcel連携)



スポンサーリンク

http://blog.goo.ne.jp/xmldtp/e/c7e3c3631d31206f818b30276d0f3091

上記を参考にしたら出来ました。感謝!

Google analyticsでデータを、Excelで取得したかったのですが、プラグインとかいろいろ入れないとだめだったのでnode.js挟む形にしました。

こんな感じ。

f:id:azumami:20150402171847p:plain

これでレポートもらくらく作成。

Node.js側

packageはga-analyticsを使っていますので、前処理として、こちらの"ga-analytics"の箇所を実施します。
app.js

app.get('/ga/get/:path?/:day_start?/:day_end?', routes.get);

index.js

exports.get = function(req, res){

var path = req.params.path;
var day_start = req.params.day_start;
var day_end = req.params.day_end;


console.log(path + " " + day_start + " " + day_end)

// "_"を"/"のかわりに使っているので"/"に置換
path = path.replace(/_/g, "/");

var gaAnalytics = require("ga-analytics");
var CLIENT_ID = 'xxxxxxx.apps.googleusercontent.com';
var SERVICE_ACCOUNT_EMAIL = 'xxxxxxxxx@developer.gserviceaccount.com';
var SERVICE_ACCOUNT_KEY_FILE = 'key.pem';
gaAnalytics({
        startDate: day_start,
        endDate:   day_end,
        'dimensions' : "ga:source,ga:userType,ga:date,ga:PagePath",
        'metrics': "ga:sessions,ga:users",
        'filter':"ga:pagePath==" + path,
        'clientId': CLIENT_ID,
        'serviceEmail': SERVICE_ACCOUNT_EMAIL,
        'key': SERVICE_ACCOUNT_KEY_FILE,
        'ids': "ga:xxxxxxxxxx"
}, function(err, data) {
        if(err){
                console.log(err);
        }else{
                console.log(data);
                res.send(data);
        }
});

google analyticsのパラメータなどはこちらで色々サンプルが見れます。

Excel

vba

Private Sub CommandButton1_Click()

Dim objSC      As Object 'Script Control
Dim strFunc As String '関数文字列
Dim strJSON As String 'JSONデータ(文字列)
Dim objJSON As Object 'JSONファイルをパースしたもの
    
Set objSC = CreateObject("ScriptControl")
objSC.Language = "JScript"
strFunc = "function jsonParse(s) { return eval('(' + s + ')'); }"
objSC.AddCode strFunc
    
On Error Resume Next
  
ReqPath = "http://<node.jsのホスト>:<ポート>/ga/get/_<path>_<path>/<YYYY-MM-DD>/<YYYY-MM-DD>"
        
Set objShell = CreateObject("WScript.Shell")
Set objXmlHttp = CreateObject("MSXML2.XmlHttp")
        
objXmlHttp.Open "GET", ReqPath, False
objXmlHttp.Send

'6行下の部分でrowsだとExcel上でのエディタだと勝手にRowsになってしまうのでdatasに置換        
strJSON = Replace(objXmlHttp.ResponseText, "rows", "datas")
Set objJSON = objSC.CodeObject.jsonParse(strJSON)
        
recno = 1
 
For Each rec In objJSON.datas
     Dim tmp As Variant
     tmp = Split(rec, ",")
     cellno = 1
     For Each dat In tmp
          Cells(recno, cellno) = dat
          cellno = cellno + 1
     Next
     recno = recno + 1
Next

Set objXmlHttp = Nothing
    
End Sub

これでデータは取ってこれるので、あとはレポート等をさくさくっと。