すやすや生活日記

専業主婦が日々を記録するブログ

偉人の名言を毎朝メールしてくれるアプリ作ってみた

先日、昨年から作ってた宿検索アプリのβ版が完成した。

今、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")