Hatena::ブログ(Diary)

盆栽日記

2013-08-15

GoogleAppsScriptとGoogle driveを使ってCrowdsolvingの順位が毎日メールで届くようにした話

Crowdsolving第3回リンク予測が始まった。

https://crowdsolving.jp/node/629

けれども結果をいちいち見に行くのがだるい。

ということでメールで順位が届くようにした。

まずは2d-arrays-libraryというライブラリが必要なのでインストールしておく。

https://sites.google.com/site/scriptsexamples/custom-methods/2d-arrays-library

Google driveのスプレッドシートで新規ブックを作成し、

シート1のセルA1に =ImportHtml("https://crowdsolving.jp/node/629/ranking","table",1) と入力する。

これでスプレッドシートに順位表を取り込める。

今度は取り込んだ順位表から自分の順位を取り出しメールを送る準備をする。

※(2013/8/22追記)google apps script内で関数を挿入するように変更。

Google driveのスプレッドシートで新規ブックを作成する。

ツール→スクリプトエディタで新規プロジェクトを作成し、以下のようにコードを打ち込む。

function myFunction() {
 var trg = "所沢義男";//ユーザー名
 var address = "hoge@gmail.com";//メールの送り先
 var sht = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1');
 sht.getRange("A1").setFormula('=ImportHtml("https://crowdsolving.jp/node/629/ranking","table",1)');
 // importHtmlがデータを取得し終わるまで待つ
 Utilities.sleep(10000); 
 var names =  sht.getRange(1, 3, sht.getLastRow(), 1).getValues();
 var ix = ArrayLib.indexOf(names, 0, trg);
 var rank = sht.getRange(ix+1, 2).getValue().toString();
 GmailApp.sendEmail(address, "現在の順位は"+ rank + "位", "https://crowdsolving.jp/node/629/ranking");
}

(2013/8/22追記)ImportHtmlがデータを取得し終わるまで待たないとエラーとなるようなのでコードを修正。

打ち込んだら、リソース→現在のプロジェクトのトリガーでメールを送りたい時刻を設定する。

順位は毎日24:00更新なのでその後に送ると良い。

enjoy!!