キズナアイのおはようTweetが毎日メールで届く（GoogleAppsScript）

## 2020/12/02追記
非公式の[LINEアカウント](https://github.com/dr666m1/project_morning_ai_bot)を作りました。友達登録すると毎朝アイちゃんの投稿のURLが流れてきます。主に自分用なので、連絡なく停止する可能性があります。


## 前置き
アイちゃんはご存じですか？言わずと知れた、インテリジェントなスーパーAIですね！私は毎朝のTwitter投稿（`#モーニングアイちゃん`）が大好きです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おっはよー٩(ˊᗜˋ*)و<a href="https://twitter.com/hashtag/%E3%83%A2%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%A2%E3%82%A4%E3%81%A1%E3%82%83%E3%82%93?src=hash&amp;ref_src=twsrc%5Etfw">#モーニングアイちゃん</a>☀️<a href="https://twitter.com/hashtag/KizunaAI?src=hash&amp;ref_src=twsrc%5Etfw">#KizunaAI</a> <a href="https://t.co/WQtEaH6ObG">pic.twitter.com/WQtEaH6ObG</a></p>&mdash; Kizuna AI@らぶぴえん (@aichan_nel) <a href="https://twitter.com/aichan_nel/status/1273374864942837760?ref_src=twsrc%5Etfw">June 17, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

でも忙しい朝にタイムラインを遡って探すのは面倒で...「メールやLINEにこの投稿のURLを送れたら便利なのでは！？」と思ったのがこの記事のきっかけです（アイちゃんとメールやLINEをしている気分にもなれます）。

この記事ではGoogleAppsScriptを使ってアイちゃんの投稿（`#モーニングアイちゃん`）のURLを毎朝取得し、Gmailに送信する方法を紹介します。

## 準備
GoogleAppsScriptのコードを書く前に、以下の準備が必要です。

- Googleアカウント・Gmailアドレスを取得
- TwitterのAPI申請（[こちら](https://qiita.com/kngsym2018/items/2524d21455aac111cdee)の記事を参考に、Consumer API Keysが確認できればOKです）
- Twitter APIのBearer Tokenを取得（上記のConsumer API Keysが必要です。詳細は[こちら](https://developer.twitter.com/en/docs/basics/authentication/oauth-2-0/bearer-tokens)）

## GoogleAppsScript
### スクリプトプロパティの設定
準備で取得したGmailアドレスやBearer Tokenは「ファイル > プロジェクトのプロパティ > スクリプトのプロパティ」と進んで`mail` `token`という名前でそれぞれ登録しておきます。プライベートな情報をコードに直接記載しなくてよいのでgitで管理する際も便利です[^1]。
[^1]: 余談ですが、GoogleAppsScriptをローカルで管理するなら、[clasp](https://github.com/google/clasp/)も合わせて使うと便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540947/8b7dde9e-7db9-acae-3381-a3194e8f7913.png)


### コード
以下のコードで`morning_ai_bot()`という関数を定義します。指定したアカウントから新しい順にツイートを確認し、`#モーニングアイちゃん`を見つけたらURLをメールして終了という流れです。Twitter APIの詳細な仕様は公式ドキュメントの[該当ページ](https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline)をご覧ください。

【7/26追記】最近`#モーニングアイちゃん`が付かないパターンも見られるので、検索条件は変えたほうがいいかもしれないです。

```javascript
function morning_ai_bot() {
  // スクリプトのプロパティを取得
  const token = PropertiesService.getScriptProperties().getProperty("token");
  const mail = PropertiesService.getScriptProperties().getProperty("mail");
  // Twitter API用の準備
  const account = "aichan_nel"; // アカウントの指定
  const count = 5; // 最新5ツイートに限定
  const url = `https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=${account}&count=${count}`;
  const headers = {"Authorization": `Bearer ${token}`};
  // Twitter APIの呼び出し
  const response = JSON.parse(UrlFetchApp.fetch(url, {"headers": headers}).getContentText());
  // responseの確認
  let flg = 0;
  for (let i of response) {
    for (let j of i.entities.hashtags) {
      if (j.text === "モーニングアイちゃん") {
        const tweet_id = i.id_str;
        GmailApp.sendEmail(mail, "morning_ai_bot", `https://twitter.com/${account}/status/${tweet_id}`)
        flg = 1;
        break;
      }
    }
    if (flg === 1) break;
  }
}
```

### 動作確認
試しに関数を実行してみましょう。初回は以下の画面が表示されますが「許可を確認」から進んでください。Gmailにメールが届けば成功です。エラーが出ないのにメールが届かない場合、`const count = 5;`の部分を書き換えて検索範囲を広げてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540947/28be4482-3ace-b28d-f5b2-1fa90b2a334a.png)

### トリガーの設定
「現在のプロジェクトのトリガー > トリガーを追加」と進んで、以下のように設定しましょう。これによって、関数が毎朝自動で実行されるようになります。アイちゃんの毎朝の投稿は7時なので、余裕をもって8~9時に設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540947/7b7fcee3-09f7-b81d-3f94-99cf2a08a27e.png)


## 最後に
今回は導入が簡単なGoogleAppsScript＆連携が簡単なGmailで実装しましたが、もしGmailの代わりにLINEを使いたいという場合も簡単に応用がきくのでやってみてください[^2]。

最後になりますが、おはようTweetがGmailやLINEに届くようになっても、応援の意味でTwitterのフォローは外さないでください。YouTubeのチャンネル登録もお願いします。通知もONにしてね！

[^2]: [LINE Notify](https://notify-bot.line.me/ja/)を使えばいいと思います。