【GAS】スプレッドシートにGmailからスクレイピング~本文からデータを抜き出して表示~【第2回】
前回は、Gmailから目当てのメールを検索して、件名を表示させてみました。今回は、もう少し踏み込んでメール本文から情報を抜き出してログに表示させます。
目次
- 【GAS】スプレッドシートにGmailからスクレイピング~メールを検索して件名を表示~【第1回】
- 【GAS】スプレッドシートにGmailからスクレイピング~本文からデータを抜き出して表示~【第2回】
- 【GAS】スプレッドシートにGmailからスクレイピング~抜き出したデータの整理と関数化~【第3回】
- 【GAS】スプレッドシートにGmailからスクレイピング~日付データと配列化とソート~【第4回】
- 【GAS】スプレッドシートにGmailからスクレイピング~GmailIDと各データ取得~【第5回】
- 【GAS】スプレッドシートにGmailからスクレイピング~スプレッドシートの用意~【第6回】
- 【GAS】スプレッドシートにGmailからスクレイピング~スプレッドシートへの書き込み~【第7回】
- 【GAS】スプレッドシートにGmailからスクレイピング~重複しないようにする~【第8回】
- 【GAS】スプレッドシートにGmailからスクレイピング~GASでセルに関数を入れる~【第9回】
- 【GAS】スプレッドシートにGmailからスクレイピング~トリガー設定~【第10回】
今回やること
今回は、脳トレメールからスプレッドシートに書き込みたい情報を抜き出して、ログに表示させてみたいと思います。と言っても、すべてをいきなり抜き出すのは大変なので、今回は「計算100」「人数数え」のデータのみを抜き出します。
getPlainBody()
getPlainBodyはメール本文のプレーンテキストを取得するメソッドです。HTMLなどでは装飾がされていますが、それを取り除くことができます。
今回のメールはHTMLではないですが、こちらでも本文のテキストを取得できます。
matchと正規表現
今回の使い方では、matchメソッドは文字列の後ろで、正規表現で指定した文字列と一致した文字列を返します。
正規表現とは、いくつかの文字列をひとつの形式で表現するための方法で、前後が決まっている今回のパターンや、文字数が決まっている場合などいろいろな場合に使える便利な表現です。以下のように組み合わせて使います。
文字列.match(/正規表現/g)
最後のgはフラグと言って、検索方法のオプション設定のようなものです。gは一致したすべてを返してくれます。他にも、iやmなどもあります。
厳密不等価演算子 (!==)
文字列を検索した時に、そもそも引っかからない場合があります。脳トレにも種類があるので、その日にすべての種類を遊んだとは限らないので、検索した結果「null」が返ってくることがあります。
今回はログに表示させるだけなので、nullは除きたいです。ifで厳密不等価演算子を使ってnullを省きます。!=の不等価演算子だと、undefinedも同じ扱いになってしまうので、今回は厳密不等価演算子を使用しました。
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);
for(const message of messages){
const plainBody = message.getPlainBody();
const calc100 = plainBody.match(/計算100\s・(.*)(/g);
const people = plainBody.match(/人数数え\s・(.*)問/g);
if(calc100 !== null){
console.log(calc100);
}
if(people !== null){
console.log(people);
}
}
}
}
実行結果
2種類検索して、全部で4つ記録が返ってきました。
最後に
今回は、スプレッドシートに書き込みたい情報を抜き出して、ログに表示させてみました。
次回は、抜き出したデータのいらない部分を削ったり、関数化してわかりやすくしようと思います。
ディスカッション
コメント一覧
まだ、コメントがありません