2020年3月22日日曜日

開発環境

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、16章(電子メールやSMSの送信)、16.9(演習プロジェクト)、16.9.3(自動退会幾)の解答を求めてみる。

コード

#!/usr/bin/env python3
import config
import ssl
import bs4
import webbrowser
import imapclient
import imaplib
import pyzmail

imaplib._MAXLINE = 10000000

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)

imap_obj = imapclient.IMAPClient(
    'imap.gmail.com', ssl=True, ssl_context=context)
imap_obj.login(config.my_email, config.my_password)
imap_obj.select_folder('INBOX', readonly=True)
uids = imap_obj.search(['BODY', 'unsubscribe'])
n = len(uids)

for i, uid in enumerate(uids, 1):
    print(f'進捗状況 {i}/{n}...')
    raw_messaes = imap_obj.fetch([uid], ['BODY[]'])
    message = pyzmail.PyzMessage.factory(raw_messaes[uid][b'BODY[]'])
    html_part = message.html_part
    if html_part is None:
        continue
    html = html_part.get_payload().decode(html_part.charset)
    soup = bs4.BeautifulSoup(html, features='lxml')
    links = soup.select('a')
    for link in links:
        if 'unsubscribe' in link.getText():
            webbrowser.open(link.attrs['href'])

0 コメント:

コメントを投稿