metaweblog.newPostでMTにタグを渡す

2007/03/22 | XML

だんだんPHPの話題から遠のきそうなので、XMLに記事を投稿。
MovableTypeにXML-RPCを使って記事を投稿する際に「タグ」も送信できないか、と思案してみた。公式のマニュアルを見ても、そのような記述はないから半ばあきらめてはいたのだが・・・(「追記」や「概要」などは送ることができる)。Perlのソースまで読んでしまった。

そしたらありました「mt_tags」。
これをtitleやdescriptionに追加して送信すればいいみたい。複数のタグを送りたいときはカンマ区切りで。

カスタムValidation(メアドが入力された場合のみ書式チェック)

2007/03/21 | cakePHP

cakePHPに限ったネタではないのだが、メアドの書式チェックについてメモ。
とあるクライアントから入力フォームのメアドは任意入力の項目としてほしい、という依頼があった。単にvalidationをはずしてもいいのだが、後々活用できそうなので、試行錯誤してみた。

cakePHPでは”VALID_EMAIL”と指定することでメールアドレスの書式チェックをしてくれるが、未入力でもエラーになってしまう。よってこれを「未入力はOKで、かつ入力された場合のみ書式チェック」というふうに書き換える。

/(¥¥A(?:^([a-z0-9][a-z0-9_¥¥-¥¥.¥¥+]*)@([a-z0-9][a-z0-9¥¥.¥¥-]{0,63}¥¥.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)¥¥z)/i

デフォルトはこのような正規表現になっている。正規表現は苦手なのだが、なんとなく雰囲気で以下のように書き換えた。

/(¥¥A(?:^([a-z0-9][a-z0-9_¥¥-¥¥.¥¥+]*)@([a-z0-9][a-z0-9¥¥.¥¥-]{0,63}¥¥.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)¥¥z)|(¥¥A¥¥z)/i

うしろに”|(¥¥A¥¥z)”をつけただけ。なんとも安直だが、とりあえずこれで動いているのでよしとする。

validation機能が貧弱

2007/03/20 | cakePHP

ウェブのプログラミングとユーザからの入力は切り離せない。というかプログラミングって「ユーザから与えられたデータを適切に処理する」ということが基本だ(何を今更・・・)。
ユーザから与えられた(例えばフォームで入力された)値をチェックするのは基本中の基本だが、実はcakePHP、バージョン1.1ではこの機能(validationという)が貧弱だ。cakePHPのコード中で関係ある記述は以下の部分のみ。

(cakePHPインストールディレクトリ)/cake/libs/validators.php

ファイルの中身を見れば一目瞭然だが正規表現のみ、だ。しかも設定してあるのは4つだけ。自分で作らなければいけないわけね(例えばメールアドレスのチェックでVALID_EMAILを指定すると、書式のチェックはいいとして、必然的に必須となってしまう)。
ウェブをいろいろあさっていて見つけたが、どうもバージョン1.2からvalidation機能が強化されるらしい。バージョン1.2の機能を1.1に組み込むことにチャレンジしていらっしゃる方もいるようだが、今回はそこまでチャレンジしない。最低限の正規表現だけ、考えてみることにする。

カスタマイズしたとしても、cakePHPのコアファイル(cakeディレクトリ以下)は基本的に変更とか追加とかしたくない。アプリケーション用ディレクトリ(app/)以下に配置したいのだが、こういうのはどこにおけばいいんだろう。お作法がよくわからない。そもそも設定ファイルをおかない、というスタンスがあるせいか、自分で書いたスクリプトに関しても設定ファイル配置のためのお作法というのがどこにも書いてない。
どうせ書くなら、誰が見てもわかるように書きたいのだけれど・・・。お作法がまだまだしっかりしていないのだろうか。まぁ、まだできて間もないものだから、やむをえない面ではあるのだが・・・。

外部と通信する際に設定しておきたい項目

2007/03/19 | PHPの基本

マッシュアップという言葉のせいではないけれど、外部のサービスと連携することが多くなった。また連携する、ということでなくても、外部の情報をとってくる、という機会が多い。そんなときにこの設定は有効だ。

ini_set(‘default_socket_timeout’,10);

これで接続に10秒以上かかれば、通信をやめてくれる。

外部の情報を以下のように取得する場合、

$html=file_get_contents(‘http://www.hoge.com’);

通信状態とか相手のサーバの込み具合にもよるけれど、すぐに応答がない場合がある。そんなときは上記で設定した秒数が過ぎると接続をあきらめてくれる。つまり「できれば取得したいけれど、出来なければやむをえない」というルーチンを組み込む場合には最適な設定だ。

トラックバックの送受信

2007/03/18 | XML

XMLとは関係ないけれど、ブログ関連の話題が続いたので、ついでにトラックバックも取り上げてみた。トラックバックの機能はXMLとはまったく関係ない仕組みだ。送信側は指定されたトラックバックURLに、フォームからpostする要領でデータをpostする。サーバからpostするわけだから(ブラウザがpostするのではないのだから)、少しだけ工夫が必要。postメソッドで送信するために、ローレベルにfsockopenで直接相手先ホストとお話しするか、curlを使うか、あとPEARのライブラリも使えるはずだ(工夫が必要なのはここだけ)。
受信する側はもっと簡単。フォームで内容を受け取るのと同様で、単にPOSTを受けるだけ。$_POSTでいいわけだ。

トラックバックURLはどうもPATH_INFOを使って記事番号の受け渡しをすることが一般的らしい。当然何らかの記事に対してトラックバックがおこなわれるわけだが、記事には固有の番号がついている。トラックバックが送られてきたら、どの記事に対して送られてきたのか判別する必要があり、その記事番号の受け取り方でPATH_INFOを使用する、ということだ。
例えばトラックバックを受け付けるプログラムのURLと記事番号が以下のような場合、

URL: http://hogehoge.com/trackback.php
記事番号: 24

トラックバックURLは以下のようにする、ということだ。

http://hogehoge.com/trackback.php/24

でもって、trackback.php内でPATH_INFOから記事番号を判別する。ちなみにPOSTで受け渡しされる情報は以下のとおり。

blog_name:ブログ名
title:言及記事のタイトル
url:言及記事のURL
excerpt:言及記事の概要

どこかで一度試してみるとしよう。


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