Posted on 2008-05-12 22:04
ZelluX 閱讀(1275)
評論(0) 編輯 收藏 所屬分類:
Scripting
VIM Calender是個很好用的寫日記的插件(
http://www.vim.org/scripts/script.php?script_id=52)
水木上的rmrf寫了一個同步VIM Calender和Google Calender的腳本(
http://code.google.com/p/diaryvgc/downloads/list)
想到blogger.com支持通過發送郵件發布日志,于是我也寫了個把VIM Calender中的日記發布到blogger.com的腳本。
這個腳本把發布情況記錄在diary/poster.log中,以后每次執行只會發布最新的日志,同時考慮到當天的日記可能會被修改(blogger.com似乎不支持通過email修改日志),所以當天的日記不會被發布。
使用的時候修改開頭幾行的配置信息即可
#!/usr/bin/python

#?A?script?for?posting?diaries?created?by?VIM?Calender?to?blogger.com
#?Author:?Wang?Yuanxuan?<zellux@gmail.com>

import?smtplib,?os,?re,?datetime
from?email.mime.text?import?MIMEText

fromaddr?=?xxxxx@fudan.edu.cn'
toaddr?=?xxxx.xxxx@blogger.com'
smtpserver?=?'mail.fudan.edu.cn'
diarydir?=?'/home/user_name/diary'
username?=?'xxxxxx'
password?=?'xxxxxx'
logpath?=?diarydir?+?'/poster.log'

def?PostMail(title,?content):
????msg?=?MIMEText(content?+?'\r\n#end\r\n')
????msg['Subject']?=?title
????msg['From']?=?fromaddr
????msg['To']?=?toaddr

????server?=?smtplib.SMTP(smtpserver)
????server.login(username,?password)
????#?server.set_debuglevel(1)
????server.sendmail(fromaddr,?[toaddr],?msg.as_string())
????server.quit()

#?Load?log?file.?Create?a?new?one?if?not?exist.
posted?=?[]
if?os.path.isfile(logpath):
????temp?=?open(logpath,?'r')
????posted?=?[line[:-1]?for?line?in?temp.readlines()]
????log?=?open(logpath,?'a')
else:
????print?"A?new?poster?log?has?been?created?at?"?+?logpath
????log?=?open(logpath,?'w')

pattern?=?r'(\d{4})/(\d{1,2})/(\d{1,2}).cal$'
scanner?=?re.compile(pattern)

for?(top,?dirname,?filenames)?in?os.walk(diarydir):
????for?filename?in?filenames:
????????fullpath?=?os.path.join(top,?filename)
????????if?scanner.search(fullpath):
????????????(year,?month,?day)?=?scanner.search(fullpath).groups()
????????????filedate?=?datetime.date(int(year),?int(month),?int(day))
????????????title?=?filedate.isoformat()
????????????if?filedate?==?datetime.date.today():
????????????????continue
????????????if?fullpath?not?in?posted:
????????????????log.write(fullpath?+?'\n')
????????????????text?=?open(fullpath).read()
????????????????PostMail(title,?text)
????????????????print?'The?diary?'?+?title?+?'?has?been?posted'

log.close()
