見出し画像

「DLsite.com新作お知らせメール」を自動でまとめるスクリプトが便利だった

はじめに

『DLsite.com』、デジタル同人作品のダウンロード販売最大手であり使っている人も多いだろう。そして「お知らせメール機能」という機能が提供されている。

DLsite.comのお知らせメールとは

お気に入り登録している作者・サークル名,ジャンル,フリーワードに該当する新作が発売されるとメールで通知される、便利な機能。

お知らせメールの欠点

毎日深夜1時と同日22時の2回配信される。数日確認しないとメールボックスにどんどん溜まっていく。溜まったメールを1通ずつ開いて確認するのが面倒。数日分のメール内容を一度にまとめて確認したい。

解決策

GoogleAppScript(GAS)でGmailに届いたDLsiteお知らせメールの内容をコピーして、HTMLページとして一括表示する

コード

function doGet() {
 /* GoogleAppsScriptでWebアプリケーションを作るときのおまじない */
 var app = HtmlService.createTemplateFromFile('index.html');
 return app.evaluate()
 .setSandboxMode(HtmlService.SandboxMode.IFRAME)
 .setTitle('DLsite.comお知らせメールまとめスクリプト');
}

function getBody() {
 return searchMail();
}

function searchMail() {
 /* Gmailから特定条件のスレッドを検索しメールを取り出す */
 
 const read = true; //デバッグ用:処理したメールを既読に。(未読のままにしたいときは「=false」に変更)
 
 var strTerms = '"DLsiteお知らせメール" is:unread -割引が -許可されました'; //検索条件
 var myThreads = GmailApp.search(strTerms); //条件にマッチしたスレッドを取得 → 一次元配列で格納
 var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する → 二次元配列で格納
   
 if(myMsgs.length == 0){
   return '未読のDLsiteお知らせメールはありません';
 }else{

   var cnt_all = 0;
   var cnt = 0;
   var tmp = "";
   
   var dayOfWeekList = [' (日)',' (月)',' (火)',' (水)',' (木)',' (金)',' (土)'];
   
   /* メール総件数のカウント */
   for(var i = 0;i < myMsgs.length;i++){
     cnt_all += myMsgs[i].length;
   }
   
   /* 各メールから日時、内容を取り出す*/
   for(var i = 0;i < myMsgs.length;i++){
     for(var j = 0;j < myMsgs[i].length;j++){
       var date = myMsgs[i][j].getDate(); //Gmail型のgetDate()は日付型を返す。日だけを返すJSのgetDate()とは意味が違うので注意
       if(j > 0){
         date.setDate(date.getDate()-1);
       }
       tmp += '<div style="margin:0 auto;width:100%;max-width:600px;">';
       tmp += '<h1>';
       tmp += (++cnt) + '/' + cnt_all + '件';
       tmp += '</h1>';
       
       tmp += '<div style="text-align:center">';
       tmp += '<h2>';
       tmp += date.getMonth() + '月';
       tmp += date.getDate() + '日';
       tmp += dayOfWeekList[date.getDay()];
       tmp += '</h2>';
       tmp += '</div></div>';
       
       tmp += myMsgs[i][j].getBody();
       
       if(read){
         myMsgs[i][j].markRead();
       }
     }
   }
   tmp += '<div style="margin:0 auto 20px;width:100%;max-width:600px;text-align:center">';
   tmp += '<h2>=END=</h2>';
   tmp += '作者: ' + '<a href="https://twitter.com/metatetsu" target="_blank">@metatetsu</a><br/>';
   tmp += 'このスクリプトを他の人に教える! → <a href="https://twitter.com/share?ref_src=twsrc%5Etfw" class="twitter-share-button" data-size="large" data-text="「DLsite.com新作お知らせメール」を自動でまとめるスクリプトが便利だった" data-url="https://note.com/metatetsu/n/n2e4bdd10d30d " data-show-count="false">Tweet</a><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><br/>';
   tmp += 'GoogleAppsScriptによって作成。 解説 → ' + '<a href="https://note.com/metatetsu/n/n2e4bdd10d30d" target="_blank">note記事</a>';
   tmp += '</div>';
   return tmp;
 }
}

使い方

1. スクリプトが設置されている以下のURLへアクセス

2. 初回は権限許可ダイアログが表示される。「詳細」をクリックして許可ボタンを表示、「移動」を選択する。

※コードに書かれている通り、使用者アカウント上でのローカル処理のみでありデータの外部送信は一切行ってないのは約束する。

スクリーンショット 2020-06-17 21.47.26

3. あとは使用者Googleアカウント上にて自動で処理が行われる。(受信トレイに未読のDLsiteお知らせメールがない場合は処理が行われない)

4. 次回以降のためにページをブックマークするのがおすすめ。(処理結果ページをそのままブクマしてOK)

動作例

DLsiteお知らせメールが一覧表示される

画像2

あとがき

上記コードを参考にすれば「○○な条件のメールを抽出して一覧表示」するスクリプトが簡単に作れる。それほど難しくないGoogle Apps Scriptは覚えるとすごく便利なのでみんな勉強してみよう

この記事が気に入ったらサポートをしてみませんか?