Home > CGI > XML-RPC for Wiki

XML-RPC for Wiki

API(version2)

 APIの仕様についてはWiki RPC Interface2を参照してください。他のFSWiki用プラグインについてはこちらからどうぞ。

 さらにmetaWeblog.newPostなどblog用APIを実装したblog4fswikiもあります。

FreeStyle Wiki用のモジュール

 PerlでSOAP::Lite(XMLRPC::Lite)を使ってみたかったのです。version1については公式のプラグイン投稿にも投げてあります(bookmarkletはここにある方が最新)。

wiki_xmlrpc-204.tar.gz

wikitest2.html 選択したテキストと現在のページURLをFSWikiに書き込むbookmarklet。上記モジュール付属のwikigate.cgiが必要です。

Source

fswiki_xmlrpc2(CAPNモジュールとbookmarkletは含めていません)


version2のマニュアル

ファイル構成

主要ファイル

wiki_xmlrpc.cgi
サーバCGI。wiki.cgiと同じディレクトリに設置します。
lib/WikiAPI.pm
APIスーパークラス。
lib/WikiAPI/FSWiki.pm
FSWiki用モジュール(WikiAPI::FSWiki::Adapter)を呼び出すためのAPIサブクラス
lib/WikiAPI/FSWiki/Adapter.pm
WikiAPI.pmとWiki.pmを取り持つアダプタみたいなもの
lib/WikiAPI/FSWiki/LinkParser.pm
linkList(後述)用のパーサ
lib/WikiAPI/FSWiki/Introspection.pm
イントロスペクション用ファイル

CPANモジュール群

を利用しています。Perl5.00503、5.8、5.8 with mod_perl(Apache::Registry)で動作確認しています。lib以下にいれます。

おまけ

wikigate.cgi
Adapter.pmを利用したFreeStyle Wiki用簡易インターフェース(XML-RPCとは関係ありません)。wiki.cgiと同じディレクトリに置きます。

設置方法

 ファイルを展開して、稼働中のwikiディレクトリに一式入れます。標準で3.5.3以降対応ですが、一行書き直すだけで3.5.2でも動作するでしょう。

WikiAPI::FSWikiで使用可能API

 FSWiki用の引数もありますが、基本的にはhttp://www.hyuki.com/yukiwiki/wiki.cgi?WikiRPCを参考にするとよいでしょう。

 下記以外にも一応インターフェースはありますが、FSWikiにはページのバージョンという概念がないと思うので、実装していません。また、ページのバージョンに関するデータは1を、ページの作者については空文字を返します。

array wiki.getRecentChanges( Date timestamp [,utf8 farmname] )

timestamp(UTC)以降変更されたページのリストを返します。WikiFarmに対応するため、第二引数(wikifarm名)をとれます。

戻り値:構造 { name, lastModified, author, version } の配列リファレンス(nameはutf8でエンコードされています。authorは常に空文字、versionは常に1)。

int wiki.getRPCVersionSupported()

戻り値:このAPIのバージョンを返します。

utf8 wiki.getPage( String pagename )

ページのソースを返します。ページにコロン':'が入っているとコロンより前部分がWikiFarmのパスになります。('farmname:pagename')

戻り値:ソーステキスト

utf8 wiki.getPageHTML( String pagename )

HTMLレンダリングされたページを返します。ページにコロン':'が入っているとコロンより前部分がWikiFarmのパスになります('farmname:pagename')。

戻り値:レンダリング済みテキスト

array wiki.getAllPages( [utf8 farmname] )

全ページのリストを返します。WikiFarmに対応するため第二引数にFarm名をとれます。

戻り値:配列リファレンス(ページ名はutf8でエンコードされています)。

struct wiki.getPageInfo( utf8 pagename )

ページ情報を返します。

戻り値:構造 { name, lastModified, author, version }(nameはutf8でエンコードされています。authorは常に空文字、versionは常に1)。

array wiki.listLinks( utf8 pagename )

与えられたページの全リンクを返します。

戻り値:構造 { page, type, href } の配列リファレンス(pageはリンク先の名前(utf8でエンコード)かURLです。typeはexternal(外部)かlocal(内部)hrefはリンク先のHREF)。

boolean wiki.putPage( utf8 pagename, utf8 content, struct attributes )

ページに内容を書き込みます。pagenameにコロン(:)を含めると前部分がWikiFarm名になります。pagenameはutf8でエンコードされている必要があります。現在の所、attributesで「下げ」指定ができます。{ minoredit => 0|1 }

また、attributesにid,passを設定することで、ログインユーザとして書き込むことができます。

戻り値:成功時1、それ以外は0

wikigate.cgi用のパラメータ

 FreeStyle Wikiを操作する簡易インターフェースです。WikiAPI::FSWiki::Adapterを利用するだけなので、XML-RPCとは直接関係ありません。

wikigate.cgi?method=addPage&page=Memo&sage=1&content=ほにゃらら

などとやりますと、Memoというページにタイムスタンプを更新することなくテキストを追加できます。で、これを利用してbookmarkletをつくったりとかしたら便利かなあと。一応IE用に一つテスト用ファイルが含まれています。

method
呼び出したい手続き名。APIと同じ名前を持ちますが、大文字小文字は関係有りません。また、addpageという値もとることができ、これはputpageと違い、既存のページに追加をします。自動で追加データの前に改行されます。
page
ページ名。ページ名に':'をつけることで、コロンの前の部分がWikiFarm名になります。
farm
WikiFarm名。このパラメータはrecentchanges、getallpagesに対してのみ有効です。
day
recentchangesにおいて指定する過去の日数。day=3なら3日前からの更新ページの一覧が表示されます。
sage
真値を設定することで、putpage、addpageにおけるタイムスタンプを更新しなくなります。
add
真値を設定することで、putpageの場合でも追加書き込みにする。
content
putpage、addpageで書き込むデータ。
id
ログインユーザしか書き込めない設定の場合にputPage、addPageで使用するユーザid。
pass
ログインユーザしか書き込めない設定の場合にputPage、addPage時で使用するパスワード。

注意

sub DESTROY{ # ↓この一行をコメントアウト
	# $_[0]->exit(); # before 3.5.2, this must be commented out
}

API(version1)

wiki_xmlrpc-101.tar.gz

Source

fswiki_xmlrpc1 version 1用(CAPNモジュールとbookmarkletは含めていません)

version1のマニュアル

ファイル構成

主要ファイル

wiki_xmlrpc.cgi
サーバCGI。wiki.cgiと同じディレクトリに設置します。
lib/WikiAPI.pm
API用モジュール。
lib/WikiAPI/WikiMod.pm
WikiAPI.pmとWiki.pmを取り持つアダプタみたいなもの
lib/WikiAPI/LinkParser.pm
linkList(後述)用のパーサ
lib/WikiAPI/Introspection.pm
イントロスペクション用ファイル

CPANモジュール群

を利用しています(SOAP:Liteを参照)。Perl5.00503、5.8、5.8 with mod_perl(Apache::Registry)で動作確認しています。lib以下にいれます。

おまけ

wikigate.cgi
WikiMod.pmを利用した簡易インターフェース(XML-RPCとは関係ありません)。wiki.cgiと同じディレクトリに置きます。
etc/wikitest.html
IE用bookmarklet。ブラウザ上で選択したテキストを直ちにFSWikiのページとして(追加)保存します。実験的なものでIEでしか動きません。wikigate.cgiを叩きます。→うまく動作しませんので、wikitest2.htmlをご利用下さい。
etc/xmlrpc_client.cgi
適当クライアントCGI。使う必要はありません。パラメータはwikigate.cgiに準じます。

設置方法

 ファイルを展開して、稼働中のwikiディレクトリに一式入れます。標準で3.5.3対応ですが、一行書き直すだけで3.5.2でも動作することを確認しています。

使用可能API

 下記以外にも一応インターフェースはありますが、FSWikiにはページのバージョンという概念がないと思うので、実装していません。また、ページのバージョンに関するデータは1を、ページの作者については空文字を返します。

array wiki.getRecentChanges( Date timestamp [,String farmname] )

timestamp(UTC)以降変更されたページのリストを返します。WikiFarmに対応するため、第二引数(wikifarm名)をとれます。

戻り値:構造 { name, lastModified, author, version } の配列リファレンス(nameはutf8でURLエンコードされています。authorは常に空文字、versionは常に1)。

int wiki.getRPCVersionSupported()

戻り値:このAPIのバージョンを返します。

base64 wiki.getPage( String pagename )

ページのソースを返します。ページにコロン':'が入っているとコロンより前部分がWikiFarmのパスになります。('farmname:pagename')

戻り値:ソーステキスト

base64 wiki.getPageHTML( String pagename )

HTMLレンダリングされたページを返します。ページにコロン':'が入っているとコロンより前部分がWikiFarmのパスになります('farmname:pagename')。

戻り値:レンダリング済みテキスト

array wiki.getAllPages( [String farmname] )

全ページのリストを返します。WikiFarmに対応するため第二引数にFarm名をとれます。

戻り値:配列リファレンス(ページ名はutf8でURLエンコードされています)。

struct wiki.getPageInfo( string pagename )

ページ情報を返します。

戻り値:構造 { name, lastModified, author, version }(nameはutf8でURLエンコードされています。authorは常に空文字、versionは常に1)。

array wiki.listLinks( string pagename )

与えられたページの全リンクを返します。

戻り値:構造 { page, type, href } の配列リファレンス(pageはリンク先の名前(utf8でURLエンコード)かURLです。typeはexternal(外部)かlocal(内部)hrefはリンク先のHREF)。

boolean wiki.putPage( String pagename, base64 content, struct attributes )

ページに内容を書き込みます。pagenameにコロン(:)を含めると前部分がWikiFarm名になります。pagenameはutf8でURLエンコードされている必要があります。現在の所、attributesで「下げ」指定ができます。{ minoredit => 0|1 }

また、attributesにid,passを設定することで、ログインユーザとして書き込むことができます。

戻り値:成功時1、それ以外は0

wikigate.cgi用のパラメータ

 主にWikiAPI::WikiModを利用するだけなので、XML-RPCとは関係ない代物です。

wikigate.cgi?method=addPage&page=Memo&sage=1&content=ほにゃらら

などとやりますと、Memoというページにタイムスタンプを更新することなくテキストを追加できます。で、これを利用してbookmarkletをつくったりとかしたら便利かなあと。一応IE用に一つテスト用ファイルが含まれています。

method
呼び出したい手続き名。APIと同じ名前を持ちますが、大文字小文字は関係有りません。また、addpageという値もとることができ、これはputpageと違い、既存のページに追加をします。自動で追加データの前に改行されます。
page
ページ名。ページ名に':'をつけることで、コロンの前の部分がWikiFarm名になります。
farm
WikiFarm名。このパラメータはrecentchanges、getallpagesに対してのみ有効です。
day
recentchangesにおいて指定する過去の日数。day=3なら3日前からの更新ページの一覧が表示されます。
sage
真値を設定することで、putpage、addpageにおけるタイムスタンプを更新しなくなります。
add
真値を設定することで、putpageの場合でも追加書き込みにする。
content
putpage、addpageで書き込むデータ。
id
ログインユーザしか書き込めない設定の場合にputPage、addPageで使用するユーザid。
pass
ログインユーザしか書き込めない設定の場合にputPage、addPage時で使用するパスワード。

注意

sub DESTROY{ # ↓この一行をコメントアウト
	# $_[0]->exit(); # before 3.5.2, this must be commented out
}

TODO


ページの先頭