2009-12-19
■[Zope][Mobile]Zopeでケータイサイトを作ろうとした
Python忘年会で「回ってくればZope/Ploneアドベントカレンダーを書いてもいい」と発言してしまったところ、本当にt2yさんから回ってきました。
正直、Zope/Ploneは今日はじめて触ったくらいなのでネタに困るところですが、僕は仕事ではケータイサイト関連しかやっていないということで、「Apacheをフロントにしてmod_chxjを使えば、Zope/Ploneで結構簡単にケータイサイトを作れるんじゃないかなー」と考えていたら、すでに先達がいました。というか、このアドベントカレンダーの首謀者Takanoriさんの記事です。
この時点で次の方にバトンを回したいところですが、ここで終わると申し訳ないのと、実はZopeだけではなくmod_chxjも初めて触ってみるので、頑張って自分でもやってみます。
【追記】
ひがしやまさんによる20日目の「Plone でサイトを作ろう」も公開されましたのでご覧ください!
Zopeをインストールする
まずはzope.jpやt2yさんの記事を参考にして、チュートリアルからやってみます。
Zope/Ploneの導入は、CentOSならばEPELレポジトリを追加しておけば、
$ sudo yum install zope plone $ sudo /sbin/service zope start
で起動まで簡単にできるので楽ですね。ただ、
http://127.0.0.1:8080/manage
でアクセスする管理画面に入るパスワードが分からなくて、
$ sudo /usr/lib64/zope/bin/mkzopeinstance.py
とコマンドを叩いてパスワードファイル(/var/lib/zope/inituser)を生成するところが、「すでにZopeインスタンスディレクトリがあるのにこれを実行するのか?」と少々戸惑いました。このパスワードファイルは、チュートリアルの「 一般ユーザーを追加する」にある通り、一般ユーザを追加するまでの一時的なものなのでしょうか。
mod_chxjをインストールする
mod_chxjはi386版ならば本家サイトからRPMをダウンロードできるようでしたが、僕の環境がx86_64だったのでソースに含まれているspecファイルを改変して自分でRPMを作りました。その時のspecファイルはこの記事の最後に張ってあります。
mod_chxjをインストールしたApacheから、同じホストの8080番ポートで動いているZopeへのリバースプロキシを設定します。
ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/
ページを編集してみる
まず、こちらのページを参考にしながら、標準で使う文字コードをutf-8に設定します。
その上でindex.htmlを次のような単純な内容に書き換えて、
<html> <body> <div style="text-align:center;">こんにちはZope</div> <p>コンニチハ、コンニチハ</p> </body> </html>
次のようなmod_chxjの設定を行い、試してみます。
LoadModule chxj_module modules/mod_chxj.so ChxjLoadDeviceData /etc/httpd/chxj/device_data.xml ChxjLoadEmojiData /etc/httpd/chxj/emoji.xml ChxjConvertRule "^/.*$" "EngineOn,Z2hOn" "utf-8"
やりたい事は、
- Apache(ポート80)へのアクセスはすべてZopeに流す
- クライアントからの入力はShift_JISからutf-8へ変換されている(はず)
- Zopeからの出力(utf-8)はすべてShift_JIS(cp932)に変換される
- Z2hOnにしているので出力時にmod_chxjの全角半角変換機能を使ってすべて半角にして出力される
といったところです。
FireMobileSimulatorを使ってアクセスしてみると、docomoだと、
<html> <body> <div>こんにちはZope</div> <p>コンニチハ、コンニチハ</p> </body> </html>
というHTMLが返ってきました。うーん、半角への変換は期待した通りだけど、style属性が削除されてしまいました・・・おそらくContent-Typeをxhtmlにしていないからだと思うのですが、ZopeでContent-Typeを制御する方法まで分からず、ここは未解決・・・
auだと、
<?xml version="1.0" encoding="Windows-31J"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <div>こんにちはZope</div> <p>コンニチハ、コンニチハ</p> </body> </html>
SoftBankだと、
<?xml version='1.0' encoding='Shift_JIS' ?> <!DOCTYPE html PUBLIC "-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN" "html-basic10-plus.dtd"> <html> <body><div> <div>こんにちはZope</div> <p>コンニチハ、コンニチハ</p> </div></body> </html>
というHTMLが返ってきました。mod_chxjが、XML宣言とDTDを自動的に付けてくれるのは便利かもしれませんが、絵文字の変換は行われていないな。Unicode形式だとmod_chxjは自動変換してくれないのか・・・
といった具合に、Zopeもmod_chxjも初めて触ったので、微妙な感じで時間切れとなってしまいました。
ただ、最近はケータイサイト・アプリケーション開発はmod_chxjのようなアプローチをとった方が楽(utf-8を前提にしているPythonアプリケーション/ライブラリはそのまま使って、utf-8以外の文字コードを使いたいならば別のレイヤーで変換を行った方が楽)だと感じ始めてきているので、習熟すればまずまずいい感じでケータイサイトができるのではないかと予想しています。
というわけで、Zope暦半日の人間がZope/Ploneアドベントカレンダー19日目をお送りしました。(たぶん来年以降アドベントカレンダーが回ってこない限り、もうZope/Ploneには触らないと思います。えー。)
次はひがしやまさんにお願いします。
とりえあずこれだけでは寂しいので、今回自分用にmod_chxjのx86_64版のRPMを作った時のspecファイルを貼り付けておきます。CookieのMySQLバックエンドを省略している点と、libmemcachedを共有ライブラリ版を使うようにしているところが、本家のRPMと違います。
%define version 0.12.37 Summary: CHTML to HDML,XHTML,JHTML convert module for Apache HTTPD. Name: mod_chxj Version: %{version} Release: 1 License: Apache License Version 2.0 Group: System Environment/Daemons Vendor: Atsushi Konno URL: http://sourceforge.jp/projects/modchxj/ Source: http://sourceforge.jp/projects/modchxj/downloads/33637/mod-chxj_%{version}.src.tar.gz #Source1: http://download.tangent.org/libmemcached-0.23.tar.gz Packager: Atsushi Konno <konn@sourceforge.jp> Requires: ImageMagick >= 6.2.8.0, httpd >= 2.2.3, apr >= 1.2.7, apr-util >= 1.2.7, openssl >= 0.9.8, libmemcached >= 0.23 BuildPreReq: httpd-devel ImageMagick-devel gcc-c++ libtool openssl-devel libmemcached-devel Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %description The contents conversion middleware for domestic main carrying (three careers) is made as a module for Apache2.0. UserAgent is seen when contents made with CHTML are output and it converts it into HDML, XHTML, and JHTML (The image : to JPG, GIF, JPG, GIF from PNG, and PNG and BMP). With QR code generation function. %prep %setup -q -n mod-chxj_%{version} %build %configure --enable-memcache-cookie \ --with-memcached-header=%{_includedir}/libmemcached \ --with-memcached-lib-dir=%{_libdir} %{__make} DESTDIR=$RPM_BUILD_ROOT %install %{__rm} -rf $RPM_BUILD_ROOT %{__mkdir} -p $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d %{__mkdir} -p $RPM_BUILD_ROOT%{_sysconfdir}/httpd/chxj %{__mkdir} -p $RPM_BUILD_ROOT%{_libdir}/httpd/modules %{__install} -m0644 support/centos/chxj.conf $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/chxj.conf %{__install} -m0644 etc/emoji.xml $RPM_BUILD_ROOT%{_sysconfdir}/httpd/chxj/emoji.xml %{__install} -m0644 etc/device_data.xml $RPM_BUILD_ROOT%{_sysconfdir}/httpd/chxj/device_data.xml %{__make} -C src make_so %{__install} -m0755 src/mod_chxj.so $RPM_BUILD_ROOT%{_libdir}/httpd/modules/mod_chxj.so %files %defattr(-, root, root) %doc AUTHORS ChangeLog COPYING %config(noreplace) %{_sysconfdir}/httpd/conf.d/chxj.conf %config(noreplace) %{_sysconfdir}/httpd/chxj/emoji.xml %config(noreplace) %{_sysconfdir}/httpd/chxj/device_data.xml %{_libdir}/httpd/modules/mod_chxj.so
- 89 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=GUh&q=psychotic+python&btnG=検索&lr=lang_ja&aq=f&oq=
- 53 http://plone.jp/documentation/advent-calendar/2009
- 50 http://www.google.co.jp/reader/view/?tab=my
- 45 http://pipes.yahoo.com/pipes/pipe.info?_id=f8e50936209277c7946c9bc16b988bf7
- 34 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&q=ActiveMQ+Python&start=10&sa=N
- 27 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADBF_jaJP301JP301&q=Detected+an+illegal+character+in+input+string+
- 21 http://reader.livedoor.com/reader/
- 20 http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&rls=org.mozilla:ja-JP-mac:official&hs=qBv&q=GridFS&btnG=検索&lr=&aq=f&oq=
- 17 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Ganglia&num=50
- 16 http://ezsch.ezweb.ne.jp/search/ezGoogleMain.php?query=ソフトバンク+絵文字+au&ct=&pd=1&sr=0000