【GAS】スプレッドシートにGmailからスクレイピング~メールを検索して件名を表示~【第1回】

GASで以前に天気予報を表示させるアプリを作ってから、次はスクレイピングをしてみたいとぼんやり考えていました。今回は、Gmailからスクレイピングをして、スプレッドシートに必要な情報を書き込むようなものを作りたいと思っています。

目的と作るもの

私事ですが、Nintendo Switchの脳トレゲームにハマっています。ゲームをすると翌日に、脳トレの結果がメールで送られてくる機能があり、そのメールからスクレイピングをして脳トレの記録をスプレッドシートに書き込み、自分の記録を整理してみようというのが今回の目的です。

作るものは、GASで「Gmailからスクレイピングをしてスプレッドシートに記録するもの」と「記録していくスプレッドシート」です。

GASは、前回の「気象庁の情報から今日明日の天気予報を表示するアプリ」を作った以来触れていないので、復習と勉強を兼ねて少しずつ進めていきたいと思います。

今回やること

今回は、Gmailの10スレッドからキーワードを用いて検索し、一致したメールのタイトルをログに表示するかんたんなアプリを作っていきたいと思います。

GmailApp.search(検索条件,開始インデックス,スレッドの取得数)

GmailApp.searchメソッドを使い、キーワードで検索します。タイトルで検索したり、ラベルで絞り込むようなこともできます。

Gmailには1日当たりの読み取り制限があり、特にプログラムを作っている間は何度も実行することになるので、スレッドの取得数は低めに設定しています。完成した後も、1日に何度も実行したいプログラムの場合はスレッドの取得数は低めに設定しないとすぐに制限されてしまうことを覚えておきましょう。

GmailApp.getMessagesForThreads

スレッドからメッセージをまとめて取得するメソッドです。メッセージは二次元配列になっています。

for(const …of …)

forは以前にも扱った繰り返し要素ですが、for(const …of …)を使うことによって、配列などに含まれている要素をひとつずつ取り出して処理ができます。

配列の数がわかっていない時には便利なので覚えておきましょう。

getSubject()

メールが入っている要素からタイトルを取り出します。

GAS全体

function myFunction() {
  
  const query ='さんの脳トレ記録をお届けします。';
  const start = 0;
  const max = 10;

  const threads = GmailApp.search(query,start,max);

  for(const thread of threads){
    const messages = GmailApp.getMessagesForThread(thread);
    console.log(messages[0].getSubject());
  }
}

実行結果

タイトルが3つ表示されました。脳トレからのメールが現在は3件来ているのがわかりますね。

最後に

今回は、Gmailにアクセスしてキーワードから検索し、スレッドを取得して、タイトルをログに表示させました。使用したメソッドは以下です。

  • GmailApp.search
  • GmailApp.getMessagesForThreads
  • for(const …of …)
  • getSubject()

次回は、脳トレメールからスプレッドシートに書き込みたい情報を抜き出して、ログに表示させてみたいと思います。