SpookyJSでadwordsとスポンサードサーチとYDNのレポートをダウンロード

GoogleもYahooも広告配信レポートを現在APIでダウンロードすることができません。Google AdwordsではAPIで簡易的にレポートを作成できますが、インプレッションシェアなどの指標を指定することが出来ず、中途半端です。

メールで作られたよと報告はされるのですが、どうせなら送ってほしいものですよね。

というわけで全部ダウンロードするスクリプトを書いたのですが、私のMac Book Airちゃんがぶっ壊れてタイムマシーンで2週間前に戻ってしまい、危機感を覚えたのでここにメモしておきます。作業途中的な感じですが、わたくしの記憶力が普通の人間と同じぐらいであれば1週間後には出来上がっていると思います。

ダウンロードスクリプト

"use strict";
// user settings
var G_ID = "google_id",
G_PASS = "google_pass",
Y_ID = "y_id",
Y_PASS = "y_pass";
// wait setting
var waitTime = 5000;
// UA setting
var UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36";
// URL settings
var Y_URL = "https://login.bizmanager.yahoo.co.jp/login?url=https://promotionalads.business.yahoo.co.jp";
try {
var Spooky = require('spooky');
} catch (e) {
var Spooky = require('../lib/spooky');
}
if (process.argv.length < 3) {
console.log('missing argument.');
return;
}else{
var argValue = process.argv;
console.log(argValue);
}
var spooky = new Spooky({
child: {
transport: 'http'
},
casper: {
logLevel: 'debug',
verbose: true
}
},
function (err) {
if (err) {
e = new Error('Failed to initialize SpookyJS');
e.details = err;
throw e;
}
spooky.userAgent(UA);
spooky.start(Y_URL);
spooky.then(function () {
this.evaluate(function(id,password) {
document.getElementById('user_name').value = id;
document.getElementById('password').value = password;
document.login_form.submit();
}, "y_id","y_pass");
});
spooky.wait(waitTime, function() {
this.click('a[sl="header_SS"]');
});
spooky.wait(waitTime, function() {
this.click('a[sl="header_SSReports"]');
});
spooky.wait(waitTime, function() {
var response = this.evaluate(function () {
var url = document.querySelector('tr[sl="ReportsReport_row_0"] a[sl=ReportsReport_download_]').href;
var title = document.getElementById('yjJtReportBody').getElementsByTagName('tr')[0].getElementsByTagName('td')[0].textContent;
var xhr = new XMLHttpRequest(),
dataString = "",
dataList = [];
method = "GET";
var contentType = "application/x-www-form-urlencoded";
xhr.open(method, url, false);
xhr.overrideMimeType("text/plain; charset=shift_jis");
if (method === "POST") {
if (typeof data === "object") {
for (var k in data) {
dataList.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k].toString()));
}
dataString = dataList.join('&');
this.log("sendAJAX(): Using request data: '" + dataString + "'", "debug");
} else if (typeof data === "string") {
dataString = data;
}
xhr.setRequestHeader("Content-Type", contentType);
}
xhr.send(method === "POST" ? dataString : null);
return {
data: xhr.responseText,
title: title
};
});
var fs = require('fs');
fs.write(response.title+'.csv', response.data, 'w');
});
spooky.run(function(){
this.exit();
});
});
spooky.on('error', function (e, stack) {
console.error(e);
if (stack) {
console.log(stack);
}
});
/*
// Uncomment this block to see all of the things Casper has to say.
// There are a lot.
// He has opinions.
spooky.on('console', function (line) {
console.log(line);
});
*/
spooky.on('hello', function (greeting) {
console.log(greeting);
});
spooky.on('log', function (log) {
if (log.space === 'remote') {
console.log(log.message.replace(/ \- .*/, ''));
}
});
view raw download_csv.js hosted with ❤ by GitHub

https://gist.github.com/tanshio/045c1e1193f97cfa5e05

使い方

要node.js、casperjs、spookyjs(package.jsonをあとで置いておきます)

最初の行のIDとかPassを自分のに変えて下さい。

まとめ

いまのところスポンサードサーチしか動きません。UTF-8のCSVなのでExcelでそのまま開くことが出来ません。