PythonでRSSの更新をメールで知らせるスクリプトを作る。

python コンピュータ

PythonでRSSをパースするライブラリ「feedparser」を使って、RSSの更新がある場合メールで知らせるスクリプトを作ってみます。

 

#!/usr/bin/env python3
# coding: utf-8

# rss更新確認スクリプト

import feedparser
import pprint
import time

import smtplib
from email.mime.text import MIMEText
from urllib.request import urlopen
import json
from datetime import datetime
import os


# メール送信
def send_mail(subject, message):
    from_addr = "ユーザー名@yahoo.co.jp"
    to_addr = "送信先メールアドレス"
    user_name = from_addr
    passwd = "Yahooのパスワード"

    msg = MIMEText(message)
    msg['Subject'] = subject
    msg['From'] = from_addr
    msg['To'] = to_addr

    smtp = smtplib.SMTP("smtp.mail.yahoo.co.jp", 587)
    smtp.login(user_name, passwd)
    smtp.sendmail(from_addr, to_addr, msg.as_string())
    smtp.quit()

# 明充
def main():
    local_path = "./feed.txt"    # 更新日付保存ファイル
    old_up = ""
    if os.path.exists(local_path):
        with open(local_path) as f:
            old_up = f.read()
    
    url = 'https://maywork.net/feed/' # rssのアドレス
    feed = feedparser.parse(url)
    t = feed['updated_parsed']
    new_up = time.strftime('%Y-%m-%d %H:%M:%S', t)
    
    if (old_up != new_up):
        with open(local_path, mode='w') as f:
            f.write(new_up)
        subject = "RSS更新の通知 - " + new_up
        send_mail(subject, url)

if (__name__ == '__main__'):
    main()

スクリプトでやっていることはfeedparserを使いrssを取得、updated_parsedに更新日付入っているので、それとローカルファイルに保存していた以前の更新日付と比較し、変化があればメールを送信しローカルファイルを更新しています。

メールの送信はYahooのSMTPサーバーから送信しています。

スクリプトはlinuxのcronなどで定期的に実行することを前提としております。

また、比較的更新頻度の少ないサイト向けの更新チェックを想定しています。

 

コメント