2013年01月15日

[Python]xmlrpclibを使ってブログにエントリ投稿する方法

今回はPythonからブログへ投稿する方法をご紹介する。
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.
posted by 寄り道退屈男 at 21:39 | Comment(0) | TrackBack(0) | Python
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/61485011
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック