shokosブログ

プログラミング

今日の新刊をメールでお知らせしてくれる処理

わりと高頻度で漫画を買っているわたしです。

発売日当日に本屋さんで買わないと気が済まない性格なので、コミックダッシュ! - 漫画(マンガ)、コミックの蔵書管理と新刊発売日のチェックをサポートする総合サイト | コミックダッシュ!で管理している漫画の発売日にメールでお知らせしてくれるコードを殴り書きしました。

package jp.ne.hatena.syoko_sasaki;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;
public class Comic {
     public static void main(String[] args) {
          SimpleEmail email = new SimpleEmail();
          try {
               email.setCharset("utf-8");
               email.setHostName("smtp.gmail.com");
               email.setSmtpPort(587);
               email.setTLS(true);
               email.setAuthentication("gmailアカウントID", "パスワード");
               email.addTo("ケータイのアドレス");
               email.setFrom("gmailアカウントID@gmail.com");
               email.setSubject("今日の新刊");
               StringBuilder comics = new StringBuilder();
               for(String comic : getComics()) {
                    comics.append(comic);
                    comics.append("\n");
               }
               email.setMsg(comics.toString());
               email.send();
          } catch (EmailException e) {
               e.printStackTrace();
          }
     }
     private static List<String> getComics(){
          List<String> comics = new ArrayList<String>();
          try {
               URL url = new URL("http://ckworks.jp/comicdash/calendar/コミックダッシュのログインID");
               HttpURLConnection connection = (HttpURLConnection) url.openConnection();
               BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "EUC-JP"));
               int i = 0;
               int flag = 0;
               String line;
               Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
               while ((line = reader.readLine()) != null) {
                    line = pattern.matcher(line).replaceAll("").replaceAll(" ", "");
                    if(line.contains(new SimpleDateFormat("発売日:yyyy/MM/dd").format(new Date())))  {
                         flag = i;
                    }
                    if(i == flag + 8) {
                         comics.add(line);
                    }
                    i++;
               }
               reader.close();
          } catch (IOException e) {
               throw new IllegalStateException(e.getMessage());
          }
          return comics;
     }
}

改行コードのところは環境依存するので注意。
お勉強もかねて、どっかのレンタルサーバー登録していれようかな。
自分で1からcron設定したい。

あと、新規漫画開拓のために、その週に発売されるすべての漫画を月曜日の朝お知らせしてくれる作りに変えようかとも思ったり。
それだと多すぎるかしら。うーむ。