しらぎくモバイルシステムを拡張するために作成するプラグインは、以下の仕様に従う事で作成が可能です。
プラグインを公開する場合の注意事項(平成18年 5月12日 追記)
しらぎくモバイルシステムでは、変換するHTMLコンテンツを操作するプラグインを導入する事が出来ます。
プラグインは、HTML文書を変換する前に起動します。
また、第3.001版(平成17年 3月30日)からは、特定のHTML文書だけが呼出すプラグインを作る事も可能になりました。
プラグインはPerl 5.xで記述したパッケージとします。
プラグインには予め定めた名前をパッケージ名及びしらぎくモバイルシステムが呼び出す函数名とします。
呼出す際に引数として、変換前のHTML文書データと、変換モード(キャリア系統コード)が与えられます。
プラグイン函数は、処理後のHTML文書をreturn文で返しますが、しらぎくモバイルシステムで処理不能なコンテンツを出力して、exit()函数かsysExit函数で処理を強制終了させる事も出来ます。
設置場所は「K.cgi」スクリプト設置ディレクトリに置かれたサブディレクトリ「Options」直下とします。
また、下請けスクリプトやデータファイルを収める作業用ディレクトリを要する場合は、原則的に
ものとします。
但し、データファイルのみを収納する作業用ディレクトリは、利用者が設定・変更出来る事を条件として任意のディレクトリに設置する事を認めます。
プラグイン名は、以下の書式に従っている事が必要です。
Add
」で始まる文字列。字数にはPerl言語での制限に依りますが、余り長いものは推奨しません。
プラグインのファイル名は、以下の書式に従います(「[
」「 ]
」は記述しません)。
制限コードとは、プラグインを実行させないキャリア系統を指定します。
-
」を含めて省略します。具体的には、実行させたく無い場合に以下の半角英字を記述します(順不同)。
e
w
j
h
i
$ENV{'HTTP_USER_AGENT'}
」などを活用して内部で処理するようにして下さい。例えば、プラグイン名が「AddPlugIn」で、H"リンクとWAP 1.0では実行出来ないプラグインのファイル名は以下のいずれかになります。
AddPlugIn-wh.pl
AddPlugIn-hw.pl
また、プラグイン名が「AddPlugIn」で、制限の無いプラグインのファイル名は以下のようになります。
AddPlugIn.pl
尚、特定のHTML文書でのみ使われるプラグインは、ファイル名の先頭に「@
」を付けます。
例えば、特定のHTML文書でのみ使われるプラグイン名が「AddPlugIn」で、H"リンクとWAP 1.0では実行出来ないプラグインのファイル名は以下のいずれかになります。
@AddPlugIn-wh.pl
@AddPlugIn-hw.pl
プラグインは、プラグイン名で与えられるパッケージとなります。
すなわち、
package
プラグイン名;
となります。
しらぎくモバイルシステムはHTML文書を変換する前に、以下の処理を実行します。
つまり、「プラグイン名::プラグイン名」と言う函数を、「(変換前のHTMLコンテンツ収納変数,UA系統コード)」と言う引数で呼出し、処理の結果をHTML文書データとして受取ります。
但し、eval文内のため、実行出来なかった場合はエラーとならず、HTMLコンテンツは無処理となります。
例えば、プラグイン名が「AddPlugIn」で、iモード端末向けに処理しているなら、以下のように呼出されます。
reuire
"./Options/AddPlugIn.pl";
eval "\$s=&$AddPlugIn::AddPlugIn(\$s,0);";
プラグインの下請けとなるスクリプトは、必ず「Options」ディレクトリの直下にプラグイン名と同名の作業用サブディレクトリを設置して、その中に入れるようにして下さい。
package AddPlugIn_Sub1;
)。特に以下のパッケージ名は、システムとの衝突の原因になりますので絶対に使わないで下さい。
特定の文書が呼出すプラグインは、以下のようになります。
通常のプラグインのファイル名の先頭に「@
」が付きます(例:@AddPlugIn.pl
)。
@AddPlugIn-h.pl
」は不可)。この書式に従ったプラグインファイルは、文書側で呼出を指定されていない限り呼出されません。
文書中の任意の箇所に「<!-- plug-in:
プラグイン名-
制限コード -->
」という注釈宣言を入れます(例:<!-- plug-in: AddPlugIn-wh -->
)。
<!-- plug-in: AddPlugIn- -->
でも<!-- plug-in: AddPlugIn -->
でも可)。この宣言が無い文書は、当該プラグインのファイルを呼出しません。
その他の処理は、通常のプラグインと全く同じです。
特定のHTML文書のみが呼出すプラグインは、全文書に適用されるプラグインより先に呼出されます。
上述のように、函数「プラグイン名::プラグイン名()」に「(変換前のHTMLコンテンツ収納変数,UA系統コード)」と言う引数でを与えます。
すなわち、$_[0]に変換前のHTMLデータが文字列の形で、$_[1]にUA系統コードが数値としてそれぞれ入る事になります。
UA系統コードは、どのUA系統かを示すものです。
この値を用いる事で、キャリアごとの処理分けなどが可能になります。
1
2
3
4
0
$kconv::ua_string
」を活用して内部で処理するようにして下さい。プラグイン処理したHTMLデータを文字列としてreturn文で返す事で、システム側に処理データを引渡します。
尚、プラグインによる新たなコンテンツをHTML文書に付足す場合は、必ず<html>要素開始タグより後ろにコンテンツを付足して下さい。
第3.113版(平成17年 6月 2日)より、プラグインがHTML文書を加工・生成する際に、当該プラグインを用いるページへのアンカー(<a>要素)を出力する際に、href属性値となるファイル名に専用のクエリを附加する事が出来ます。
この場合、ファイル名の後ろに「?
」に続けてクエリ列を記述して下さい(例:<a href="document.html?query1=value1;query2=value2">アンカー</a>
)。
;
」「&
」のどちらも使えますが、「;
」を推奨します。しらぎくモバイルシステムで対応出来ない処理を行う場合は、変換した結果をprint文で標準出力に書き出して、sysExit()函数で処理から脱出します。
具体的には、以下のようにします。
原則的に、
content-type: text/x-hdml;charset=
○○)か、content-type: text/vnd.wap.wml;charset=
○○)のデータを出力します。
オープンネットコンテンツの形式に従ったプレインテキスト(content-type: text/plain
)のデータで出力します。
HTML (content-type: text/html;charset=
○○)形式のデータを出力します。
H"リンク以外はcharsetパラメータ(上記の「○○」)を指定します。
日本語コンテンツの場合、しらぎくモバイルシステムから受取るデータはシフトJISコードとなり、しらぎくモバイルシステム及び端末の直接渡すデータもシフトJISコードとします。
英語コンテンツの場合は受取るデータも送るデータもiso-8859-1コードとします。
shift_jis
」、英語向けには「iso-8859-1
」を入れます。尚、言語の判断は、取得したHTML文書の<html>要素に付くlang属性またはxml:lang属性値で判断します。
フォームをプラグインで発行する場合、以下の点に注意して下さい。
ソフトバンクの在来機では、以下の制限がある事に注意して下さい。
このため、しらぎくモバイルシステムでは<form>要素に関して強制的に以下の処理を行います。
つまり、POSTメソッドを用いている場合に問題が生じる可能性がある事をお含み置き下さい。
しらぎくモバイルシステムでは、標準入力及びクエリの双方からデータを入力しております。
$kconv::query_string
に収納されます。$kconv::stdin_data
に収納されます。これらの変数は自由に参照出来ますが、内容を変える事は禁止します。
以下のクエリ名は使わないで下さい。
使用した場合の動作は保証しません。
pdx
」で始まるクエリ名…H"リンクではデータの受渡しにこれらのクエリ名を用います。従いまして、H"リンクからデータを受取る場合を除いて使わないようにして下さい。marguerite
」で始まるクエリ名…しらぎくさいとで予約しております。公式プラグイン以外では使わないで下さい。&
」を用いなければなりません。また、この「&」は実体参照(&
)で記述してはいけません。/
」はURLエンコードしないと正常に動作しなくなります。しらぎくモバイルシステムでは、以下の変数をプラグイン作成の手助けとなるよう公開しております。
$kconv::addr
変換前のHTML文書への相対パスが入ります。
$kconv::realdevice
ユーザエージェント文字列を見て、本物の携帯端末と判断された場合に非零値が、そうでなければ0が入ります。
$kconv::color_device (WAP 1.0及びH"リンクのみ)
カラー端末では非零値が、白黒端末では0が入ります。
$kconv::system_dir
(平成17年 4月17日 追加)「K.cgi」が入っているディレクトリへのパスが入ります。
$kconv::query_string
(平成17年 4月17日 追加)呼出時のクエリストリングが入ります。
$kconv::stdin_data
(平成17年 4月17日 追加)呼出時に標準入力に入っていたデータが入ります。
$kconv::ua_string
(平成17年 4月17日 追加)ユーザエージェント文字列が入ります。
$kconv::optionsCredits
(平成17年 6月12日 追加)プラグインのクレジットを入れる文字列変数で、この変数に限り、条件付で変更が可能です。
クレジット文字列(HTMLの<a>要素も可。但しhref属性は絶対URLとする事)に"\n"を末尾につけたものを連結する事が出来ます。
具体的には、
$kconv::optionsCredits.=qq|<a href="http://www.hoge/hoge/plug-in/>しらぎくモバイルシステム専用○○プラグイン Ver. ○.○ (○年○月○日)</a>\n|;
と言った使い方が出来ます。
この文字列はPCで閲覧した場合にのみ表示され、当該プラグインへのリンクも機能します。
この他、「KConfig.pl」で設定される変数は自由に参照する事が出来ます(パッケージ名「kconv」)。
プラグインを利用する際に設定される変数で、「KConfig.pl」にて設定するものは、公式プラグインで無い場合は必ず「プラグイン名_
」(プラグイン名の直後にアンダスコアが一個付く)で始まる変数名にして下さい。
勿論、プラグインファイル内で設定する事や作業用ディレクトリ内に設定ファイルを置く事も出来ます。
しらぎくモバイルシステムでは、以下の函数をプラグイン作成の手助けとなるよう公開しております。
&kconv::f_lock(void)
ファイルロックします。
flock()函数が使えない場合はrename()函数で処理しますので、どんなシステムでも動くでしょう。
&kconv::f_unlock(void)
&kconv::f_lock()函数でのロックを解除します。
&kconv::f_lock()を呼出した場合は必ずこの函数を呼出してロックを解除して下さい。
&kconv::sysExit(void)
(平成17年 4月16日 追加)システムから脱出する場合に利用します。
&kconv::sysOut($gzip,$status,$header,\$body,$bin_mode)
(平成17年 4月17日 変更)コンテンツの出力に用います。
引数は以下の通りです。
200 OK
」)を入れます。空文字列の場合は「200 OK
」となります。HTTP応答ヘッダを記述します。「"content-type: ○○\n"」などと記述します。
&kconv::sysRedirect($status,$URL,$header)
(平成17年 4月16日 追加)HTMLベースの端末でのリダイレクトに用います。
引数は以下の通りです。
200 OK
」)を入れます。空文字列の場合はサーヴァに任されます。location以外のHTTP応答ヘッダがある場合はそれらを記述します。「"content-type: ○○\n"」などと記述します。
しらぎくさいとではプラグイン名を管理する事は致しません。
このため、プラグインを公開する場合はプラグイン名を合わせて表示する事を求めます。
私的なプラグインは、プラグイン名, パッケージ名, 函数名, ファイル名及び直下のサブディレクトリ名を変更しても動作するように設計する事を勧告します。
プラグインが複数ある場合の動作の優先順位を操作する事は出来ません。唯一、特定の文書でのみ動作するプラグインは全文書で動作するプラグインより先に実行される事だけが仕様で定められております。
このため、プラグインは処理の順序に依存しないようにする事を推奨します。特に他のプラグインも同時に利用され得る事に注意して下さい。
プラグインを「<!-- plug-in:
プラグイン名 … -->
」にて呼び出したページは、PCでの閲覧に対して原則的にHTTP応答ヘッダにLast-Modifiedフィールドを附与しません。
このため、この形式でプラグインを呼び出したページは、リロードで更新されるようになります。
但し、必要であれば、HTML文書内に「<!-- static-document -->
」注釈宣言を記述する事で、HTTP応答ヘッダにLast-Modifiedフィールドを附与するようになります。
<!-- static-document -->
」注釈宣言を埋め込むとPCで見た場合に動的に変化しなくなりますので、そのようなプラグインの作成では絶対に「<!-- static-document -->
」の記述をしないよう求めて下さい。プラグインはmod_perl上で動作する事を想定して作る必要はありません。
逆にmod_perl上でも動作するようにするには、以下の点にご留意下さい。
以上より、mod_perl対応のプラグインはその旨を表示する事が求められます。