2020.04.19 お詫び:GASのコードに間違いがありました。
コードの13行と17行目の “<” が ” < “となっていたので修正しました。
普段私は楽天証券を使っているのですが、お気に入りに登録している銘柄は決算間近になると、↓のようにメールで決算日を通知してくれます。しかし、このままだとカレンダーには登録されないため、決算日を忘れてしまうことが多々あります。
そこで、メールを受信したときに勝手に決算日をGoogleカレンダーに登録されるようにしました。
1.まず、Google Driveを開きます。
2.”+新規” ⇒ “その他” から”Google Apps Script” を作成します。
3.以下のコードをコピペします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
// // Gmailに来た予約受付完了メールを読んでカレンダーに登録する // function reservation_mail_to_calendar() { var expected_subject = '国内株式の決算発表予定日をお知らせします(銘柄情報通知サービス)'; var sender_email_address = 'service@rakuten-sec.co.jp'; var calendar_name = '投資'; var key = /■決算カレンダー/; var lesson_duration = 25; // minutes // 上で指定した条件の未読メールを受信BOXから洗い出す var threads = GmailApp.search('subject:' + expected_subject + ' from:' + sender_email_address + ' is:unread', 0, 500); for (var i=0; i<threads.length; ++i) { // メールの文面を取り出す var msgs = threads[i].getMessages(); for (var j=0; j<msgs.length; ++j) { var msg = msgs[j]; if (msg.isStarred()) continue; var body = msg.getPlainBody(); var lines = body.split('\r\n'); for (var i in lines) { if(lines[i].match(key)) { i++; // keyにマッチした次の行を計算 break; } } while(1) // メールに記載されている全銘柄を { var str = lines[i].split(':'); Logger.log(str); if( str.length == 2 ) { var brand = str[0] // 銘柄名取り出し var sch_st = new Date(str[1]) // 日付取り出し Logger.log(brand, sch_st); var event_title = brand + '決算'; // カレンダーに登録する予定名 var cal = CalendarApp.getCalendarsByName(calendar_name)[0]; cal.createAllDayEvent(event_title, sch_st); // Googleカレンダーに登録する i++; } else { break; // <銘柄名>:<決算日>と記載されていない行の場合 } } msg.markRead(); msg.star(); msg.refresh(); } } } |
4.”ファイル” から適当な名前で”保存” します。
5.”編集” ⇒ “現在のプロジェクトのトリガー” から “新しいトリガーを作成します”。(以下参照)
6.トリガーを”保存”します。(画面がでると思うので、アクセス許可を選択します。)
7.最後にGoogleカレンダー側で”投資”という名前のカレンダーを作成します。(この”投資”カレンダーに決算日が登録されていきます。)
○スクリプトの仕様
・メールボックスを見に行くのは1時間毎です
(受信時すぐにカレンダーに登録されるわけではないです)
・未読かつスター付きでないメールに対して処理を実行し、決算日をカレンダーに登録します。
(カレンダーに登録したメールにはスターが付きます。
※未読のままです)
コメント
初めまして。
決算スケジュールを自動で取り込めないかとネットを検索していたところ、このサイトにたどり着きました。有用な記事をありがとうございます。
質問なのですが、記事上のコードをコピペし、5番目のトリガー作成に進もうとすると、
for-loop コントロールの後に ) がありません。(行 14、ファイル「コード」)
という文言が出てきて先に進めませんでした。何か解決法をご存知でしたら、お教えいただけませんでしょうか。
プログラミングはど素人で、この記事を見るまでGASの存在も知りませんでした。久しぶりに新しい世界を知ることができました。重ね重ねありがとうございます。他の記事も読ませていただきたいと思います。それでは。
先ほど質問コメントをした者です。
友人に聞いたところ解決いたしました。14行目と18行目の<を<に置き換えると問題なく編集でき、作動も確認できました。
ご報告まで。
追伸 プログラミングはこんなことまでできてしまうのですね。目から鱗の体験でした。本当にありがとうございます。
14行目と18行目の<を<に は 13行目と17行目の<を< に
の誤りです。連投失礼。
はじめまして。
とても便利そうなので使わせていただこうと思い手順に従って行っていたのですが
コードをコピペした後に保存しようとすると13行目が以下のようにエラーで保存できません。
for-loop コントロールの後に ) がありません。(行 13、ファイル「コード」)
コードは何もいじっていないので、修正などあればお教えください。
よろしくお願します。
こんにちは。素晴らしいスクリプトをありがとうございます。
米国株式に対応させたり、新しいメールから可能な限り最小限のメールを読み込んだりと改修をしましたのでお送りいたします。(差分のみ)
5行目: var expected_subject = ‘株式の決算発表予定日をお知らせします(銘柄情報通知サービス)’;
12行目: var threads = GmailApp.search(‘subject:’ + expected_subject + ‘ from:’ + sender_email_address + ‘ is:unread newer_than:60d’, 0, 20);