LoginSignup
9
10

More than 5 years have passed since last update.

Slackでみやもとさんを使おうと思ってし……死んでた(2015年頃の話)……

Last updated at Posted at 2015-09-28

2016年時点で修正されてるとのことなので見なくていいです!
今はもう何もしなくても動きそう。

=============

経緯

みやもとさん面白そうだからためしに導入してみよーぜ!
→setUp時にgoogleカレンダーのあたりで403エラーを吐く
原因:2014/11/17のgoogleCalendarAPIv2サポート終了(多分)で祝日の取得に失敗
これ無理じゃね? って思ったけどググってもヒットしないからもしかしたら俺だけという恐怖に囚われつつ修正

修正内容

変更前main.gs
// 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'];
    });
変更後main.gs
// 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作成時のエラーは解消できた! やったね!

ほいでもってそいでもって

ダメみたいですね(無常)
434dade72d740bc0d3f13769dde6ed15.png

1e424c606aab75d507b6c5b2397d220b.png

ヘッダ部分はちゃんと追加されてますがそこから先で死んでる模様。
そもそも正常動作していればみやもとさんがレスポンスを返すようなので、init時点で落ちてるのでは疑惑

コメントアウトされてたtest1()を実行してみるとrowNoがNanになっとる!ということで追いかけていくと477行目で死んでた

main.gs
  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月にしてみると取得成功した。なぁにこれぇ。
さらに追いかけてみたら
52ae3379dc12376ed205220200e29dba.png
Month部分のparseIntで落ちてた。なぜ……

http://www.pxt.jp/ja/diary/article/195/
これが原因っぽい。8進数で9が入ったから死亡。

さらにもう一発(修正)

ということで、とりあえず先頭0除外。きたないコードだ。

main.gs
      var year = parseInt(matches[2]);
      var month = parseInt(matches[3].replace(/^0/, ''));
      var day = parseInt(matches[4].replace(/^0/, ''));

これでテストは走るようになり、スプレッドシートにも見事記録されるようになった。
03ccbdd29227a83206d933a57b6eb9bc.png
みやもとさんも反応してくれてる。わーい!

よっしゃーslackから投稿やー!

……状況が全く変わっていなかった、ということで見事に詰み。
デバッガ依存してっからなー! わっかんねーんだよなー!

どう考えてもPostでParameterの引き渡しに失敗しているとしか思えないのだけど、解決策が全くわからない……
設定間違えていたらシートの新規作成すら失敗すると思うんだが、むむむ

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10