ラベル google apps script の投稿を表示しています。 すべての投稿を表示
ラベル google apps script の投稿を表示しています。 すべての投稿を表示

2015年11月10日火曜日

google apps script のライブラリを取り込んで利用する

今回はgoogle apps script でライブラリをつくる方法をご紹介します。

何がいいか?

  • 公開されている便利なライブラリを利用して効率よくプログラムできる
  • 自分で共通ライブラリを作って、読み込んで使うことで保守性が上がる

ライブラリを読み込む

  • 「リソース」タブの「ライブラリ」を選択する
  • プロジェクトキーを入力する
  • バージョンを指定する
  • 保存する




スクリプト内で利用する

「識別子」として指定した文字列で読み込んだライブラリを使うことができます
ex) var GetStockDataObj = GetStockData.factory({hoge: 'fuga'});



2015年11月6日金曜日

google apps script ライブラリの作り方と公開方法

今回はgoogle apps script でライブラリをつくる方法をご紹介します。

何がいいか?


  • 異なるファイルなどで作った関数やクラスを違うスクリプトから使うことができる
  • 便利関数など共通化しておける
  • 作ったプログラムを外部に公開できるので世界中で使ってもらえる(大げさ)
自分でもライブラリを一つ公開しました
=> google apps script 向け株式情報取得ライブラリ

ライブラリをつくる

バージョンを登録する


  • 「班を管理」を選ぶ
  • バージョンのタイトルを入力して「新しいバージョンを保存」を押す



プロジェクトキーを取得する


  • プロジェクトのプロパティを選ぶ
  • プロジェクトキーの項目の英数字をメモ帳などに保存しておく




権限設定を変える


閲覧権限以上がないとスクリプトを実行できないですので権限設定を変えます
「共有ボタン」を押す
権限を閲覧可に変更する(今回は一般公開なので誰でも閲覧可にしました限定して公開する場合は特定のアドレスだけに共有するようにしてください)










2015年11月2日月曜日

スプレッドシートで株価管理するための google apps script 向け株式情報取得ライブラリ

はじめに


自分が株価取得用に作ったgoogle apps scriptのスクリプトをライブラリ化したので紹介します。
これを定期実行の関数から呼び出して、株価の管理をしています。

できること

  • 株式が存在するか
  • 現在の株価の取得
  • 社名の取得
  • 単元株式の取得
  • 予想配当の取得
==> サイトにある情報ならmatch使って拡張すれば良いので今後は出来高なども取れるようにする予定

github


https://github.com/uenoryoichi/googleAppsScript/blob/master/getStockData/GetStockData.gas

使い方

  1. ライブラリを読み込む
  2. codeを引数に渡してfactoryでオブジェクトを作成してください

技術的なこと -- プロトタイピングでの記述 --

jsでちょっとしたライブラリつくる時に使われているプロトタイプを使う機会が無かったので今回のライブラリ化に際して使ってみました。

良かった面

  • 共通で使う初期値などを予めsetして、それに沿ったオブジェクトを返してくれるので、単純に関数群としてのライブラリと異なり、分離した時に引数の受け渡しを都度都度しなくて良くなった。
  • 特にurlFetch部分の呼び出しがオブジェクト生成時のみになったので、かなり高速化して、GASの起動時間による制限でできなかったことができるようになった。
  • ライブラリ内のメソッドを継承したり追加したりできるので特殊な対応が必要な時にも柔軟に対応できる

まだまだな点

yahoo依存で頑張ってmatch関数によってデータを取得しているので、まだ不完全

  • 上場廃止のものはページが存在しているので取得できてしまう
  • 取得できるものがまだ限られている
  • 今まで作ってきた他のスクリプトとの相性上、今回は一つ一つの値を返すようにしたが、連想配列を一括で返すほうが、ライブラリとしては良いのではないかと作ってて思った

2015年9月30日水曜日

CSVダウンロード => googleドライブ保存を定期化する際に気をつけること


こちらの記事の続報です。
CSVをダウンロードしてGoogle Drive に保存する処理をGoogle Apps Script で作ってみた

google apps script は定期的な実行を簡単に行うことができます。

前回作ったスクリプトも毎日実行しておけば自動的にcsvが特定のフォルダに保存されて、データ収集が自動化できます。ここでいくつか失敗したことがあったので、その対処として入れた処理を紹介します。



同じファイルがあったら処理を終わらせる。

ソースコード

  var folderId = '1234567890';
  var file = DriveApp.getFolderById(folderId).getFilesByName(date + '.csv');
  if (file.hasNext()) return;

ileIterator::hasNext()

getFilesByNameがFileIteratorクラスで値を返してきます。
hasNext()でファイルがあれば、既にダウンロード済みなので処理は終了させてます。


CSVが存在しなくてリダイレクトされちゃったら処理を終わらせる

ソースコード


  if(response.getBlob().getContentType()=='text/html') return;

2015年9月28日月曜日

CSVをダウンロードしてGoogle Drive に保存する処理をGoogle Apps Script で作ってみた

googleドライブに貯めておきたいデータをダウンロードするのに、google apps script(GAS)使うと親和性高いから楽かも!と思い作成しました。

今回は株価のCSVを提供しているサイトからCSVをダウンロードしてそのままドライブに保存するまでです。

ソースコード


function getCsvSample() { 
  var folderId = '1234567890';
  var destfolder = DriveApp.getFolderById(folderId);
  var date = "2015-09-25";
  var response = UrlFetchApp.fetch("http://k-db.com/?p=all&download=csv&date=" + date);
  destfolder.createFile(date + '.csv', response.getContentText('Shift_JIS'));
}

変数、クラス、関数の説明


folderId

フォルダを特定するIDです。該当フォルダのURLをコピって来てください
https://drive.google.com/drive/**/**/folders/{ココに記述してある文字列}

DriveApp

googleドライブのファイルやフォルダを操作するクラスです。

UrlFetchApp

よく使うやつ、スクレイピングでお世話になっています。外部サイトへアクセスするときに使います。

getContentText()

今回はここで苦労しました。日本語が文字化けしてしまっている場合は保存や操作をする前に文字コード指定しないといけないです

2015年6月27日土曜日

Google Apps Script 自動で曜日ごとに色を付ける



定期的にデータを貯めこんでいるシートの日付部分をわかりやすくするために
曜日ごとに色を付けられるスクリプトを作りました。

集計メソッドの最後くらいで読んでおけばOK


// 曜日で色を付ける
function setColorWeekend(){

  var range = sheet.getRange("A2:A5");
  var cols = range.getNumColumns();
  var rows = range.getNumRows();
  for (var i = 1; i <= rows; i++) {
    for (var j = 1; j <= cols; j++) {
      var cell = range.getCell(i, j);
      var w = cell.getValue();
      // 0が日曜日/背景を赤に
      if ((w % 7) == 0) {
        cell.setBackground("#FF0000");
      // 6が土曜日/背景を青に
      } else if ((w % 7) == 6) {
        cell.setBackground("#4169E1");
      } else { 
        cell.setBackground("#FFFFFF");
      }
    }
  }
}


2014年7月14日月曜日

GAS のgoogle analytics API で正規表現のフィルターをかける


連投となりますが
analytics APIを使う時に正規表現をどうやって使うかに困ったので記しておきます。

前回の投稿
google apps scriptのAnalytics APIでページのURLで絞り込む方法

やりたかったこと

  1. analytics APIのフィルターを正規表現で表現したかった

参考にしたページ





やり方

正規表現は`==`ではなく`=~`でマッチさせる


/*
 * 参考にしたページの8-10行目
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:keyword==keywords'   // 取得したいキーワード
};

/*
 * フィルタをページにする
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:pagePath==/2014/03/iclustaphpmyadmin.html'   // 指定のページ
};

/*
 * フィルタを正規表現にする 
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:pagePath=~/2014.*'   // 2014投稿のページ
};



GASのAnalytics APIでページのURLで絞り込む方法



久しぶりの更新です

最近GASことgoogle apps scriptにはまっています。
analytics APIを使う時にページのURLを指定して抽出条件を絞る方法を紹介します

やりたかったこと

  1. analyticsのデータを取得する際に特定のページの情報を取り出したかった

参考にしたページ


やり方

特定のページの情報はfilterにpagePathで指定する

/*
 * 参考にしたページの8-10行目
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:keyword==keywords'   // 取得したいキーワード
};

/*
 * フィルタをページにする
 */
var optArgs = {
    'dimensions': 'ga:date',
    'filters': 'ga:pagePath==/2014/03/iclustaphpmyadmin.html'   // 指定のページ
};


オプション設定で正規表現を使う方法も書きましたので参考にしてください
google apps script のgoogle analytics API で正規表現のフィルターをかける