gas(google apps script)で他サービスと連携する

# gas の他サービス連携
google apps scriptはgoogle内のサービスだけでなく、他サービスと連携して情報を取得したり通知を送ったりできます。
連携する為のライブラリーやサービスが用意されており、ソースもそこまで書く必要がなくトークンIDを指定すればすぐ使えます

# gas を使うメリット
・環境を作る必要がない
・何処からでも実行可能
・トリガー設定して定期的な実行も可能

# googleカレンダーの情報を取得
◆カレンダーIDを取得
・googleカレンダーを開き、「設定」画面を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/51f13c95-26e3-6712-2a19-944e6fb74eaf.png)
・「マイカレンダーの設定」の「カレンダー統合」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/47035faa-a6c9-bb48-dc6a-4f620b79b6b5.png)

・カレンダーIDの部分をコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/110cc895-fc5e-058e-d2cf-387fd931a7f0.png)

【gas側】
・calendarIdの部分に先ほどのidをコピペ

```
function getCalendar() {
  const calendarId = 'xxxxxxxxx';// カレンダーID
  let calendar = CalendarApp.getCalendarById(calendarId);
  var targetDay = new Date();
  var events = calendar.getEventsForDay(targetDay);

  for (key in events) {
    event = events[key];
    var message = event.getTitle() + '（' + event.getStartTime().getHours() + ':' + event.getStartTime().getMinutes() + '～' + event.getEndTime().getHours() + ':' + event.getEndTime().getMinutes() + '分）';
    console.log(message);
  }
}
```


# slackに通知
【slack側】
・botのappを作成
https://api.slack.com/apps
・上記にアクセスし、「Create New App」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/d84d8bd2-8f1c-9a1f-2393-43f0ecb5fb8d.png)

・「Form Scratch 」を選択し、botの名前と使用するworkspaceを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/7f40e93c-ec0e-9a54-0384-3deca9fa3aaf.png)

・作成したbotを選択し、左のメニューの「OAuth＆Permissions」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/18da4718-6864-46db-74f3-a1afe4c25433.png)

・Scopes の「Add an OAuth Scope」をクリックして「chat:write」「chat:write.customize」「chat:write.public」を追加し、botに書き込み権限を与える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/2dac7c47-764e-c8e8-a5ba-06e0d453008e.png)

・トークンIDをコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/72704338-6127-b2a5-8395-bc875b39b0c5.png)



【gas側の設定】
・gasのライブラリーにslackのライブラリーを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/c96580a7-99ee-66ca-5cec-d860a25cbbd1.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/f6a25b5f-c402-0879-64eb-0af5224559ae.png)

・下記で検索します
1on93YOYfSmV92R5q59NpKmsyWIQD8qnoLYk-gkQBI92C58SPyA2x1-bq

・スクリプトを追加して、先ほど作成したbotのトークンIDをtokenIdにコピペします

```
function sendSlack() {
  const tokenId = 'xoxb-xxxxxxxxxxxxxxxxxxxxxxxxxx';//トークンID
  const channelId = '#general'; // slackのチャンネルID
  let slackApp = SlackApp.create(tokenId);
  var message = 'gasからテスト通知';
  slackApp.postMessage(channelId, message);
}
```

# chatworkに通知
右上の自分のアイコンをクリックして「サービス連携」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/7483033a-570f-ca86-180f-b0c50d68f910.png)

apiトークンをコピー※トークンを発行していない場合は発行してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/16459c4c-1923-a4d8-2258-fa798f9f9066.png)

先ほどの要領で、gas側のライブラリーにchatworkのライブラリーを追加
1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

先ほどのトークンIDと通知したいルームIDを指定(urlの「#!rid」の後ろについているID)

```
function sendChatwork() {
    const tokenId = 'xxxxxxxxxxxxx'; // トークンID
    const roomId = 999999999; // ルームID
    var message = 'gasからテスト通知';
    var client = ChatWorkClient.factory({token: tokenId});
    client.sendMessage({room_id: roomId, body: message});
}
```

# discordに通知
・通知したいチャンネルの設定ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/d8e7670e-0b0f-8a13-0e67-9d961fda639b.png)

・ウェブフックを作成し、urlをコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/e78f4364-0259-3887-d250-ecab22e81f8c.png)

・先ほど作成したウェブフックのurlをコピペ

```
function sendDiscord() {
  const discordWebHookURL = 'https://discord.com/api/webhooks/9999999999/xxxxxxxxxxxxxxx';// ウェブフックURL
  var message = 'gasからテスト通知';
  UrlFetchApp.fetch(discordWebHookURL, { 'method': 'POST','headers': { 'Content-type': 'application/json' },'payload': JSON.stringify({'content': message,'tts': false})});
}
```

# youtubeの情報を取得

・gasのサービスからYouTube Data apiを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/725b1698-f9b8-bf06-d470-d802fd322db9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/32c06b68-5dbe-dffe-64a1-8b578bf9676a.png)

・調査したいチャンネルidを指定する

```
function getYutube() {
  const channelId = 'xxxxxxxxxxxxxxxxxxxxxxxx'; //チャンネルId
  let results = YouTube.Channels.list('snippet,statistics', { id: channelId });
  let items = results.items[0];
  let statistics = items.statistics;
  console.log('チャンネル名=' + items.snippet.title + ' 登録者数=' + statistics.subscriberCount + ' 全動画数=' + statistics.videoCount + ' 全再生数=' + statistics.viewCount);
}
```

## 動画での説明はこちら↓

<iframe width="560" height="315" src="https://www.youtube.com/embed/XZq1XzsEJWE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>