9.05.2013

Gmailサーバ上のホリエモンメルマガをテキストバックアップするスクリプト

ホリエモンメルマガ
ホリエモンメルマガ


愛読者なので

昔から堀江さんの言動が好きで、メルマガの一読者でもある僕。
メルマガのバックナンバーが溜まってきたこともあり、とりあえずGmail上のメルマガをテキスト化しておくかということで、スクリプトを作ってみた。

「テキスト化する必要なくね?」って言われてしまいそうだけど(笑)
テキスト化しておくといろいろ便利なんだよね。うろ覚えの過去トピックの検索とか。


Pythonでmac用


このブログの読者で、PythonユーザかつMac向けかつ堀江さんのメルマガをテキストアーカイブしたい人でmagmagでとってるっていう極限的にニッチな人向けだけど、Pythonの勉強のためもあって書いてみたので、共有します。

まぐまぐ以外で購読している人はいろいろ変える必要があるかもしれないけど、配信フォーマットがわからないので、なんとも言えない。

参考サイト: PythonでGmailに送信されたメールの内容と添付ファイルを取得する


import imaplib,email,email.Header
import time
import cStringIO
import os
import sys


path = os.getcwd()
path = os.listdir(path)


class imap4mail(object):
    def __init__(self, data):
        self.files = {}
        #メッセージをパース
        msg = email.message_from_string(data)
        #タイトル取得
        self.title = self.decode(msg.get('Subject'))
        #送信者取得
        self.sender = self.decode(msg.get('From'))
        
        #添付ファイルを抽出
        for part in msg.walk():
             if part.get_content_maintype() == 'multipart':
                  continue
        #ファイル名を取得
        filename = part.get_filename()
        #ファイル名が取得できなければ本文
        if not filename:
             self.body = self.decode_body(part)
        #ファイル名が存在すれば添付ファイル
        else:
            tmpfile = cStringIO.StringIO()
            tmpfile.write(part.get_payload(decode=1))
            self.files[filename] = tmpfile

    def decode(self, dec_target):
        decodefrag = email.Header.decode_header(dec_target)
        title = ''
        for frag, enc in decodefrag:
            if enc:
                title += unicode(frag, enc)
            else:
                title += unicode(frag)
        return title

    def decode_body(self, part):
        body = ''
        charset = str(part.get_content_charset())
        if charset:
            body = unicode(part.get_payload(), charset)
        else:
            body = part.get_payload()
        return body

def analize_mail(mail):
    mail_title = mail.title
    mail_title = mail_title.encode('utf8')
    mail_title = mail_title.replace('/','of')
    if mail_title + '.txt' in path:
        print mail_title + 'がディレクトリに存在します'
    else:
        print mail_title + 'をファイルに書き出します'
        f = open(mail_title + '.txt','w')
        f.write(mail.body.encode('utf8'))
        f.close()

if __name__ == "__main__":
    host = 'imap.gmail.com'
    user = 'XXXXX@gmail.com'#Gmailのアカウント
    password = 'XXXXXX' #Gmailのパスワード
    mailbox = 'INBOX'
    #メールサーバ指定
    M = imaplib.IMAP4_SSL(host=host)
    #ログイン
    M.login(user, password)
    #メールボックス選択
    M.select(mailbox)
    typ, [data] = M.search(None,'(FROM "mag2 000XXXXXXX")')#送信者についてる番号
    for num in data.split():
        typ, data = M.fetch(num, '(RFC822)')
        mail = imap4mail(data[0][1])
        analize_mail(mail)
    M.close()
    M.logout()


一度しか走らせてないです

取得できて満足してしまい・・・
うまく動くと以下のような感じになります。
ホリエモンメルマガをテキストバックアップ
取得したメルマガ


変な動きをするところがあるかもしれないですが、そこはスーパーエンジニアの皆々様にお任せするとして。

言い訳というほどでもないけど、実はまだ作成中で、フォルダを自動作成して結合してアーカイブするのがいいか、amazonに自動送信してkindleファイル化するか、と今後の展開に頭を悩ませているところ。

コードの書き方も、きっともっと簡単になる部分があるんだろうな。
勉強ですな。

一応こんな感じでテキストファイル化されます。
ホリエモンメルマガをテキストアーカイブ
テキスト化した中身


Windowsだとうまく動かないはずなんで

また、別の機会にwindows用に書き換えた物を共有しようと思います。
需要があればpythonに明るくない人用にexe化もしてもいいかも。


0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...