Google Apps Script

[ガラケー版(QRコード)]
アクセス記録[推移 / PV内訳(過去1日 / 過去1週間) / 外部アクセス元 (昨日 / 過去1週間) / ログイン論客足跡]
プロフィール私書(メール)
   /   /送済
評価(一覧   /)
投票   /共:   /
ファン登録
作品/情報/
DB構築()
ブログ
[書く]
攻略記事リンク集
My Play List
 作成日時分類記事タイトル
12015/03/05Google Apps ..カレンダーから指定した日付以降のイベントリストを得る..
22015/02/10Google Apps ..Google AnalyticsのUU数をGoogl..
 反応日時来客名来客者の最近のメッセージ
12017/02/25Merciこんばんは。サーバー移転後からだと思いますが、以前は見られた..
22017/02/17ねこじゃらしブログ投稿やコメントをしようとすると、たまにエラーになります..
32017/02/16Barnirunお世話になっております。https対応の影響か(またはhtm..
42016/11/10伏魔の剣こんばんわ。形式変更お疲れ様でした。 ところでこの改定につい..
52016/10/31雪霞いつもありがとうございます。ところで、ログアウトした時にポッ..
その他最近のコメント
1.
2015/03/05 Google Apps Script > カレンダーから指定した日付以降のイベントリストを得る」
[この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)]

例えば、今年一年のGoogle Calendarのイベントリストを得るスクリプト。
手始めとして
https://script.google.com/
で、Calendar系のAPIをONにして走らせてみて下さい。

これだけだと開始・終了日時とイベントリストを得るだけですが、そこをベースに例えば日時と組み合わせた何かしらのレポートを作ったり、アクションを起こさせたりするものを作る際にベースにできます。
つまり結果としてGoogle CalendarをGoogle APIを叩いて実現出来る各種アクションの制御センターにする事もできます。
何かをさせたいという時には、Google Calendarにイベントを作成、そうするとその日時に自動的にそれが実行されるといった。
その為の基本となるスクリプトとしてお使い下さい。
結果は、表示→ログで確認。

なお、自分の場合は、ここから、指定したイベントについて、どの期間で行われていたのかを調べて、それを別の履歴とくっつかせて、成果レポートとしてまとめる、といった用途で考えてます。

function run(){
// ここに範囲の開始日時をセット
  var start_time = '2015/01/01 00:00:00';
  listEvents(start_time);
}

function listEvents(start_time) {
  var calendarId = 'primary';
  var start_time_obj = new Date(start_time);
  var events = Calendar.Events.list(calendarId, {
    timeMin: start_time_obj.toISOString(),
    singleEvents: true,
    orderBy: 'startTime'
  });
  if (events.items && events.items.length > 0) {
    for (var i = 0; i < events.items.length; i++) {
      var event = events.items[i];
      if (event.start.date) {
        var start = parseDate(event.start.date);
        var end = parseDate(event.end.date);
        var end_obj = new Date(end);
        end_obj.setTime(end_obj.getTime()-1);
        Logger.log('%s-%s %s', toLocaleDate(new Date(start)), toLocaleDate(end_obj), event.summary);
      } 
      else {
        Logger.log('?-? %s', event.summary);
      }
    }
  } else {
    Logger.log('No events found.');
  }
}

function parseDate(string) {
  var parts = string.split('T');
  parts[0] = parts[0].replace(/-/g, '/');
  return new Date(parts.join(' '));
}

function toLocaleDate( date ){
  var year = date.getFullYear();
  var mon = date.getMonth() + 1;
  var mday = date.getDate() + '';
  mon += '';
  if(mon.length < 2){
    mon = '0' + mon;
  }
  
  if(mday.length < 2){
    mday = '0' + mday;
  }
  return year + '/' + mon + '/' + mday;
}


コメントする

2.
2015/02/10 Google Apps Script > Google AnalyticsのUU数をGoogle SpreadsheetにApps Scriptで自動記録」
[この書込みのみ表示(記事URL紹介用) / 編集 / 削除 / トラバ送信 / 共有分類に追加(タグ付け)]

1. 文章目的
2. 昨日分のユニークユーザー数を新たに作るスプレッドシートに記録するGoogle Apps Script
3. 選択しているスプレッドシートに、UU、PV、PV/UU、直帰率、平均滞在時間を書き込むGoogle Apps Script
4. スクリプトエディターを立ち上げないで実行できるようにする

    1. 文章目的

Google Analyticsの昨日のユニークユーザーを得て、Google Spreadsheetに入れ込む、といったGoogle Apps Script例が見つからなかったので自分で作ってみた。
面倒な作業は自動化するに限る、という事で、これで人生の無駄が一つ減り、人生がその分クリエティヴな輝きを取り戻す事が可能になります。
手動の作業を残していたら、今の時代ドンドン遅れてしまいますからね。

ここまで出来れば、後は必要に応じて必要な部分を部分部分で取り込んで、KPI作成とかに使えると思います。
つまりは、この位の事は、この位の記述で出来るというデモみたいなものですね。

Analytics APIとかをGoogle Developer Console
https://console.developers.google.com/
でONにしてから、
http://www.google.com/script/start/
から動かしてますが、Spreadsheetのツール→スクリプトエディターの方に組み込んで動かすのもありでしょう(基本そっちかな/そちらの例も作ってあります)。
    2. 昨日分のユニークユーザー数を新たに作るスプレッドシートに記録するGoogle Apps Script

profile_idは自分のGoogle AnalyticsのURLから取得して下さい。
https://www.google.com/analytics/web/?hl=ja&pli=1#report/visitors-overview/a103300w120308p96186554/
といった、末尾の数字の部分に該当します。
これはスクリプトエディターから動かします。
このスクリプトを動かすと、Google Docsのスプレッドシートリストに、新たなスプレッドシートが出来、そしてそこに昨日のGAのユニークユーザーすが入っている事が確認出来ます。

function run() {
  var profile_id = 96186554; /* end of analytics url's number */
  record_yesterday_statics(profile_id);
}

function record_yesterday_statics(profileId) {
  var today = new Date();
  var yesterday = new Date(today.getFullYear()+'/'+(today.getMonth() + 1)+'/'+today.getDate());
  yesterday.setDate(yesterday.getDate() - 1);
  var yesterday_str = yesterday.getFullYear()+'/'+(yesterday.getMonth() + 1)+'/'+yesterday.getDate()
  
  var startDate = Utilities.formatDate(yesterday, Session.getTimeZone(),
      'yyyy-MM-dd');
  var endDate = Utilities.formatDate(yesterday, Session.getTimeZone(),
      'yyyy-MM-dd');

  var tableId  = 'ga:' + profileId;
  var metric = 'ga:users';
  var options = {};
  /*{
    'dimensions': 'ga:source,ga:keyword',
    'sort': '-ga:visits,ga:source',
    'filters': 'ga:medium==organic',
    'max-results': 25
  };*/
  
  var report = Analytics.Data.Ga.get(tableId, startDate, endDate, metric,
      options);

  if (report.rows) {
    var spreadsheet = SpreadsheetApp.create('Unique users');
    var sheet = spreadsheet.getActiveSheet();

    // Append the headers.
    var headers = report.columnHeaders.map(function(columnHeader) {
      return columnHeader.name;
    });
//    sheet.appendRow(headers);

    // Append the results.
    sheet.getRange(1, 1).setValue(yesterday_str);
    
    sheet.getRange(1, 2, report.rows.length, headers.length)
        .setValues(report.rows);

    Logger.log('Report spreadsheet created: %s',
        spreadsheet.getUrl());
  } else {
    Logger.log('No rows returned.');
  }
}

    3. 選択しているスプレッドシートに、UU、PV、PV/UU、直帰率、平均滞在時間を書き込むGoogle Apps Script

上は技術的にこう書けば出来るんだなという検証として、こちらが実用用途に拡張した本命。
profile_id は上で説明したようにGoogle AnalyticsのURLの末尾の数字のところから取って、
start_date_str の値は自分が測りたいデータが始まる日を入れて下さい。

なお、GAで採りたい項目は
https://developers.google.com/analytics/devguides/reporting/core/dimsmets#cats=user,session,traffic_sources,adwords
を参考に、変数var metrics='....';の中にコンマ繋がりで追加すれば拡張する事が出来ます。

使い方は、自分がKPI管理とかに使っているGoogle Spreadsheetを開いて、既存データーを不注意に上書きしないように、
とりあえずはどこに値が入ってくるのか作動を見る為に値を入れる用の空のシートを開いて、
上メニューから、ツール→スクリプトエディター
と移動して、そこに下記スクリプトを貼付けて、変数を調整して、run()関数を選んで、実行!

function run() {
  var start_date_str = "2015/01/12";
  var profile_id = 96186554; /* end of analytics url's number */
  record_uu(profile_id, start_date_str);
}


function toDoubleDigits(num) {
   num += "";
   if (num.length === 1) {
     num = "0" + num;
   }
  return num;    
}

function record_uu(profileId, start_date_str) {
  var start_date = new Date(start_date_str);
  var today = new Date();
  var yesterday = new Date(today.getFullYear()+'/'+(today.getMonth() + 1)+'/'+today.getDate());
  yesterday.setDate(yesterday.getDate() - 1);
  var yesterday_str = yesterday.getFullYear()+'/'+(yesterday.getMonth() + 1)+'/'+yesterday.getDate();

  var date_cursor = yesterday;
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();

 
  
  var line_num = 0;
  line_num++;
  var item_names = new Array("Date", "UU", "PV", "PV/UU", "Bounce Rate", "Avg Load Time");
  var tableId  = 'ga:' + profileId;
  var metric = 'ga:users,ga:pageviews,ga:bounceRate,ga:avgPageLoadTime';
  var options = {
    'dimensions': 'ga:date',
    'sort': '-ga:date',
  };
  
  var item_loc = 0;
  for each (var item_name in item_names){
    item_loc++;
    sheet.getRange(line_num, item_loc).setValue(item_name);
  }
  
  var in_startDate = Utilities.formatDate(date_cursor, Session.getTimeZone(),
                                          start_date.getFullYear()
                                          +'-'+toDoubleDigits(start_date.getMonth()+1)
  +"-"+toDoubleDigits(start_date.getDate()) );
  var in_endDate = Utilities.formatDate(date_cursor, Session.getTimeZone(),yesterday.getFullYear()
                                        +'-'+toDoubleDigits((yesterday.getMonth() + 1))
  +'-'+toDoubleDigits(yesterday.getDate()));

  line_num++;

  var report = Analytics.Data.Ga.get(tableId, in_startDate, in_endDate, metric, options);

  if (report.rows) {
    for(var i =0;i < report.rows.length;i++){
      var in_date_str = report.rows[i][0];
      var uu = report.rows[i][1];
      var pv = report.rows[i][2];
      var bounce_rate = report.rows[i][3];
      var avg_load_time = report.rows[i][4];
      var pv_uu = 0;
      if(uu && pv){
        pv_uu = (pv/uu).toFixed(2);
      }
      
      var loc_num = 0;
      
      loc_num++;
      sheet.getRange(line_num, loc_num).setValue(in_date_str.substr(0,4)+'/'+in_date_str.substr(4,2)+'/'+in_date_str.substr(6,2));
      
      loc_num++;
      sheet.getRange(line_num, loc_num).setValue(uu);
      
      loc_num++;
      sheet.getRange(line_num, loc_num).setValue(pv);
      
      loc_num++;
      sheet.getRange(line_num, loc_num).setValue(pv_uu);
      
      loc_num++;
      sheet.getRange(line_num, loc_num).setValue(bounce_rate);

      loc_num++;
      sheet.getRange(line_num, loc_num).setValue(avg_load_time);
      
      line_num++;
    }
    
  }
}

    4. スクリプトエディターを立ち上げないで実行できるようにする

function onOpen(){
  showMenu();
}

function showMenu() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menu = [
    {name: "GAデータ取得", functionName: "run"}
  ];
  ss.addMenu("追加メニュー", menu);
}
を追加記述して保存し、showMenu()を選んで実行すると、そのシートに「追加メニュー」という項目が追加されていて、使えるようになる。

メニューの追加についてはdotinstallに該当する講座があるので
http://dotinstall.com/lessons/basic_google_apps_script/24310
http://dotinstall.com/lessons/basic_google_apps_script/24311
それを見れば画面の動きも分かるかと。

なお、メニューから実行どころか、立ち上げたらいきなり実行させたいのなら、

onOpen(){
  run();
}

と書けば良い。

コメントする
RSS購読
RSS
ブログ表示スタイル
リスト/携帯(QRコード)
画像/動画/音声/リンク
表示開始年月
分類
全て
1.このサイトについて
2.作品DB開発/運用
3.ホームページ制作技術
4.Perl
5.C言語 / C++
6.検索エンジン&SEO
7.サッカー
8.自分のこと
9.Linux
10.旅行
11.思ったこと
12.パソコン
13.Berkeley DB
14.その他技術系
15.企画
16.スマートフォン
17.鑑賞
18.皆声.jpニュース
19.インターネット業界
20.運用マニュアル(自分用)
21.技術系以外実用書
22.料理
23.ALEXA
24.アニメ
25.会計
26.漫画
27.設計書
28.色々サイト作成
29.サーバー
30.自分専用
31.生活
32.OP/ED/PV
33.ゲーム
34.DB整備
35.新規開始作品紹介
36.英語圏の話題
37.大道芸
38.映画
39.PHP
40.ダイエット
41.Mac
42.JavaScript
43.MySQL
44.介護
45.作品DB作品追加作業
46.BI
47.Web API
48.パフォーマンス
49.インターネットの活用方法
50.Riak
51.Androidアプリ開発
52.Cassandra
53.スパム
54.写真
55.iOSアプリ開発
56.AWS
57.マーケティング
58.Web漫画
59.法律
60.mongodb
61.開発環境整備
62Google Apps Script
63.meteor
64.Pentaho
65.Ansible
66.VPS
67.技術書メモ
68.Vagrant
69.Docker
70.dokuwiki
71.Apple Watch
72.Webサービス
73.セキュリティ
74.Elastic Search
75.Wordpress
76.クラウド
77.英語
78.MVNO
79.シンガポール
80.マレーシア
81.管理人さん
82.管理人さん
日記の主な内容
サイト運営/開発
検索エンジン情報
・技術ネタ(Berkeley DB,
Linux, Perl, サイト作成)等

サイト管理
全まとめ
サーバー管理
定期処理状況
開発予定
削除提案
作品追加依頼
OP/ED追加依頼
OP/ED not found
作品提案承認欄

格言 fromスクライド
この世の理は即ち速さ
20年かければ馬鹿でも
傑作小説を書ける

助けられたら助け返す
それが俺のルール

強くなるには
一番弱い考えをする事だ
そしてその考えに反逆する




右側に何か入れてみるテスト


仕事でのサイト
介護DB
Helpyou
Doctor career
Nurse career
上へ ↑上へ 最速検索作品DB皆声