MovableTypeに投稿
30分プログラム、その58。PythonでMovableTypeに投稿してみよう。
# -*- coding: utf-8 -*- import xmlrpclib class MovableType: def __init__(self,id,user,passwd): self.id = id self.user = user self.passwd = passwd self.server = xmlrpclib.Server('http://example.com/mt-xmlrpc.cgi') def categoryID(self,name): category=self.server.mt.getCategoryList(self.id,self.user,self.passwd) for x in category: if x['categoryName'] == '日記': return x['categoryId'] def post(self,title,content,cat): print "Post" id = self.server.metaWeblog.newPost(self.id,self.user,self.passwd,{ 'title':title, 'description':content, 'dateCreated':'' },1) print "SetCategory" self.server.mt.setPostCategories(id,self.user,self.passwd,[{ 'categoryId':cat, 'isPrimary':True }]) print "Publish" print self.server.mt.publishPost(id,self.user,self.passwd) if __name__ == '__main__': mt = MovableType(4,'username','password') mt.post('test','てすと投稿',mt.categoryID('日記'));
これと昨日(id:mzp:20070616:twitter)を組合せると、「今日のTwitter」を自動投稿できるようになる。
まずは、Twitterからの取得をクラス化。
import rssparser import time import email.Utils import re class Twitter: def __init__(self,url): self.url=url def entity(self,s): p = re.compile(r'&#(\d+);') match = p.search(s) while match: s = s.replace(match.group(0), unicode('\\u%04x' % eval(match.group(1)), 'unicode-escape')) match = p.search(s) return s def get(self): items = rssparser.parse(self.url)['items'] items.reverse() description = '' today = time.localtime(time.time())[0:3] for item in items: t = time.localtime( time.mktime(email.Utils.parsedate(item['date'])) + 9 * 60 * 60) if t[0:3] == today: description += "%s %s" % (time.strftime('%H:%M',t), self.entity(item['description'])) + "\n" return description if __name__ == '__main__': twitter = Twitter('http://twitter.com/statuses/user_timeline/3991031.rss') print twitter.get()
そして、上の2つをつなぎあわせる。
# -*- coding: utf-8 -*- import mt import twitter tw = twitter.Twitter('http://twitter.com/statuses/user_timeline/3991031.rss') content = tw.get() print content m = mt.MovableType(4,'username','passwd') id = m.categoryID('日記') print "categoryID:%s" % id m.post('今日のTwitter',content,id)
- 4分35秒オーバー。今日から時間測定プログラムを導入しますた