2016年時点で修正されてるとのことなので見なくていいです!
今はもう何もしなくても動きそう。
=============
経緯
みやもとさん面白そうだからためしに導入してみよーぜ!
→setUp時にgoogleカレンダーのあたりで403エラーを吐く
原因:2014/11/17のgoogleCalendarAPIv2サポート終了(多分)で祝日の取得に失敗
これ無理じゃね? って思ったけどググってもヒットしないからもしかしたら俺だけという恐怖に囚われつつ修正
修正内容
// 611行目〜
// 休日を設定
var url = 'http://www.google.com/calendar/feeds/japanese@holiday.calendar.google.com/public/full-noattendees?alt=json&max-results=1000&start-min='+DateUtils.format("Y-m-d", DateUtils.now());
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
var holidays = _.map(data.feed.entry, function(e) {
return e['gd$when'][0]['startTime'];
});
// 611行目〜
// 休日を設定
var url = 'https://www.google.com/calendar/feeds/japanese__ja@holiday.calendar.google.com/public/basic?alt=json&max-results=1000&start-min='+DateUtils.format("Y-m-d", DateUtils.now());
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
var holidays = _.map(data.feed.entry, function(e) {
return e['id']['$t'].replace(/^.*?(2\d{3})(\d{2})(\d{2}).*?$/, '$1-$2-$3');
});
休日開始日をとってる部分をゴリゴリ取得するように変更してみた。
とりあえずこれでspreadsheet作成時のエラーは解消できた! やったね!
ほいでもってそいでもって
ヘッダ部分はちゃんと追加されてますがそこから先で死んでる模様。
そもそも正常動作していればみやもとさんがレスポンスを返すようなので、init時点で落ちてるのでは疑惑
コメントアウトされてたtest1()を実行してみるとrowNoがNanになっとる!ということで追いかけていくと477行目で死んでた
GSTimesheets.prototype._getRowNo = function(username, date) {
if(!date) date = DateUtils.now();
var rowNo = this.scheme.properties.length + 4;
var startAt = DateUtils.parseDate(this.settings.get("開始日")); // [2015, NaN, 28] .. error!
var s = new Date(startAt[0], startAt[1]-1, startAt[2], 0, 0, 0);
rowNo += parseInt((date.getTime()-date.getTimezoneOffset()*60*1000)/(1000*24*60*60)) - parseInt((s.getTime()-s.getTimezoneOffset()*60*1000)/(1000*24*60*60));
return rowNo;
};
でもこれは単純に引っ張ってきてるだけなので落ちる理由がわからん。
とりあえず中身を見てみる
var t = this.settings.get("開始日"); # 2015-09-28 00:00:00
ハイフンってparseいけるんだっけ?とか思ったけど0埋めも気になったのでスプレッドシート側を10月にしてみると取得成功した。なぁにこれぇ。
さらに追いかけてみたら
Month部分のparseIntで落ちてた。なぜ……
http://www.pxt.jp/ja/diary/article/195/
これが原因っぽい。8進数で9が入ったから死亡。
さらにもう一発(修正)
ということで、とりあえず先頭0除外。きたないコードだ。
var year = parseInt(matches[2]);
var month = parseInt(matches[3].replace(/^0/, ''));
var day = parseInt(matches[4].replace(/^0/, ''));
これでテストは走るようになり、スプレッドシートにも見事記録されるようになった。
みやもとさんも反応してくれてる。わーい!
よっしゃーslackから投稿やー!
……状況が全く変わっていなかった、ということで見事に詰み。
デバッガ依存してっからなー! わっかんねーんだよなー!
どう考えてもPostでParameterの引き渡しに失敗しているとしか思えないのだけど、解決策が全くわからない……
設定間違えていたらシートの新規作成すら失敗すると思うんだが、むむむ