WordPress

2007/09/04 | SNS/CMS/ブログ

最近おすすめのブログツールはWordPress。
ここしばらくはSerendipityに入れ込んでいたけれど、老舗ブログツールも使いやすい(すこしだけ癖があるけれど)。WordPressは古株だけあって、さすがに情報も豊富だし、テンプレート(テーマ)もたくさん配布されている。いつもテーマをあさっているサイトはここ。

http://themes.wordpress.net/

WordPressはいろんなバージョンがあって、今使っているのは「WordPressMe」と呼ばれる日本向け配布パッケージ。前述のように少し癖がある点はしょうがないとして、さすがにこなれている。使いやすい。最近はウェブベースで設定ファイルを作成するものが多いが、WordPressMeはあらかじめ設定ファイルを作成しておいてアップロードするタイプ。面倒といえば面倒かもしれないけれど、設置するディレクトリのパーミッションとか気にしなくていいので個人的には非常に気に入っている。

実は別のバージョンで注目しているものがある。それはマルチドメイン版のWordPressMUだ。こちらは複数ドメインを運用できるすぐれものだ。ただし、いくつか不満点がある。

○設定ファイルはウェブベースで作成するので、設置場所のパーミッション変更できる必要あり
○example.comというドメインを使用して運用する場合は、インストール時に必ずexample.comとしてインストールしないといけない
○データベースのテーブルがドメインごとに作成される(らしい)
○mod_rewriteが必要

最初の制約があるので、例えばロリポップで設置できない。これは二つ目にも関係がある。www.example.comという名前でインストールできない(wwwはいらない、とメッセージが出る)ので、サブフォルダを作ってどうこう・・・ということもできないのだ。
多分、別フォルダで適当にインストールするか、うまくやって、ルートディレクトリに設置しなおせば何とかなるような気もしている。

三つ目のような構成はあまり美しくない。だってサブドメインを増やせば増やすほどテーブルが増えるのだから。それぞれのブログが別々のテーブルになるので、RSS出力などデータの一元管理が必要な場合にはそれなりの工夫をしなくては成らない。

四つ目は、まぁ最近なら多くのレンタルサーバで利用できるだろう。でも、本当はmod_rewriteでやるのではなく、MTのようにHTML書き出しタイプがほしいなぁ、と思っていたりする。いろいろ調べたのだが、MTのようなHTML書き出しタイプのブログツールは、PHPでは見つけられなかった。どこかにあるのだろうか。もし「これこれ」なんていう情報があれば、コメントヨロシクです。

XMLを配列に・・・これが最適解かも

2007/09/02 | XML

結局「PHP Classes」を探し回った。一時は自分で書いてみようかとも思った。xml_parse_into_structすればキーと値の関係がわかるわけで、これを使えば力技で配列に格納できるからだ。しかし、その苦労をしなくてすんだ。その力技をそのまま記述してくれているスクリプトに出会うことが出来た。

http://www.phpclasses.org/browse/package/2938.html

とりあえず、このスクリプトを、自分好みのコーディングスタイルでキレイに書き換えてみた(中身は同じだけど)。サンプルもファイル内に書いておいた。オリジナルのファイルがGPLだから、これもGPLということで。
暇があったら試してみてください。要コメントということでっ!(^-^)。

class.XmlToArray.lzh

楽天APIを少し・・・(XMLを配列に)

2007/09/01 | XML

久しぶりに楽天のAPIをさわってみた。
どうやら、とうとうコンテンツマッチな広告が出せるようになった模様。コンテンツマッチ広告自体は通常の(google等と同様に)JavaScriptを貼り付けるタイプなのだが、これがAPIとしても提供されている。具体的には、APIからRESTでリクエストを送る際に、マッチさせたいページのURLを引数として渡すというもの(ちょっと目からうろこ)。
ただページ内容との一致具合はイマイチ。どうやらページ内のh1タグ(もしくはタイトル?)のみ重要視しているような感じ。本文にはあまりマッチしていないのだ。もうちょっと改善の余地ありだ。少し期待。

RESTで返される形式はXMLとJSON、希望の形式を選ぶことが出来るが、ここではXMLで受け取ることにした。処理をする場合、まずXMLを配列に落とし込むわけだが、以前紹介したxml_parse_into_struct関数を使うのもいいのだが、今回は別の方法を試した。といっても自分でゴリゴリスクリプトを書くのがいやなので、「PHP Classes」をあさってみた。あっさり希望のクラスを見つけた。

adv_xml2array

DOMXMLが使える環境にないといけないのだが、これすごい簡単!。

$obj=new xml2array($rakutenXML);
$xmlArray=$obj->getResult();

XMLデータを引数に与えてオブジェクトを生成するだけ。後はgetResultメソッドで配列に取り出すだけ。面倒な処理を一切必要とせず、XMLを配列に格納してくれる。ファイル構成もいたってシンプル。ファイルは「class.xml2array.php」を1つだけでいい。逆に配列からXMLを生成する場合は「class.array2xml.php」。

きっとDOMXMLが使えなくても、こんなふうにお手軽にしてくれるクラスがあるはずと思うので、時間が出来たらまた探してみることにする。

Yahooブログ検索のping受信機能の不具合

2007/08/30 | XML

以前、お仕事でお受けした案件で出た問題が解決したのでメモ。
更新ping(weblogUpdates.ping)の送信プログラム作成の依頼をいただいたので、xmlrpc.incを使ってスクリプトを書いてみた。基本的にほぼ全てのpingサーバにおいて、ping送信時のレスポンスを正しく受け取ることができた。しかし日本のyahooだけは「No data received from server.」なぁんていうレスポンスを返してくる。理由がワカラナイ・・・。
納品時は「yahooだけだから」ということで原因探求を免除していただいたのだが、やはり気になる。少し時間をとって調査をしてみた。調査方法としてはfsockopenで最低限の内容で生通信して成功することを確認し、成功結果と失敗結果を比較する方法で調査をおこなった。
結論として、xmlのデータ構成がyahooには気に入らなかったらしい。

本来pingデータはxmlでpostされてくるわけだが、そのxmlを構成している要素は基本2個、拡張2個の合計4個の要素で構成される。もちろん拡張2個はなくても問題ない(基本の2個を押さえていればいいはず)。4つの要素はそれぞれ以下のような感じ。
 ○サイト名
 ○サイトURL
 ○更新のあった(新しく追加された)ページのURL
 ○カテゴリ

yahooが気に入らなかったのは4つの要素が送られてきた点。つまり「拡張2個が余計だ」ということらしい。4つの要素で構成されたxmlを投げた場合はエラーとなり、基本の2つの要素でxmlを構成した場合は、正常なレスポンスが返された。70ほどのpingサーバを試してみたが、「No data …」のエラーは日本のYahooだけ(アメリカYahooでも問題ないのに・・・)。

まぁ、何はともあれすっきりした。
結局最近のpingサーバは、pingを受信した後、rssを収集して回るようになっているので、そもそもpingの拡張要素自体に意味がないのかもしれない。

それにしても・・・Yahoo、こういうのって最低限対応しておくべきではない?。

xmlrpc.incの不具合

2007/08/29 | XML

ブログを操作したり、pingの送受信をしたりする際に使用しているxmlrpc( http://phpxmlrpc.sourceforge.net/)で「不都合」と思われる箇所を発見した。
今までいろいろなブログに対してテストをおこなっていた。MTなどでは正常に送信できているのだが、例えば「gooブログ」で投稿すると???と「?」の羅列になってしまっていた。MTで正しく投稿できているのだから、「gooブログのほうがおかしい」と決め込んでいたのだが、実はxmlrpc.incがまずかった。

xmlrpc.inc読み込み時に以下のように記述する必要があることは前にも書いた。
$GLOBALS[‘xmlrpc_internalencoding’]=’UTF-8′;
しかし、これだけでは「準備が足らない」ということだ。具体的にはxmlrpc.incのxmlrpc_clientクラス中で定義されている「request_charset_encoding」という変数に値をセットしてやらなければならない(デフォルトでは空文字列が与えられている)。具体的には以下のように記述。

require_once(‘xmlrpc.inc’);
$GLOBALS[‘xmlrpc_internalencoding’]=’UTF-8′;
$obj=new xmlrpc_client($path,$host,$port);
$obj->request_charset_encoding=’UTF-8′;

xmlrpc.inc内にはクラスの定義だけでなく、簡単な判別ルーチンや独自で使用する関数も定義されている。上記の文字コード設定は、実際にはクラスの外で定義された関数を仲介してクラス内で処理されている。しかし設定箇所がないので、何もしなければ希望の処理パターンを選べないのだ。

本来なら、値をセットするような関数を用意しておくべきなのだが、それも見当たらない。仕方無しに「直接外部から変数の値を書き換えている」という次第だ。

バグなのか、それともxmlrpcを記述する際の正しい書き方が別に存在するのか、理由は不明。でもこれでほとんどのブログに対して記事投稿ができるようになりそうだ。


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