猫を愛でたい欲求を開放するLINE Botを作ってみた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356488/aa76f3d7-542e-ac5e-5cf6-fbc899822c46.png" width=80%>

# 猫は最強。顔も中身もタイプ。
我が家の **2匹** の猫はとにかくかわいい。人の猫もとにかくかわいい。
お琴の先生宅に、猫が **5匹** いるから、その先生に習うことを決めた。（それ以外の理由もあるけど）

でも私は家の猫に好かれていない。それがまた、たまらなく良い。
**追われるより追いたい！！！！**


# 寝る前に見れたら最高なのではないかﾆｬ？
いつ猫に会いたくなるか？そりゃ **Always** 。
でもなかなか上手くいかない。家の都合上飼えない人もいる。私あんまり我が家の子に好かれてないし…。
どうしたものか…。

私はもの凄く気にしいなので、寝る前に **振り返りという名の反省** をします。
でも、落ち込んだまま眠りにつくなんて悲しすぎる！

**じゃあ寝る前に欠かさず見る「LINE」に猫を送りつけてみようではないか！！！！！！！**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356488/eee84c93-a89c-6b83-14de-5a2b249a536a.png" width=50%>


# 使ったものはこちらだﾆｬ
利用したツールはこちらです！
* ランダムに猫の写真を生成するAPI：[The Cat API](https://thecatapi.com/)
* コード：[Google Apps Script](https://workspace.google.co.jp/intl/ja/products/apps-script/) (以下 GAS)
* LINE通知：[LINE Notify](https://notify-bot.line.me/ja/) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356488/b43bb165-718a-204e-92f9-8a0fb9ea5359.png)


## 無料で定期実行したいんだﾆｬ〜
はじめはJavaScriptとNode.jsを使ってAPIを叩いて、単発の実行は成功しました。
しかし、以下の課題も…
* お金をかけたくない（ケチなので）
* 定期的に実行したい（毎日癒やされたい）

そこで、GASの「トリガー」という自動実行の機能を使うことで今回のフローを **無料** で **定期実行** できるようになりました。
ちなみに、JavaScriptからGASへの変換は **話題のChatGPTにお任せ** しました。


## 使ったGASのコードはこれだ！
課題を踏まえてGASを採用したけど、GASだと使えないライブラリがあったりするみたい。（と後から知った）
これからの勉強になった…！
```javascript
// LINE Notifyのアクセストークン
const accessToken = 'YOUR_ACCESS_TOKEN';  // YOUR_ACCESS_TOKEN は置き換え

// ランダムな猫の画像を取得する関数
async function getRandomCatImage() {
  try {
    const response = await UrlFetchApp.fetch('https://api.thecatapi.com/v1/images/search');
    const responseData = JSON.parse(response.getContentText());
    const catImageUrl = responseData[0].url;
    return catImageUrl;
  } catch (error) {
    console.error('猫の画像の取得に失敗しました:', error.message);
    return null;
  }
}

// LINEに通知する関数
async function sendLineNotification(message, image) {
  try {
    const formData = {
      message: message,
      imageThumbnail: image,
      imageFullsize: image,
    };

    const response = await UrlFetchApp.fetch('https://notify-api.line.me/api/notify', {
      method: 'post',
      payload: formData,
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        Authorization: `Bearer ${accessToken}`,
      },
    });

    console.log('LINEに通知しました:', response.getContentText());
  } catch (error) {
    console.error('LINE通知の送信に失敗しました:', error.message);
  }
}

// ランダムな猫の画像を取得し、LINEに通知する処理を実行
async function notifyRandomCatImage() {
  const catImage = await getRandomCatImage();
  if (catImage) {
    sendLineNotification('今日もお疲れさま。ゆっくり休んでね！', catImage);
  }
}

// 関数を実行
notifyRandomCatImage();
```

# 制作タイム(ΦωΦ)
## 試行錯誤しながら作るﾆｬ
こんな流れで作りました！
1. LINE Notifyでアクセストークンの生成
1. GASでコード記述
1. GASでトリガーの設定


## いざ、使ってみたﾆｬ
テストとして、5分おきに通知がくるように設定しました！
無事通知が来ました！かわいい〜〜〜〜
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356488/40fcf168-d202-b262-ed57-746ae3ea8a37.png)


# GitHub Actionsを使ったNode.jsパターン！
GitHub Actionsを使うことで、GAS同様に定期実行は無料でできます！（と後から知った）
ということで、せっかく曲がりなりにもエンジニアということで試してみました。
コードはGitHubにあげてます。（私がこんなことする日が来るとは…）

https://github.com/Satomi-2023/try-cat-api

こちらでもちゃんと来ますね(ΦωΦ)やったー！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3356488/361ece62-61d5-ff5a-8e93-1561575a1fb7.png" width=60%>


# コード書けなくても作れる、なんて便利な世の中！
コードも書けない私でしたが、JavaScriptからGASへの変換を **一発で** やってくれるなんてChatGPTすごい、というのが第一の感想です！
GitHub Actionsって難しいイメージだったけど、意外にあっさり定期実行ができることに衝撃でした！
猫ちゃんAPIかわいい〜、API使いこなしていくための第一歩になりました！
これでぐっすり寝れそうだ！

# 参考にした記事たち

https://zenn.dev/protoout/articles/18-line-notify-setup

https://yuyuublog.com/linenotify/

https://qiita.com/cardene/items/67d31f13d27865a12ecf