【GAS】LINE Notifyでめざまし占いを毎日通知する

# ゴール

毎日8:00~9:00の間に以下のようなメッセージが届く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/cfe555c7-e8c6-a24b-287d-7955ce5bcf1e.png)

# 目次

1. LINE Notifyのトークン生成
2. GASからLINE通知を送る
3. めざまし占いのデータを取得
4. めざまし占いのデータをLINEに送る
5. GASの定期実行 

# 1. LINE Notifyのトークン生成

Line Notifyのページにアクセス

https://notify-bot.line.me/ja/

ログインする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/5993ac07-fa8d-7699-8f49-82ad30a1d4c7.png)

マイページへ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/b4cb3188-8768-71e7-5777-eabde506076b.png)

トークンを発行
このトークンは後で使うのでメモしておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/fde5fe4a-2c8b-b6cb-dd82-7ddfc3f03aff.png)

# 2. GASからLINE通知を送る

`コード.gs`を以下のように修正して`main`を実行

```js:コード.gs
function main() {
  sendMessage("こんにちは")
}

/**
 * LINEに通知を送る
 */
function sendMessage(message){
  const token = "先ほど発行したトークン";
  const url = "https://notify-api.line.me/api/notify";

  const options ={
    "method"  : "post",
    "payload" : {"message": message},
    "headers" : {"Authorization":"Bearer " + token}
  };

  UrlFetchApp.fetch(url, options);
}
```

以下のようにLINEが届いたら成功。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/88ec16fd-2540-011c-98d4-8eebd9a7e1df.png)


# 3. めざまし占いのデータを取得

以下のURLで今日のめざまし占いのデータが取得できます。
**公式にAPIとして公開されているものではない**ため、利用する際は自己責任でお願いします。

```text:めざまし占いのAPI
https://www.fujitv.co.jp/meza/uranai/data/uranai.json
```

以下のように書くとめざまし占いのデータが取得できる。

```js
/**
 * めざまし占いのデータを取得
 */
function getForecastData() {
  const url = "https://www.fujitv.co.jp/meza/uranai/data/uranai.json";
  const response = UrlFetchApp.fetch(url).getContentText();
  const json = JSON.parse(response);
  return json;
}
```

jsonの中身はこんな感じ

```json:占い結果
{
	"date": "2023/03/22",
	"ranking": [
		{
			"advice": "友達からの意見を参考にする",
			"person": "語学力が高い人",
			"name": "おひつじ座",
			"rank": 1,
			"text": "持ち前の行動力を発揮するチャンス！<br>4月に予定している計画は前倒しして。",
			"point": "地図アプリ"
		},
        ...
		{
			"advice": "携帯電話の電源を一度切る",
			"person": "",
			"name": "やぎ座",
			"rank": 12,
			"text": "何げない一言が相手を傷つけるかも。<br>会話する時は言葉のチョイスに注意。",
			"point": "靴べら"
		}
	]
}
```

# 4. めざまし占いのデータをLINEに送る

以下のように修正して`main`を実行。

```js:コード.js
function main() {
  const { ranking } = getForecastData();
  const sign = "おうし座";
  let { name, rank, text, point } = ranking.find(item => item.name == sign);
  text = text.replaceAll('<br>',''); // brタグを消す
  const message = `\n\n${name} 【第${rank}位】\n${text}\nラッキーアイテム：${point}`;
  sendMessage(message)
}

/**
 * LINEに通知を送る
 */
function sendMessage(message){
  const token = "発行したトークン";
  const url = "https://notify-api.line.me/api/notify";

  const options ={
    "method"  : "post",
    "payload" : {"message": message},
    "headers" : {"Authorization":"Bearer " + token}
  };

  UrlFetchApp.fetch(url, options);
}

/**
 * めざまし占いのデータを取得
 */
function getForecastData() {
  const url = "https://www.fujitv.co.jp/meza/uranai/data/uranai.json";
  const response = UrlFetchApp.fetch(url).getContentText();
  const json = JSON.parse(response);
  return json;
}
```

以下のような通知が届いたら成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/e8c75f82-e606-5717-8ed5-d4ccebb6efb7.png)


# 5. GASの定期実行 

「トリガー」を開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/dbb973b1-3922-5cee-79d1-7989da6b9cec.png)

以下のように設定して完了。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636007/9bd069e1-b626-64cd-c5bb-0cf2de67bfcb.png)