概要
ruby で XML-RPC API を使って fc2 に記事をポストしてみました
記事の投稿からカテゴリの設定など記事の投稿に必要な最低限の流れを紹介したいと思います
環境
- macOS 10.13.2
- Ruby 2.4.1p111
- xmlrpc 0.3.0
ライブラリインストール
- bundle init
- vim Gemfile
gem "xmlrpc"
bundle install --path vendor
記事をポストする
metaWeblog.newPost
を使います
- vim post.rb
# coding: utf-8
require 'xmlrpc/client'
client = XMLRPC::Client.new2("http://blog.fc2.com/xmlrpc.php")
blog_id = '' # 空で OK
username = 'fc2_user@your.mail.local' # fc2 の場合 fc2 ID で登録したメールアドレスを指定します
password = 'password'
contents = {
'title' => 'test',
'description' => 'test post',
'mt_text_more' => 'more text'
}
publish = 1 # 1 は公開, 0 は非公開
begin
ret = client.call('metaWeblog.newPost', blog_id, username, password, contents, publish)
puts ret
rescue XMLRPC::FaultException => e
puts e
end
基本的な使い方は client.call
の第一引数に API を指定します
それに続いて API に必要なパラメータを指定します
metaWeblog.newPost
の場合 blog_id, username, password, contents, publish が必要になります
blog_id は fc2 の場合空で OK です
username はメールアドレスを指定します
password は fc2ID で登録したパスワードを指定します
contents はハッシュで指定します
title, description でタイトルと記事の本文を指定します
それ以外にも
- mt_allow_comments
- mt_allow_pings
- mt_convert_breaks
- mt_text_more
- mt_excerpt
- mt_keywords
- mt_tb_ping_urls
などが指定できます
試しに mt_text_more を指定したところ「続きを読む」の表示が追加されました
API の一覧を取得する
mt.supportedMethods
を使います
- vim methods.rb
# coding: utf-8
require 'xmlrpc/client'
client = XMLRPC::Client.new2("http://blog.fc2.com/xmlrpc.php")
blog_id = '' # 空で OK
username = 'fc2_user@your.mail.local' # fc2 の場合 fc2 ID で登録したメールアドレスを指定します
password = 'password'
begin
ret = client.call('mt.supportedMethods', blog_id, username, password)
puts ret
rescue XMLRPC::FaultException => e
puts e
end
以下の API 一覧が取得できました
- blogger.getUsersBlogs
- blogger.getUserInfo
- blogger.newPost
- blogger.editPost
- blogger.deletePost
- blogger.getRecentPosts
- metaWeblog.newPost
- metaWeblog.editPost
- metaWeblog.getPost
- metaWeblog.getRecentPosts
- metaWeblog.newMediaObject
- metaWeblog.getCategories
- mt.getRecentPostTitles
- mt.getCategoryList
- mt.getPostCategories
- mt.setPostCategories
- mt.supportedMethods
- mt.supportedTextFilters
- mt.getTrackbackPings
- mt.publishPost
- mt.setNextScheduledPost
どうやら blogger API もサポートしているようです
カテゴリを登録する
これは残念ながら API がないので諦めて管理画面から登録しましょう
カテゴリを取得する
mt.getCategoryList
を使います
- vim get_category.rb
# coding: utf-8
require 'xmlrpc/client'
client = XMLRPC::Client.new2("http://blog.fc2.com/xmlrpc.php")
blog_id = '' # 空で OK
username = 'fc2_user@your.mail.local' # fc2 の場合 fc2 ID で登録したメールアドレスを指定します
password = 'password'
begin
ret = client.call('mt.getCategoryList', blog_id, username, password)
puts ret
rescue XMLRPC::FaultException => e
puts e
end
先ほど手動で登録したカテゴリ (test) も取得できました
未分類には categoryId がないようです
{"categoryId"=>"0", "categoryName"=>"未分類"}
{"categoryId"=>"1", "categoryName"=>"test"}
カテゴリをセットする
新規で投稿した記事には未分類のカテゴリがセットされています
自分で作成したカテゴリをセットするには mt.setPostCategories
を使います
- vim set_category.rb
# coding: utf-8
require 'xmlrpc/client'
client = XMLRPC::Client.new2("http://blog.fc2.com/xmlrpc.php")
post_id = '1'
username = 'fc2_user@your.mail.local' # fc2 の場合 fc2 ID で登録したメールアドレスを指定します
password = 'password'
categories = [
{'categoryId' => '1', 'isPrimary' => true}, {'categoryId' => '0', 'isPrimary' => false} # 手動で登録したカテゴリの ID
]
begin
ret = client.call('mt.setPostCategories', post_id, username, password, categories)
puts ret
rescue XMLRPC::FaultException => e
puts e
end
categories 内で categoryId を指定することでセットすることができます
isPrimary は複数カテゴリを指定した場合、第一カテゴリにセットしたいカテゴリに対して true をセットします
ただ、fc2 の場合カテゴリを 1 つしかセットできないので、配列の一番初めにセットしたカテゴリが適用されます
最新の記事を取得する
- vim get_current_posts.rb
# coding: utf-8
require 'xmlrpc/client'
client = XMLRPC::Client.new2("http://blog.fc2.com/xmlrpc.php")
blog_id = '' # 空で OK
username = 'fc2_user@your.mail.local' # fc2 の場合 fc2 ID で登録したメールアドレスを指定します
password = 'password'
num = 10
begin
ret = client.call('mt.getRecentPostTitles', blog_id, username, password, num)
puts ret
rescue XMLRPC::FaultException => e
puts e
end
上記の場合 num = 10 で最新の 10 件を取得できます
num がどこまで指定可能なのか調べたところ 7,000 件以上投稿してから num = 10,000 で取得したところ問題なく全件取得できました
もしかすると無限に指定できるのかもしれません (もしくは Integer の最大値かもしれません)
最後に
XML-RPC API を使って fc2 ブログに記事をポストしてみました
記事を投稿する際の最低限の流れは紹介できたかなと思います
fc2 ブログの無料プランでは 1 日最大 10 件しか投稿できないので注意してください
テストであれば削除してから再度ポストすれば何回でもテストできます
今回は metaWeblog API と MovableType API を使って記事を投稿してみましたが一部 blogger API もサポートしているようなのでそれを使って良いと思います
0 件のコメント:
コメントを投稿