MovableTypeに投稿

30分プログラム、その58。PythonMovableTypeに投稿してみよう。

# -*- 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秒オーバー。今日から時間測定プログラムを導入しますた