やあ。
ブロガーのミライジョー(@Mirai_Joe)だ。
Googleさんちのアナリティクスとかアドセンスとかのリアルタイムレポート画面を見る人生に疲れた。
というわけで見ないことにした。
ぼくがアクセス解析をやめたワケ
もうね、疲れたのさ。
毎日毎日記事を書いても増えないアクセスに固執することに。
何が底辺ブロガーの心を折るって、「費やした努力が結実しないこと」なんだ。
つまり毎日アクセス解析を見て「こんなに力入れて記事書いたのに全然アクセス増えない……むしろ昨日より下がってる……あーガチでモチベがそれは舞い散る桜のようにー」っていうこの時間。
これはね、よくない。
落ち込むヒマがあったら他ブログを研究し、記事を練った方がいい。
だからもうアクセス解析は見ないことにした。
そうすりゃ記事を書き続けて気づかないうちにPV爆増さ。
だけど、ブログの現在地をある程度までは知りたい。
そこで考えたんだ。
直近7日間連続でデイリー3万PVを超えたら通知メールが来る。
そんな自動システムを。
ああ分かってる。
7日間連続で30000PV/日とか超有名人気ブロガーだ。
何年後になるかわからねえ。
でも、2年少し続けてきたこのブログはデザインもSEOも設計もほぼ完璧に完成した。
と思う。
だからあとは記事だけなんだ。
記事のことだけ考えて打ち込みたいんだ。
ひたすら。
というわけで Googleスプレッドシート + Google Apps Script を用いて
「Analyticsレポートの昨日のPVを収集し、表に書き込み、直近7日間連続で3万PV超えなら自分宛にメールが来る」
ということを全自動でやってくれるシステムを組んだ。
ああ。クッソ疲れた。
ん?
なぜ「7日間連続3万PV」設定かって?
「1日だけ3万PV達成」とかにしちゃったら何かの拍子でバズって1日だけすごくアクセスあって「いやこれ来ましたわサクセスロード始まりましたよはいここから勝ち確ー」みたいな感じで浮かれてて次の日「アクセス90%減……なぜだ……」みたいなファッキンシットぬか喜びを華麗に回避するためだよファッキン。
実現方法
データ収集・記録用のスプレッドシート準備
まずはこんな感じのスプレッドシートを用意します。
内訳は以下の通り。
集計用の「メインシート」×1
日替わりの「昨日のPV数だぜシート」×2 ※
「自動でAnalyticsレポートを取得するシート」×1
※昨日のAnalyticsデータのうちPV数だけをぶっこぬいたもの
※毎日自動で走らせる
※ぼくはAnalyticsを「通常用」「AMP用」に分けているので、普通の人は1シートでいいですたぶん
これは「自動でAnalyticsレポートを取得するシート」。
参考サイトは以下。
Googleアナリティクスの面倒なレポート作成をGoogleスプレッドシートで解消! (第1回)
Googleアナリティクスデータをスプレッドシートで自動取得する方法
Google Apps Scriptコードを書く
以下は参考例です。
// その日の5時59分にトリガーを設定。myFunction関数は毎朝5:59に実行される
// ちなみにAnalyticsのレポート自体は夜中2〜3時の間に前日分が取得されるようGUIでセット済
// setTrigger()自体は毎日朝4〜5時に実行されるようにGUIトリガー設定の方でセット済
function setTrigger() {
var triggerDay = new Date();
triggerDay.setHours(5);
triggerDay.setMinutes(59);
ScriptApp.newTrigger("myFunction").timeBased().at(triggerDay).create();
}
// その日のトリガーを削除する関数(消さないと残る)
function deleteTrigger() {
var triggers = ScriptApp.getProjectTriggers();
for(var i=0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == "myFunction") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
function myFunction() {
//メイン関数な
//まずトリガーを削除しておく(ここまでおまじない)
deleteTrigger();
//ノーマルPV、AMPのPVを取得
var normalPV = getNormalPV();
var ampPV = getAmpPV();
//メインシートを開いて今日のセルへ
var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var objSheet = objSpreadsheet.getActiveSheet();
activateTodayCell();
var objCell = objSheet.getActiveCell();
Logger.log("列 : " + objCell.getColumn());
Logger.log("行 : " + objCell.getRow());
//基準となる今日のC列セルをアクティベート
objCell.activate();
//昨日の通常セルに昨日の通常PVを入力
objCell.offset(-1, 1).setValue(normalPV);
//昨日のAMPセルに昨日のAMPのPVを入力
objCell.offset(-1, 2).setValue(ampPV);
//昨日の合計セルに通常PV+AMPのPVを入力
objCell.offset(-1, 0).setValue(normalPV + ampPV);
//今日を含む直近7日間がすべて3万PVを超えたか
var boolIamDreamer = checkIamDreamer(objCell);
//もし超えたなら成し遂げたぜメールを送信
if (boolIamDreamer == true){
Logger.log("Success!");
MailApp.sendEmail("hogehoge@gmail.com", "未来の俺へ", "おめでとう!!!ついに7日連続3万PVを達成したぞ!!!");
}
//もし超えなかったら特に何も起こらない
if (boolIamDreamer == false){
Logger.log("Fight!");
}
//メイン関数ここまで
}
//ここからサブ関数
//サブ関数という言葉があるのかは知らない
//通常のPVを取得
function getNormalPV(){
var mySS=SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得
var sheetDaily=mySS.getSheetByName("通常デイリーPV"); //Dailyレポートシートを取得
var range = sheetDaily.getRange("B16");
var value = range.getValue();
return value;
}
//AMPのPVを取得
function getAmpPV(){
var mySS=SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得
var sheetDaily=mySS.getSheetByName("AMPデイリーPV"); //Dailyレポートシートを取得
var range = sheetDaily.getRange("B16");
var value = range.getValue();
return value;
}
//俺は……7日間連続で3万PVを達成できたのだろうか(できてたらtrueをリターン)
function checkIamDreamer(objCell){
var goal = 0;
var iAmDreamer = false;
for(var i=1; i<=7; i++) { var pv = objCell.offset(-i, 0).getValue(); if (pv >= 30000){
goal++;
}
Logger.log( i + "日前のgoalは" + goal );
}
if (goal >= 7){
iAmDreamer = true;
}
return iAmDreamer;
}
// activateTodayCell関数
// 本来は「onOpen()関数はスプレッドシートが開けられる度に自動的に実行される」だった。
function activateTodayCell() {
goToTodayCell(1,3); // 日付列番号 A列が1 ジャンプさせるカラム番号 C
}
function goToTodayCell(dateColNo, jumpColNo ) {
//var dateColNo = 1; // 日付列番号 A列が1
//var jumpColNo = 3; // ジャンプさせるカラム番号 A列が1
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange(1,1).setBackgroundColor("red");
var maxRow = sheet.getMaxRows();//最終行を取得
var values;
if(false){
values = sheet.getDataRange.getValues(); //データを配列に格納 (全データ)
} else {
values = sheet.getRange(1, dateColNo , maxRow).getValues(); // 対象絡カラムのみを配列に格納
}
var today = new Date();
var stringToday = yyyymmdd(today);
var matchRow = maxRow; // マッチする行が無かったら最終行へ
for (var i = 1; i < maxRow; i++) { var dateValue = yyyymmdd(values[i][dateColNo-1]); if(stringToday == dateValue){ matchRow = i+1; // 配列は 0から、シートは1から } } sheet.getRange(matchRow, jumpColNo).activate(); // セルへ移動 sheet.getRange(1,1).setBackgroundColor("white"); return; } // dateを日付のみにする // Mon Jan 21 2013 13:37:00 GMT+0900 (JST) -> 2012/07/05
function yyyymmdd(dateVal)
{
var stringDate
var date = new Date(dateVal);
if(date.toString() == 'Invalid Date'){ //日付データでない
stringDate = date;
} else {
stringDate = date.getFullYear() + "/" + ("0" + (date.getMonth()+1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2);
}
return stringDate;
}
個人情報とか消し忘れてない……よね?
なんかヤバかったらメールください。
OKジョニー。
言いたいことは分かってる。
命名規則とか整形とかムダな記述多いとかそもそもソースコード表示雑すぎとか明らかに必要ないテスト用のログ表示関数が残ってるとか思うかもしれない。
というかぼくもそう思いながら書いてる。
だけどもう体力の限界なんだ。
ぶっ続けで8時間かかったのであと2年はソースコード見たくないです。
もう1ミリも頭と目を使いたくない。
これは備忘録!
あと途中で出てくる
var range = sheetDaily.getRange(“B16”);
とかのセル番号は各自適宜自分の環境に合わせてくれ。
というかぼく以外にこんなスクリプト使う人いるのか……?
まとめ
っしゃこれで記事のことだけ考えて生きていけるぞおおおおお
とりあえず3年がんばるぞおおおおおお
「日々のアクセス解析がPVアップに重要?」
ははっ。
その通りだ。
でももう疲れたんだよおおおおお
それはさながら「今月のお給料がリアルタイムで表示される4k大画面」を見つめながら行うサービス残業のようにいいいいいい
っしゃ記事書くぞおおおおおおおお
その前に本業やらなきゃああああああ
楽しくなってきたぞーーーーーーースネーーーーーーーーク!!!
参考サイト
Googleアナリティクスの面倒なレポート作成をGoogleスプレッドシートで解消! (第1回)
Googleアナリティクスデータをスプレッドシートで自動取得する方法
Google Apps Scriptの日毎のトリガーで時間をもっと細かく設定する
[Google Apps Script] Googleスプレッドシートを開いた時に、今日の入力セルへ自動ジャンプ
おまけ
お?
このブログの現状?
なるほど?
2017年7月25日時点な?
理想 | 現実 | 実際の距離 | |
---|---|---|---|
1日のPV | 30,000 | 1,000 | 30倍 |
Twitterフォロワー数 | 10,000人 | 0人 | (+1)×(10000)倍 |
※サイト運営期間:2年3ヶ月
うむ。
ふふっ。
このながーいーwwなっがーいーーwwwくだりーwwwwざーかをーwwwww
https://www.youtube.com/watch?v=5yKMdSdhrXo