読者です 読者をやめる 読者になる 読者になる

The jonki

呼ばれて飛び出てじょじょじょじょーんき

mailtter: Twitterの発言をBloggerに投稿する

Python Gmail

[2009・05・27 追記]ソース見てて恥ずかしくなったので修正しました。


Bloggerのメール投稿機能が便利そうだったので利用してみる。
投稿内容はTwitterの自分の発言。
言語はPython。ちゃんと勉強してないから、間違ってるかもw
そしてプログラムが汚いOTL

こんな感じで表示される。



・メインプログラム


#!/usr/bin/python
# -*- coding: utf-8 -*-

#@author: junki OHMURA
#@created: 2009/02/05

from mailtter import *

def main():
"""sinceパラメタの取得"""
gsd = getSinceDate()
userXmlUrl = gsd.sinceParm()
print userXmlUrl

"""xml読み込み"""
xml = urllib2.urlopen(userXmlUrl).read()
soup = BeautifulStoneSoup(xml)
cX = crawlXml(soup)

encoding = 'utf-8'
subject = '[jonki\'s twitter] ' #+ d.strftime("%Y-%m-%d %H:%M:%S")
body = cX.crawl()
from_addr = <送信元アドレス>
to_addr = <送信先アドレス>
login_addr =
passwd = <ログインパスワード>

#sendGmailクラスのインスタンス作成
sg = sendGmail(encoding, subject, body, from_addr,
to_addr, login_addr, passwd)
#送信
sg.sendMail()


main()


・mailtterのライブラリ

#!/usr/bin/python
# -*- coding: utf-8 -*-

#@author Junki OHMURA
#@date 2009/02/05

#日付関連のモジュール
from datetime import date, timedelta, datetime #datetimeモジュール
import urllib2

#xmlパースライブラリ
from BeautifulSoup import BeautifulStoneSoup


#gmailでメールを送るためのSMTPライブラリ
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

"""TwitterAPIのsinceパラメタの取得"""
class getSinceDate:
def __init__(self):
self.deco = ""
self.d = ""
self.day = ""
self.mth = ""
self.ytime = ""

#月、曜日などの単語の最初3文字だけ取ってくる
#例) February => Feb
def decoThree(self, string):
self.deco = string[0]+string[1]+string[2]
return self.deco

#例えば今日が2日ならば02日と表示されてしまう
#02→2に変換
def decoDay(self, day):
if (day[0] == "0"):
return day[1]
else:
return day

def sinceParm(self):
# today()メソッドで前日の日付・時刻のdatetime型データの変数を取得
self.d = datetime.today() - timedelta(days=3)

#曜日
self.date = self.decoThree(self.d.strftime("%A"))
#日にち
self.day = self.decoDay(self.d.strftime("%d"))
#月
self.mth = self.decoThree(self.d.strftime("%B"))
#年日時
self.ytime = self.d.strftime("%Y+%H%M%S")

return "http://twitter.com/statuses/user_timeline/jonki.xml?since="
+ self.date + self.day + self.mth + self.ytime

class crawlXml:
def __init__(self, soup):
self.soup = soup
self.mail_text = ""

def crawl(self):
for status in self.soup.findAll("status"): #statusタグの数だけループ
created_at = status.created_at.string #作成日を取得
created_at = created_at[:19] + created_at[25:] #少し削る
status_id = status.id.string #twitの作成日を取得
status_url = "" + created_at + ""
text = status.text.string #twit本文を取得
self.mail_text += status_url + <改行タグ> + text + <改行タグ×2>
return self.mail_text


class sendGmail:
def __init__(self, encoding, subject, body, from_addr,
to_addr, login_addr, passwd):
self.date = formatdate()
self.encoding = encoding
self.subject = subject + datetime.today().strftime("%A, %d %B %Y")
self.body = body.encode('utf-8')
self.from_addr = from_addr
self.to_addr = to_addr
self.login_addr = login_addr
self.passwd = passwd


def sendMail(self):
#テキスト形式 ('plain') ではなく、HTML形式 ('html') でないと、
実体参照がエスケープされてそのまま表示される
msg = MIMEText(self.body, 'html', self.encoding)
msg['Subject'] = Header(self.subject, self.encoding)
msg['From'] = self.from_addr
msg['To'] = self.to_addr
msg['Date'] = self.date

s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(self.login_addr, self.passwd)
s.sendmail(self.from_addr, self.to_addr, msg.as_string())
s.close()