先日、昨年から作ってた宿検索アプリのβ版が完成した。
今、1日3回自動でスクレイピングしてくれるようにスケジュール組んで動かしているんだけれども、まだまだ改良の余地あり。
試運転中にふと、別のアプリ(ブログタイトルのやつ)を作成したくなったのでちょっと寄り道。
ボッチ体質の私に、毎朝メールを送ってくれるアプリを作りたい。
メールの内容はとりあえず偉人の名言で。
手始めに、ネットからいくつかの名言を拾ってきてCSVに保存。
プログラムの内容は以下
1,名言CSVファイルをプログラム上で読み込む(pandas使う)
2,乱数を発生させて名言をランダムに抽出
3,抽出した名言と偉人の名前をメール送信(Gmail側の認証設定は完了済み)
4,1~3の内容を朝7:00に自動で行うスケジュールを組む
import time
import schedule
import pandas as pd
import random
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
#メール送信
def mail_export(body):#SMTPサーバーに接続
smtp_server = "smtp.gmail.com"
port = 587
server = smtplib.SMTP(smtp_server, port)#TLS暗号化の設定
server.starttls()#SMTPサーバーにログイン
login_address = "自分のメールアドレス"
login_password = "自分のパスワード"
server.login(login_address, login_password)#メッセージを作成
message = MIMEMultipart()
message["Subject"] = "おはようございます。"
message["From"] = "送信元メールアドレス"
message["To"] = "宛先メールアドレス"
text = MIMEText(body)
message.attach(text)#メール送信
server.send_message(message)#SMTPサーバの切断
server.quit()
def task():
# 名言リストを読み込んでデータフレームに格納
df = pd.read_csv("meigen.csv", encoding="utf-8")
# 0~11の乱数を発生させる
num = random.randrange(12)
mail_body = df['aphorism'][num] + '\r\n\r\n ――― ' + df['person'][num]
mail_export(mail_body)
# スケジュール登録(毎日)
schedule.every().day.at("07:00").do(task)# スケジュール実行
while True:
schedule.run_pending()
time.sleep(10)
試しに今の時刻でスケジュールを動かしてみたら、以下のメールが届いた。
選択する名言の数が少なすぎるので、「偉人の格言100選」みたいなサイトからスクレイピングでいっぱいとってきたい。
---------------------(追記)---------------------
以下の部分、実際に動かしてみたらエラーが発生したので修正しました。
# 名言リストを読み込んでデータフレームに格納
(誤)df = pd.read_csv("meigen.csv", encoding="utf-8")
(正)df = pd.read_csv("meigen.csv", encoding="shift-jis")