googleカレンダーに登録された予定をkintoneへ登録しちゃるんじゃあ

#わしの企みじゃ
日々のアポ取得を外部委託しとって、その会社とgoogleカレンダーを共有しとるけぇ予定が登録されたら登録情報を元にkintoneの顧客情報アプリに登録しちゃろうゆう魂胆じゃ。ついでに網走におる兄貴にもチャットワークで通知しちゃったらオジキも喜ぶじゃろうな思うたんよ。

※非エンジニアなのでアドバイスいただれば幸いです。とくに正規表現がさっぱりです

##まずはgoogle組からシノギ（カレンダーイベント）を奪ったるんじゃあ！
はじめはカレンダートリガーが火ぃ吹いた時に現在から１週間後の予定を全部引っ張り出して更新日が一番最新のもんを引きずりまわしちゃろう思うたんよ。ええアイディアじゃろ？
でもな、そのやり口でぶちいわしちゃろう思うたらイベントが削除された時とか編集されたときもkintoneに登録されてのう、わしゃ血の気が引いたよ。これまでか、、、と思って腹くくったんじゃ。
その時じゃ、神さんっちゅうもんはおるな思うたよ。↓のお方がどえらい情報持ってきてくれたんじゃ。
https://google-apps-script.net/instructions/?p=645

google組がこがいなもん隠しとったとはのぉ、、、往生せえや！！！！

※kintoneのほうで重複を禁止してやりすごそうかなとも思いましたが無駄なリクエストするのもどうかと思い検索したら上記のブログにたどりつきました。ありがとうございます。

```js:oujyouseiya.js
function getGoogleGumiNoShinogi() {
  'use strict' //固い契
  var calendarId = "同期させたいカレンダーIDをぶち込めや";
  var properties = PropertiesService.getScriptProperties();
  var nextSyncToken = properties.getProperty("syncToken");
  var optionalArgs = {
    syncToken: nextSyncToken
  };
  
  var events = Calendar.Events.list(calendarId, optionalArgs);
  var nextSyncToken = events["nextSyncToken"];
  properties.setProperty("syncToken", nextSyncToken);
  var status = events["items"][0]["status"]; //イベントのステータス
  
  // 連絡先やカナはイベントの概要に打ちこまれとるんよ
  // イベントが更新された時もステータスがconfirmedじゃけぇここはkintone側で重複禁止にして２重登録がされんように裏で手ぇ回したんじゃ
  if (status == "confirmed") {
    var regPostalcode = /[0-9]{3}-[0-9]{4}/g;
    var regAddress = /..市.*?\n/g;
    var regKana = /カナ:.*?\n/g;
    var regVisitDate = /[0-9]{4}-[0-9]{2}-[0-9]{2}/g
    var senntouinn = '[';
    var str = events["items"][0]["description"];
    senntouinn += Utilities.formatString('{"関係": { "value": "%s" }', "クライアント");
    senntouinn += Utilities.formatString(',"事業者名": { "value": "%s" }', events["items"][0]["summary"]);
    senntouinn += Utilities.formatString(',"郵便番号": {"value": "%s" }', events["items"][0]["location"].match(regPostalcode));
    senntouinn += Utilities.formatString(',"所在地": {"value": "%s" }', str.match(regAddress));
    var strKana = str.match(regKana);
    var strKana = strKana[0].replace('カナ:', '');
    senntouinn += Utilities.formatString(',"カナ": {"value": "%s" }', strKana);
    var visitDate = events["items"][0]["start"]["dateTime"].match(regVisitDate);
    senntouinn += Utilities.formatString(',"訪問予定日": {"value": "%s" }', visitDate);
    senntouinn += '}]';
    Logger.log(kintoneRecord);
    return senntouinn;
  } else {
    return "削除";
  }
}
```

##kintone組にカチコミじゃあ！！！

シノギも増えて戦闘員の士気も最高じゃ！このままいったるんじゃあ！！
お前ら構わんけぇ Kintoneのシマさざらもざらにしちゃれぇ！！！！！

senntouinn「うぉぉぉおおおおおおおおお！！！！」

```js:oujyouseiya.js
function tamahaMadaNokottoruGayou() {
  'use strict'; //譲ることのできない仁義
  var subdomain = "kintoneのサブドメインをここに沈めちゃれ";
  var apps = {
    YOUR_APPLICATION1: { appid: "アプリのIDは数字じゃ、文字列じゃないんで", name: "アプリの名前をチンコロせぇ", token: "大事なもんじゃ、プロパティサービス使ったほうがほんまはええらしいで" }
  };
  var manager = new KintoneManager.KintoneManager(subdomain, apps);
  var str = getGoogleGumiNoShinogi();
  if (str != "削除") {
    str = str.replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\t/g, "\\t");
    var records = JSON.parse(str);
    var response = manager.create("YOUR_APPLICATION1", records);

    // 成功すればオジキが満足してステータスコードが200になるんよ
    var code = response.getResponseCode();
    Logger.log('Response code is "%s"', code);
    if (code == 200) {
      KusaimeshiKuttoruKyoudaihe();
    } 
  }
}
```
##兄貴・・・わしはやりました・・・シャバでまっとります
臭い飯を食うとる兄貴へせめてもの思いで

```js:oujyouseiya.js
function KusaimeshiKuttoruKyoudaihe() {
  var client = ChatWorkClient.factory({token: 'これも大事なもんじゃ、できりゃあプロパティサービス使ってくれぇよ'});
  client.sendMessage({
    room_id: // 網走に思いを馳せながら独房の番号（ルームID）を彫るんよ, 
    body: 'google組とったりました。まだまだ寒い日が続きますがお体に気をつけて'
  });
}
```

![スクリーンショット 2019-03-16 17.07.42.png](https://qiita-image-store.s3.amazonaws.com/0/205237/1c784275-298f-4b8d-790e-40c5992890c6.png)


※googleさんkintoneさんchatworkさん日々お世話になっております。ありがとうございます。