
XmlRpc
FrontPage > XmlRpc
○XML-RPCについて
関連:PerlTips Perl備忘録
■ MT4i XML-RPC GateWay?(仮) 開発中らしい
http://www.hazama.nu/t2o2/archives/000957.html
--
MT4iは、あくまでもローカルサーバー上にあるDBを閲覧、更新する
仕組みなのですが、これを「XML-RPC API」を利用するように
改造すれば、例えば、僕のサーバー上に設置したCGIで、
ネットワーク上に有る他人のblogのデータ−を取得し表示する、
なんてことができるわけです。
--
じゃ、じゃ、じゃ、じゃあ、
表示用のdisplayというサーバーに設置したCGIで、
投稿用のbuildというサーバーのデータを取得して表示する、
なんて事もできちゃうわけですか。
■XML-RPC 仕様書
http://lowlife.jp/yasusii/stories/9.html
大元。
■Movable Type で使える XML-RPC API
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html
必読。
Movable Typeで使えるXML-RPC APIの仕様が丁寧に
解説されています。
■はてなでXML-RPC
http://joyful.main.jp/?%A4%CF%A4%C6%A4%CA%A4%C7XML-RPC
これをベースに2ch-blog用XML-RPCサーバーを実装しようと
思っています。
はてなに投稿するときの操作
(ログイン、クッキー保存、書きこみ)をエミュレーションする
関数を作って、それを標準の関数名にしてXML-RPCのサーバを
立てる、といった感じ。
■mt-check infoseek isweb 無料
http://obsidian.s53.xrea.com/archives/000098.html
mt-check.cgiというのはMovable Typeに添付されているCGIで、
このCGIを入れたサーバーにMovable Typeを動かすのに必要な
モジュール等が入っているかを表示してくれます。
このCGIをisweb無料版で実行した結果です。
読むと分かりますが、isweb無料版ではモジュールが
ぜんぜん足りません。
■サーバーアナライザー Ver 1.1
http://www.futomi.com/library/servana.html
プロバイダーのサーバーに搭載されているPerlモジュールの一覧が
取得できます。
上記よりさらに詳細な情報が解ります。
MTに限らず、あるサーバであるモジュールが使えるかを確認する時に
おすすめ。
■iswebベーシック機能詳細 Perl
http://isweb.www.infoseek.co.jp/Icontb?pg=iwb_spec.html#01
infoseekの公式情報。isweb有料版でサポートされるモジュールの
一覧があります。
関連:isweb有料版がサポートするモジュール
http://artifact-jp.com/mt/archives/200307/infoseekmt.html
ARTIFACTによる上記記事の解説です。
■Jcode.pm インストール手順
http://rebecca.ac/milano/mt/readme/jcode.html
Jcode.pmがインストールされていないプロバイダーで、
管理者にJcode.pmを入れてもらえなかった場合に
Jcode.pmを使う方法。
これと「はてなでXML-RPC」に書いてあった
--
my($LIBDIR);
BEGIN {
if ($0 =~ m!(.*[/\\])!) {
$LIBDIR = $1;
} else {
$LIBDIR = './';
}
unshift @INC, $LIBDIR . 'mt/extlib';
}
--
を使えば、任意のPerl CGIでインストールできないモジュールを
使用できそう。
■Movable Typeインストール記
http://www.homa.ne.jp/~homa/mt/archives/000005.html
足りないモジュールのインストールについて。
--
root権限の無い人は、みらのさんの説明や本家サイトの
インストールガイドにあるように、extlibディレクトリの中に
モジュールを入れてあげると良いでしょう。
--
■glucose
http://glucose.jp/
インストールはできた。
テストblogの登録もOK。テスト投稿も成功した。
じゃあなんでhatena-xmlrpc.cgiは動かない?
■HTTPリクエスト/レスポンスのキャプチャ
http://kinshachi.ddo.jp/kurage/html/MT/comp/archives/000316.html
HTTPリクエストが返ってこない。
他のキャプチャリングアプリじゃないとだめみたい。
■RE:Jcode.pmの使い方を教えて下さい
http://www.docan.co.jp/~websemi/wsemi07.html
ここにあったサンプルプログラムにJcode.pmのパスを追加したら
Jcode.pmのサンプルはちゃんと動いた。
次はSOAP::Liteモジュールの動作確認だ。
■XML-RPC with SOAP::Lite
http://www.semblog.org/msano/archives/000166.html
SOAP::Liteを使ったサーバー&クライアントのサンプル。
非常に明快なよいサンプル。
作ってみたんだけど、プログラムが動かない。
クライアントのメッセージが
410 Lehgth Required
となっていたので通信成功して引数が不正なのかと思ったが、
サーバーからサーバーCGIを削除しても同じメッセージが返ってきた。
つまり通信自体ができていないのだ。うーむ。
■Weblogs.Com Ping の Perl による実装
http://naoya.dyndns.org/~naoya/mt/archives/000423.html
たぶんこれが最も裸に近い XMLRPC::Transport::HTTP の
テストプログラム。
Perlモジュールの動作テストにもってこいなうえ、XML-RPCの基礎も
習得できてしまうというすぐれもの。
XMLRPC::Transport::HTTP
--
XMLRPC::Transport::HTTP は SOAP::Lite ディストリビューションに含まれるので、SOAP::Lite をインストールすれば一緒に入ってきます。
--
SOAP::LiteもXMLRPC::Transport::HTTPも
iswebには入っていないのでした。
■実験 isweb無料版とisweb有料版の外部リンクの扱い。
http://chablo.g.hatena.ne.jp/wushi/
isweb無料版は外部リンクを受け付けないから、トラックバックpingも
XML-RPCリクエストも受け付けないんじゃないか?と思った。
iswebベーシック(有料版)でMTでトラックバックを
受けている人を発見。
どうやら有料版だと外部リンクもトラックバックping受信もOKらしい。
いずれにしてもisweb無料版の目はなくなった。
■XREA
多くの紹介ページで無料レンタルサーバーに属しているが、
無料で利用できるのは1週間で、それ以降は有料の広告解除サービスに
登録しないと利用できない。
正真正銘の無料サービスの受付もたまに行うらしい。
サーバーにアップしたCGIをデバッグモードで動かせたり、
最初からJcodeやSOAP::Liteモジュールが揃っていたりと
レンタルサーバーとしてのスペックは高い。
今回使用したレンタルサーバー(isweb無料版、AAA!cafe、XREA)
の中で唯一XML-RPCサーバーが動作した
(返り値がエラーのものもあったけど)。
■基本的な動き
UAで原稿編集ページを呼び出す
→もしログインが蹴られたら、ユーザー名とパスワードを与えて
ログインのCGIをキックし、再度原稿編集ページを呼び出す
→原稿編集ページから、投稿に必要なフォーム項目を
ハッシュに読み込む
→XML-RPCクライアントからもらった変数を適宜フォーム項目に代入
→フォーム項目を使って投稿
→投稿後の画面、あるいはどこか別のURLから最新記事IDを取得
■Webサーバー無しでXML-RPCサーバーCGIの動作をテストする
http://member.nifty.ne.jp/hippo2000/perltips/XMLRPC/Lite.htm
ここに書いてあるようにCGIサーバプロセス生成の部分を
デーモンプロセス生成に書き換えるだけでOK。
デーモンプロセスにはURLが存在しないため、
IBMのドキュメントにあるように仮のURLを決める必要がある。
(ホストとポートが合っていれば任意のURLでアクセスできてしまう)
■LWP::UserAgent?オブジェクトでリダイレクト先を取得する
GET,HEADの場合は自動的に取得してくれるそうです。
POSTの場合にうまくリダイレクトさせる方法
http://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2fLWP#i7
ただ、meta http-equivタブを解釈して読みに行くという話もあり。
http://altba.com/bakera/hatomaru.aspx/ebi/topic/349
■XMLRPC::Lite と XML::Parser についてのメモ (msanolog)
http://www.semblog.org/msano/archives/000209.html
XMLRPC::Lite(の中で呼んでいるXML::Parser)を使うと
文字コードがUTF-8に強制変換される、というお話。
クライアントがXML-RPCリクエストを作る時の話か、
それともサーバーがXML-RPCリクエストを受け取った後の話かは
書かれていません。
XML-RPC 仕様書(日本語訳)を見た限りでは、Stringの文字コードに
関しては特に規定がないようです。
ということは、こうさぎから2LXRGWに送る文字コードはUTF-8で
大丈夫ですね。
■Perlモジュール/インストール(CPAN)
- ActivePerl?+CPANによるモジュールインストール方法。
http://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2f%a5%a4%a5%f3%a5%b9%a5%c8%a1%bc%a5%eb%28CPAN%29
ActivePerl?でモジュールをインストールする方法。
CPANとゆうのはPerlの標準モジュールが集まるところらしいです。
■Perlでインストールされているモジュールの一覧を確認する方法
http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%A4%CE%B3%CE%C7%A7
PerlにXML-RPC関係のモジュールをインストールするときのTips。
find `perl -e 'print join(" ", @INC)'` -type f -name "*.pm" > mod.txt
これで希望するモジュール名がない場合はppmで落とす。
■PPMの使い方
google:perl http プロキシ
Perlモジュールをコマンドひとつでネットワークからダウンロード
して、インストールまでできます。
PPMコマンド。モジュールを探してくる必要がありません。
これ非常に簡単。
■とりあえずクライアントを動かしてみる
IBMのPerlによるXML-RPC入門を参考に、とにかくXML-RPCでサーバの関数を呼び出すスクリプトを作ってみる。
IBMのサンプルコードだとプロキシ越えの呼び出しができなかったので、コードからプロキシ設定を推測して追加。
サーバは500を返してきたが、とにかく接続には成功した。
おそるべし、Perlモジュールの可読性。
続きは帰ってから。
■Perl での XML-RPC の使い方
IBMのページと同じくFrontier::RPCを使った実装方法が
解説されています。
■サンプルプログラムが動いたよ
1.ActivePerl? 5.8.3 をインストール
http://www.activestate.com/Products/Download/Register.plex?id=ActivePerl?&_x=1
からダウンロードできます。
MSI版をダウンロードしてインストールします。
2.ppm install Frontier::RPC で
Frontier::RPCモジュールをインストール
ActivePerl?をインストールすると、
ppmというコマンドラインツールがインストールされます。
これはLinuxのrpmコマンドのようなもので、
モジュール名を引数に与えるだけでモジュールを探してきて
インストールしてくれます。
http://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2f%a5%a4%a5%f3%a5%b9%a5%c8%a1%bc%a5%eb%28PPM%29
ppm install Frontier::RPC
これだけでOK。
※プロキシ経由でアクセスしている人は、先に
set HTTP_PROXY=プロキシサーバのホスト:ポート
を指定してください。
3.sum-cli.plを作成
http://www-6.ibm.com/jp/developerworks/webservices/010601/j_ws-xpc1.html
IBMのサイトのサンプルコードを参考に、
ホストをlocalhost:9999に、URLを
http://localhost:9999/RPC2
にした
サンプルコードはこちら
4.sum-srv.plを作成
IBMのサンプルコードを参考に、
関数への参照をXML-RPCを参考に追加。
サンプルコードはこちら。
5.sum-srv.plをコマンドラインから実行
サーバーが待機状態になる。
6.sum-cli.plをコマンドラインから実行
実行結果が返ってくる
ものすごく簡単です。
サーバー・クライアント型プログラムがここまで簡単に
作れるとは。衝撃でした。
インストールから実行まで2時間でできます。
トイプログラムではありますが、Windows98でも何の問題もなく
動きます。
便宜上http://ではじまるURLが振られていますが、
Webサーバプログラムすら要らないのです。
すごいよ。XML-RPCすごい。
■こうさぎに2ch-blogを更新してもらうためのロードマップ
●第1段階
XML-RPC勉強の続き。
bloggerがXML-RPCに対応しているらしいので、
コマンドラインから投稿するクライアントを作って
bloggerに投稿してみる。
●第2段階
レンタルサーバー上で自作のXML-RPCプログラムを動かす方法を
考える。
レンタルサーバーだとコマンドラインからサーバープログラムを
動かす事ができないから、CGIでキックするとか小技が必要に
なると思う。
sumがレンタルサーバ上で動くようになれば十分だろう。
●第3段階
この辺まで来て(いやまだ途中段階があるかも知れないが)、
ようやく2ch-blogへの実装を考えられると思う。
たぶん2logへの実装方法は以下のいずれかになる。
(1)独自サーバーを立てて、2logへの投稿をエミュレートする
関数を作る
(2)PHPでXML-RPCサーバを作って、要求が来たら
2ch-blogの内部関数を呼ぶ
(2)だと2logの内部を大分知っていなければならないので、
たぶん(1)での実装になると思う。
(1)ができるとXML-RPC経由でなくても、代理投稿サーバーとして
人相手にも使える気がする。
■こうさぎが使用するXML-RPC API
こうさぎによる記事投稿について2
http://underdone.visithp.jp/mt/archives/000089.html
metaWeblog.newPostを使用しているそうです。
■実践
●第1段階
iswebにMovableTypeをインストールしようとしたが、無料版の
iswebではDBが非対応で使えなかった。
MovableTypeをインストールするには有料版のiswebベーシックに
加入する必要があるらしい。
iswebへの導入は断念してTypePad?試用版を使う事にする。
■Perlのパッケージ、モジュール、ライブラリという概念
Perl 5 モジュール用語集 ( larry用語ミニ教室)
http://www.att.or.jp/perl/module/mlstj1.html#1-1
たぶんここが一番解りやすい。
--
モジュールは、(.pmなしの)同名のクラスを(慣習として)提供するファイルです。
--
Chablo.pmというファイルの中にChabloというクラスを定義する。
■BEGIN、ENDという概念
BEGINはサブルーチンだが、sub BEGINと書かずにBEGINと書いてよい。
機能としては、ファイルが読み込まれた時に最初に実行される。
どこに書いていようが、最初に実行される。
ブロックというと解りにくいので、自動的に呼び出される
サブルーチンだと思えば良い。
あ、なんかコンストラクタっぽい。
■myという概念
my は my が書かれたブロックの中でその変数がローカルであることを
宣言する。
ブロック(package文とかサブルーチンとか)に囲まれていない所で
宣言した場合は、そのファイル内でローカルであることを宣言する。
これを宣言しておくと、他のサブルーチンやパッケージやファイルで
たまたま同じ名前の変数を使っていても、その変数の値が
参照されてしまう心配がなくなる。
■Perlのパッケージという概念
Perlのパッケージは名前空間の定義です。
同一のpackage文で区切った範囲が同一の名前空間として
扱われます。
ファイルAAAの中のXXXというサブルーチンとファイルBBBの中の
XXXというサブルーチンが衝突しないように、
それぞれの関数をパッケージで囲んでおくことができます。
・ファイルAAAの中でpackage LLL;の範囲にサブルーチンXXXを定義
・ファイルBBBの中でpackage MMM;の範囲にサブルーチンXXXを定義
としておくと、
require AAA.pl;
require BBB.pl;
と書けば、あとはどのファイルからでも
(ファイルAAAでもBBBでもその他のファイルであっても)
ファイルAAAの中のサブルーチンXXXは LLL::XXX という形式で、
ファイルBBBの中のサブルーチンXXXは MMM::XXX という形式で
呼出す事ができます。
http://perl.misty.ne.jp/19.html
パッケージ内のサブルーチンの呼び出し方は、Perl4とPerl5で
書式が異なります。
liblary::message1(); ← サブルーチンの呼び出し
&liblary'message2(); ← Perl4 での呼び出し方
■Perlのオブジェクト指向
http://www.pure.co.jp/~learner/program/Perl_oo.html
C++のバイブル「猫でも〜」並に使えそうなページ
■perlのリファレンスという概念
http://www.rfs.jp/sitebuilder/perl/02/10.html
\変数 とすると、その変数のリファレンスになる。
C言語で言うポインタに当たる。
$ref1 = \$X #スカラー変数Xのリファレンス
$ref2 = \@Y #配列変数Yのリファレンス
$ref3 = \%Z #ハッシュ変数Zのリファレンス
無名データへのリファレンスというのも作れる。
$ref2 = [ aaa, bbb, ccc ]; #無名配列へのリファレンス
$ref3 = { key1 => 123, key2 => 'val2' }; #無名ハッシュへのリファレンス
XML-RPCの関数は複数の値を返せない。
このため、配列やハッシュへのリファレンスを返すとPerlで扱える。
■Perlの=>演算子
http://www.kt.rim.or.jp/~kbk/perl5.005/perldata.html
--
key/value のペアの間に => 演算子を使うと読みやすくなりま す。=> 演算子は実質、見た目に判別しやすいカンマ演算子でありますが、その左側にあるオペランドが正当な識別子であるような barewordであるときに、それを文字列として解釈するようになっています。これは、ハッシュの初期化を格好よいものにします:
%map = (
red => 0x00f,
blue => 0x0f0,
green => 0xf00,
);
あるいは、レコードとして使うハッシュリファレンスを初期化するために使います:
$rec = {
witch => 'Mable the Merciless',
cat => 'Fluffy the Ferocious',
date => '10/31/1776',
};
複雑な関数のために call-by-named-parameter を使うためにも使えま す:
$field = $query->radio_group(
name => 'group_name',
values => ['eenie','meenie','minie'],
default => 'meenie',
linebreak => 'true',
labels => \%labels
);
--
関数の引数をハッシュにして、第○○引数という使い方じゃなくて
キーが○○の引数という方法で使う。
sub func { my %hash = @_ ; my $val1 = $hash{key1}; ...
といった感じ。
可変引数の関数が簡単に作れそうで良いね。
文法的には、=>はあくまでキー名と値を繋ぐコンマの代わり
(+キー名の文字列を''で囲む必要がない)。
■Perlのsort関数
http://flex.ee.uec.ac.jp/texi/perl/perl_54.html
■HTTP::Cookies の解説
http://member.nifty.ne.jp/hippo2000/perltips/HTTP/Cookies.html
■LWP::UserAgent? の解説
http://digit.que.ne.jp/work/index.cgi?Perl%A5%E2%A5%B8%A5%E5%A1%BC%A5%EB%2FLWP
■HTTP::Request::Common の解説
http://member.nifty.ne.jp/hippo2000/perltips/HTTP/Request/Common.html
関連資料:
■ PHP における XML-RPC 利用の準備
http://bloggers.ja.bz/sunouchi/archives/000161.php
経由:XML-RPC APIの覚え書き (miltithread)
http://www.multithread.jp/archives/000065.php
未読。PUBLOGはPHPでできているので使えるかも。
■Net::MovableType で XML-RPC API クライアントを楽々実装
http://naoya.dyndns.org/~naoya/mt/archives/000362.html
未読。Net::MovableTypeはまだ使ってみていません。
■IBM PerlでXML-RPCを始めようシリーズ
第1回 WebサービスにXML-RPCを使用する
http://www-6.ibm.com/jp/developerworks/webservices/010601/j_ws-xpc1.html
第2回 XML-RPC Middleware
http://www-6.ibm.com/jp/developerworks/webservices/010525/j_ws-xpc2.html
第3回 PerlでのSOAP::Liteの使用
http://www-6.ibm.com/jp/developerworks/webservices/010727/j_ws-xpc3.html
■Weblogs.com Ping Gateway to はてなアンテナ
Blog Developer's Cookbook
http://blog.bulknews.net/cookbook/blosxom/pings/ping_to_hatena.html
他で余り触れていないXMLRPC::Transport::HTTPからクライアントに
返す戻り値の解説がある。役に立ちそうな話。
■RFC: MetaWeblog? API
http://www.xmlrpc.com/metaWeblogApi