SOAP::Lite XMLRPC::Lite で XMLサービス利用する

SOAP::Lite XMLRPC::Lite の利用

今使っている WordPress というブログシステムの多くは
インターネット越しで記事を投稿したり 過去の記事を閲覧するためのインターフェースを備えています
リモート呼び出し
XML-RPC XMLにより 遠隔のWebサービスのサービスを呼び出す
SOAP (Simple Object Access Protocol) XML-RPCをより高度にしたもの
いずれにしても 既存の http:// プロトコルを利用して遠隔サーバの機能を呼び出します
通常 http:// プロトコルは Webブラウザをクライアントプログラムとして情報サービスをやりとりしますが
http:// を通じて XML文書を交換する規定とすることで Webブラウザ以外のクライアントで
リモートサービスを展開することができます

Perl SOAP::Lite の利用

Perlで XMLサービスを利用するモジュールがあります
CPANから SOAP::Lite の使い勝手をレポートします
SOAP::Lite がインストール済の状態を前提として 本 WordPressページ のXML-RPCメソッドを利用してみます
> perl -MXMLRPC::Lite -e '$obj = new XMLRPC::Lite ( "uri" =p://www.poared.com/wordpress", "proxy" => "http://www.poared.com/wordpress/xmlrpc.php" ); print $obj->call ( "demo.sayHello" )->result;'
Hello!>
この Hello! と返ってきている部分が WordPressのサービスからの応答メッセージです
WordPress には 「demo.sayHello」という XML-RPCが実装されていて
リモートからのリクエストに応答できる仕組みとなっています
ちなみに XMLRPC::Lite としている部分を SOAP::Lite と書き換えるとうまく動きません
10年近い時間をかけて発達してきた http:// プロトコルを利用しつつ
Webサービス以外の利用の可能性があります

JISテキスト変換 Windows固有文字の変換

文字変換ネタです

仕事柄メールで飛んできた文字列を Perlで処理させることが多いですが
(株) や ローマ数字 や ○で囲まれた数字 など
Windows固有文字 が入っているため UNIX上で文字化けして処理できない
ケースが多く悩みのタネです

そこで 以下のようなツールを作成しました

JIS固有文字を変換するフィルタ

目的

JISコードテキストの中の Windows固有文字列 ( (株) や ローマ数字 や ○で囲まれた数字 など ) を代替文字列に置換する

配布物

jisfilter.zip (5KB) アーカイブの中身は以下の通りです
  • jisfilter.c (10KB) C言語版ソースコード
  • jisfilter.pl (6KB) Perl版スクリプト
  • testjis.txt (1KB) サンプルテキスト(JIS)
  • testjis_out.txt (1KB) サンプル変換後テキスト

配布物の利用方法

(C言語版の場合)

ソースコードを以下のようにコンパイルします gcc コンパイラ環境を想定しています
gcc -o jisfilter jisfilter.c
動作確認として以下のようにプログラムを実行し サンプルテキストを変換させます
./jisfilter < testjis.txt > testjis_out.txt
作成された testjis_out.txt を JISコード系が扱えるテキストエディッタで開いて 変換されているか確認します

(Perl版の場合)

動作確認として Perlスクリプトを以下のように実行し サンプルテキストを変換させます
perl jisfilter.pl < testjis.txt > testjis_out.txt
作成された testjis_out.txt を JISコード系が扱えるテキストエディッタで開いて 変換されているか確認します

参考 JISコードでの漢字の扱い

  • ここで扱っている JIS とは ISO-2022-JP を指します
  • コードは基本 7bit でありインターネットでのメッセージ送信に適しています
  • 半角カタカナを扱える 8bit 拡張定義もあります
  • コード体系に 複数セット 用意されており 0x1b(ESC) から始まるメッセージで必要な都度切り替えます
  • 0x1b(ESC) 0x28(() 0x42(B) のメッセージで ASCIIセット(半角英数字)に切り替わります
  • 0x1b(ESC) 0x28(() 0x4a(J) のメッセージで ラテン文字セット(JIS X 0201)に切り替わります
  • 0x1b(ESC) 0x28(() 0x49(I) のメッセージで カタカナセット(JIS X 0201)に切り替わります
  • 0x1b(ESC) 0x24($) 0x42(B) のメッセージで 漢字セット(JIS X 0208)に切り替わります
  • 0x1b(ESC) 0x24($) 0x28(() 0x44(D) のメッセージで 拡張セット(拡張版 ISO-2022-JP-1)に切り替わります
  • 開始時は ASCIIセット となっており テキストの終端も ASCIIセット に戻す必要があります
  • ASCIIセットのみ 1文字=1byte その他のセットは基本 1文字=2byte です
実際の JISテキスト とそのバイナリデータ を比較してみます
test            74 65 73 74 0d0a
テスト          1b 24 42 2546 2539 2548 1b 28 42 0d0a
2007/08/12      32 30 30 37 2f 30 38 2f 31 32 0d0a
コードの青い部分は改行コードです 赤い部分がコードセットを変換している部分です