XML-RPCを公開しているブログサービスなら以下のやり方でプログラムからブログ記事を投稿できる。cronなどに登録すれば自動投稿も可能になる。
こちらにXML-RPC対応のブログサービスの一覧がまとめてあった。
有名ドコロのブログサービス(FC2 や SeeSaa、Wordpress など)では大抵使えるようだ。
さて、早速サンプルコードである。
blogpost_test.py
#
# Blogクラス
#
class Blog(object):
xmlrpc = None
server = None
username = None
password = None
#
# コンストラクタ
#
def __init__(self, url, username, password):
import xmlrpclib
self.xmlrpclib = xmlrpclib
try:
self.server = xmlrpclib.ServerProxy(url)
except:
raise Exception( "Could not connect to %s" % url )
self.username = username
self.password = password
#
# エントリ投稿
#
def newPost(self, title, description, mt_text_more, blogid='hoge', publish=True):
content = {}
content['title'] = title
content['description'] = description
content['mt_text_more'] = mt_text_more
try:
entry_id = self.server.metaWeblog.newPost(blogid,
self.username,
self.password,
content,
publish)
return entry_id
except self.xmlrpclib.Fault, fault:
raise Exception(fault.faultString)
#
# ここからBlogクラスを使ったエントリ投稿処理
#
blog = Blog("http://yourblog/xmlrpc/", "userid", "password")
title = u'''エントリの題名'''
description = u'''
ここに本文を書く。
'''
mt_text_more = u'''
ここに追記を書く。
'''
# ブログにエントリを投稿
# 戻り値はエントリ番号
entry_id = blog.newPost(title, description, mt_text_more)
重要なのは以下の箇所である。
import xmlrpc
self.server = xmlrpclib.ServerProxy(url)
entry_id = server.metaWeblog.newPost(...)
非常にスッキリとした仕様であることが分かる。
newPostメソッドの4つ目の引数"content"には、 上記のような title (題名) や description (本文)、mt_text_more (追記) の他にも、categories (カテゴリ) や dateCreated (作成日)、mt_keywords (タグ)なんかも渡せるようだが、そこらへんはブログサービスによって仕様がまちまちなので注意する必要があり。
その他、参考にしたサイト。
Automatic blog publishing using Python and XML-RPC - Mathieu Leplatre
Mathieu! Thanks for your elegant code.