GreasemonkeyからXMLRPCプロトコルでブログに投稿する
XML-RPCを使ってWordpressやMovable Typeなどのブログに投稿するGreasemonkeyの書き方みたいなものです。
XMLRPCに対応したブログにどういうものがあるかは下のサイトによくまとまってます。(ちょっと古いですが)
BlogWrite – Atom API, XML-RPC : http://www.witha.jp/BlogWrite/bloglist.html
WordPressでしかテストしてませんがXMLRPCに対応してるブログなら動作すると思います。
今回は投稿機構みたいなものを書いただけなので、このスクリプトだけではあんまり意味はないと思います。
// ==UserScript==
// @name XMLRPC poster
// @namespace https://efcl.info/
// @include http://*
// ==/UserScript==
/* 投稿先のメタ情報 */
var metaBlog = {
"endPoint" : "ブログのエンドポイントURL",
"blogid" : "ブログのログインID",
"username" : "投稿者名", //空だとblogidを使用
"password" : "パスワード"
}
var XMLRPC = (function() { this.initialize.apply(this, arguments); });
XMLRPC.prototype = {
/*
* @arg
{
"endPoint": "endPoint",
"blogid" : "blogid",
"username" : "username",//空だとblogidを使用
"password" : "password"
}
*/
initialize : function(arg) { //引数は{}オブジェクト
this.endPoint = arg.endPoint;
this.blogid = arg.blogid;
this.username = (arg.username) ? arg.username : arg.blogid;
this.password = arg.password;
},
/* *
* @title 記事タイトル
* @desc 記事内容
* @tags タグ(カンマ区切り)
* @callback 更新成功時のコールバック関数
*/
post : function (title, desc, tags, callback){
var postURI = this.endPoint;
this.tags = (tags.length == 0) ? "" : tags.join(",");
var XMLbody = '<?xml version="1.0"?>n';
XMLbody += this.template(title, desc , this.tags);
console.info(XMLbody);
GM_xmlhttpRequest({
method : "POST",
headers : {
'Content-type' : 'text/xml'
},
url : postURI,
data : this.template(title, desc , tags),
onload : callback,
})
},
template : function (title, desc , tags){
var repuest = <methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param>
<value>
<string>{this.blogid}</string>
</value>
</param>
<param>
<value>
<string>{this.username}</string>
</value>
</param>
<param>
<value>
<string>{this.password}</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>title</name>
<value>
<string>{title}</string>
</value>
</member>
<member>
<name>description</name>
<value>
<string>{desc}</string>
</value>
</member>
<member>
<name>mt_keywords</name>
<value>
<string>{tags}</string>
</value>
</member>
<member>
<name>mt_allow_comments</name>
<value>
<boolean>1</boolean>
</value>
</member>
</struct>
</value>
</param>
<param>
<value>
<boolean>1</boolean>
</value>
</param>
</params>
</methodCall>;
return repuest.toString();
}
}
/* init メタ情報を使って投稿先決める*/
var t = new XMLRPC(metaBlog);
t.post(
"title",
"description",
["tag1","tag2"],
function(res){//callback
console.log(res);
}
);
ブログのエンドポイントURLは各ブログによってまちまちですが、Wordpressだと**http://WordPressトップ/xmlrpc.php
**になります。
E4Xを使ってポストするXMLを作成していますが、先頭にを入れるとなぜかエラーになったので、後で結合するようにしました。
後、XMLRPCを使ってWordpressにタグを指定できるのかを検索した時、下のようにできないというのが出てきましたが、mt_keywordsにタグを指定できます。
なので下の情報は古いか間違っています。
WordPressでXML-RPCを使った投稿で、記事にタグの指定はできるのでしょうか。できるようでしたらやり方を書いたページを教えてください。.. – 人力検索はてな
WordPressでは,で区切る事でタグを複数指定できます。
カテゴリーは面倒だったので放置してます(誰か…)
記載したソースは自由に使用してください。
gist: 224968 – GitHub
参考
肉少なめ | Item – Greasemonkeyでブログを更新 : http://niku.suku.name/item/591
MovableType で使える XML-RPC API : http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html#w01
XML-RPC経由の投稿 でタグを登録したい « Selflow WordPress : http://www.selflow.com/?p=6
追記 完全に自分用になってますがこれを使ったものを作ってみた。
NicoMylist poster with XML-RPC for Greasemonkey : http://userscripts.org/scripts/show/64569
ニコニコのマイリストからWordpressへポストするGreasemonkey。
上記では実現できてなかったカテゴリーの指定もできるようになりました。
WordPressのcategoriesは複数なので、XML-RPCからポストする場合もArrayで要素を作らないといけなかったようです。
XML部分だけを取り出したもの→gist: 398599 – GitHub
MetaWeblogAPI metaWeblog.newPost メソッド : http://msdn.microsoft.com/ja-jp/library/aa905673.aspx
juust ~ php oddities » metaWeblog.newPost posting to WordPress from Word : http://www.juust.org/index.php/metaweblog-newpost-posting-to-wordpress-from-word/2009/10/
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。