xmlrpc.incで日本語が通らない

2007/03/08 | XML
受注した開発でXMLを使用するのに、xmlrpc.incを使用している。ダウンロードは以下のサイト。
http://phpxmlrpc.sourceforge.net

今まではPEAR大好きで、基本はPEARのライブラリをあさっていたのだが、PHP5に完全対応ではないことがわかってからどうも使うのをためらってしまう(PHP4の時は使うけど)。
さて今まで開発を進めていて、何の問題もなく(いや、どうにかこうにか)動作して、ほぼうまくいくことを確認していたのだが、何の気なしに「試験」という言葉を入力したらつまづいた。「あれぇー」と思いつつ「test」と入力するとうまくいく。どうやら日本語の問題らしい。
開発に際して、ちょっと前に買った「PHP5 & XMLによるWebサービス構築」という本を見ていたら、スクリプト中になにやら1行おまじないが書いてある(この本買ったときは「イマイチ」と思ったけど、今XML-RPCやるにはわりと使えます)。

$xmlrpc_internalencoding=’UTF-8′;

「あらら、まぁ、当たり前だよね、日本語使うんだし」とそのおまじないをスクリプト中に書いてみたけど、しかしやっぱり日本語が通らない。仕方ないので最後の手段・・・ソースを読んでみた。
そうすると上記の記述方法が変わってしまっている!。こんなふうに。

$GLOBALS[‘xmlrpc_internalencoding’]

これでは動かないはずです。よってプログラムを以下のように書き換えました。

require(“./xmlrpc/xmlrpc.inc”);
$GLOBALS[‘xmlrpc_internalencoding’]=’UTF-8′;

おまじないの記述はファイル読み込み後にするのがミソ。こうしないとファイルに書かれてある記述を上書きしてくれません。

XML-RPCネタその2(ブログを操作)

2007/03/07 | XML

XML-RPCネタの2つ目。ブログを操作できる。
日記ツールとしてだけでなくCMSツールとしても活用されるブログだが、普通は専用の管理画面にログインしてそこから各種操作をするのが一般的だ。とある案件で「最近のブログツールはXML-RPCインターフェースを持っていて、別途対応のプログラムを用意することによって外部プログラムと連携できる」ということを知った。具体的には別途自前で用意したプログラムからXML-RPCメッセージを送信することによってブログに記事を書いたり、すでに書いてある記事を上書きしたり、といったことが可能だ。
いくつか規格が用意されていて、blogger、metaweblog、mtなどの規格がある。blogger企画をベースにして、その拡張がmetaweblog、ムーバブル対応拡張がmtといったところだろうか。

PHPでは、ping、RSS、XML-RPMの各機能を実現するための各種ライブラリがいくつか用意されている。PHP標準のライブラリであるPEARだけでも実現できるし、sourceforgeなどで開発されているxmlrpc.incやsimplepie.incなどを使っても簡単に実装できる。
しかし参考になるサイトが少ないのが現状だ。その理由は「XML-RPCの規格そのものが単純だから」ということらしいが、普通のウェブの世界でプログラムを作っていた人間からすれば、別世界に飛び込むようなもの。最初は何をどうしてよいのかわからないだろう。
先の投稿でも書いたけど、なるべくサンプルプログラムを掲載して、メモしていこうと思う。

XML-RPCネタその1(pingとRSS)

2007/03/06 | XML

最近XML-RPCを使う機会が増えてきた(単にそういう依頼がたまたまかさなったというだけかもしれないけれど)。いろいろ調べると、やっぱり世間でもそういう話題が多いみたいだ。うちが携わっている案件はこんな感じ。

■更新pingの受信とRSSの取得
ある顧客のサイトでCMS導入を希望されていらっしゃるところがあった。元受会社には「MTでしょ」といったのだが、どうも乗り気でない(理由は結局よくわからない)。あと予算も少ないような感じだったので、いっそのこと外部のブログを使えばいかが、という提案をしたらこちらは通った。
有料ブログのサービスは独自ドメインを使えるところもあるので、これをサブドメインで利用する。メインのドメインにはスクリプトを配置して、そのブログから更新pingを送信するよう設定し、pingを受信したら折り返しそのブログのRSSを取得する。取得したRSSから必要なデータ(記事のタイトルや記事への直リンク、投稿日時等)を蓄積し、メインのウェブサイトでその情報だけを表示する、というもの。
あとはブログのデザインさえ、メインのデザインとそろえておけば立派なCMSが出来上がり。

これはかなりいけてる提案だと思った。
プログラムとしては基本的にping受信とRSS取得の2つだけでよくて、あとは表示用のプログラムを少し。ソースコードは今のところまだ美しくないので、きれいに整形したら公開します。

RSS取得にSimplePie

2006/10/08 | XML

PearのXML_RSSでRSSを簡単に操作できることは前にも書いたけど、Pear版はatomには対応していない。atomは簡単にいうともともとのRSSに独自拡張を加えたような形式。フォーマットは少し複雑になるけれど、含まれる情報量が豊富なので便利な面も多々ある。
で、これを扱うためのライブラリでSimplePieというのを見つけた(ウェブはこちら)。使ってみたら超簡単。サンプルプログラムをみながら作ったけど、プログラムの記述を理解しなくてもサンプルを書き換えるだけで簡単に動作させることができた。以下が記述例だ。

<?php
 require_once(‘simplepie.inc’);
 $feed = new SimplePie($rss,$cacheDir);
 $feed->bypass_image_hotlink();
 $feed->strip_ads(true);
 $feed->init();
 $feed->handle_content_type();
 $topicArray=array();
 if($feed->data){
  while($feed->get_items() as $item){
   //
  }
 }
?>

関数名を見れば、いくつか省略できる行がありそうだ(面倒だからそんなことお構いなしで使用)。
便利、便利。

XMLを配列に読み込む

2006/07/03 | XML

最近巷でもPHPでXMLを取り扱うための書籍が多く出回っている。しかしどれもこれもPHP5だ。無論PHP5でもいいのだが、世の中でPHP5がどのくらい広まっているか、それは疑問だ。事実上PHPのバージョンは4が業界標準だ。PHP5であれば非常に簡単にXMLを取り扱えるようになっているような感じだが、自分自身もPHP4の環境でしか開発をしていないし、レンタルサーバの大部分がPHP4なのだから、そこから攻略していくしか手はないだろう。とはいっても文献がない・・・。
とある開発でどうしてもXMLを使う必要に迫られて以下のコードを書いた。これだけでXMLを配列に格納することができる。
<?php
$parser=xml_parser_create();
$data=file_get_contents("data.xml");
xml_parse_into_struct($parser,$data,$vals,$index);
xml_parser_free($parser);
?>
xml_parse_into_struct関数が名前の通り、XMLをパースして構造体に放り込んでくれる関数だ。上記関数の第3引数、第4引数にパース結果が格納される。ここで第3引数(ここでは$vals)に個々のデータが格納され、$indexにXMLの構造が格納される(いずれも配列として扱うことができる)。言い換えればこの2つの配列でXMLをあらわしていることになる。
具体的にどのような配列になるのかは簡単なXMLを上記コードで流し、$valsや$indexをprint_rして見比べれば想像がつくだろう。
自分の知識がもう少しアップしたら、今度はPearで処理することを考えてみることにする。

Read the rest of this entry »


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net