![]() |
| ホリエモンメルマガ |
愛読者なので
昔から堀江さんの言動が好きで、メルマガの一読者でもある僕。
メルマガのバックナンバーが溜まってきたこともあり、とりあえずGmail上のメルマガをテキスト化しておくかということで、スクリプトを作ってみた。
「テキスト化する必要なくね?」って言われてしまいそうだけど(笑)
「テキスト化する必要なくね?」って言われてしまいそうだけど(笑)
テキスト化しておくといろいろ便利なんだよね。うろ覚えの過去トピックの検索とか。
Pythonでmac用
このブログの読者で、PythonユーザかつMac向けかつ堀江さんのメルマガをテキストアーカイブしたい人でmagmagでとってるっていう極限的にニッチな人向けだけど、Pythonの勉強のためもあって書いてみたので、共有します。
まぐまぐ以外で購読している人はいろいろ変える必要があるかもしれないけど、配信フォーマットがわからないので、なんとも言えない。
参考サイト: PythonでGmailに送信されたメールの内容と添付ファイルを取得する
まぐまぐ以外で購読している人はいろいろ変える必要があるかもしれないけど、配信フォーマットがわからないので、なんとも言えない。
参考サイト: 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 件のコメント:
コメントを投稿