ASPで作った仕組みは必然的にWindowsサーバ。
というよりはWindowsサーバ+SQLサーバを使う関係上「ASP」で開発。
MovableTypeはLinuxサーバ。
さて今回の悩みは、LinuxサーバのコンテンツをWindowsサーバ側で使うにはどうしたら良いのかである。
ASPで作った店舗向けサービスに「お知らせ」機能を追加するのだが、直接部門(例えば営業部門など)が自分たちで記事を掲載するようにした方が何かと便利である。
今すぐ掲載したい記事があれば自分でやれた方が早いしムダも無い。すぐに「これやって」と言ってくる人たちも、そのうち自分たちでやるメリットに気が付くであろう。
その時に備えて、仕組みだけは直接部門の人たちでやれるようにしておきたいのだ。
さて“簡単に記事を掲載”となれば“ブログ”である。
Windows用のブログを試してみたところ、あまりにも使い勝手が悪くて非実用的。
今回もMovableTypeのお世話になるのだが、Linuxサーバなんですよね。
Windows2000サーバなら「アレとコレを入れたらMTもWindowsでなんとか」という話になるのだが、Windows2003の場合は上手くいかない。
となれば「LinuxサーバのファイルをWindowsのWebサーバから見にいく」というワザが必要。
普通に考えるとそんなことできないのだが、やれる方法は1つある。
とても素晴らしい「BASP21」を使うのである。
変なことをしたい開発者にとっては、とてもありがたいモジュールです。(感謝感謝)
<%
Set bobj = Server.CreateObject("basp21")
temp1 = bobj.GetTempFile()
rc = bobj.W3get(“-o ” & temp1 & ” -j sjis http://www.xxx.xx.xx/xxx/index.html”)
if rc < 1 then
%><font size=2 COLOR=RED>取得エラー(Err:<%=rc%>)!!</font><%
else
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile(temp1,1,FALSE)
Do Until tso.AtEndOfStream
Response.Write tso.ReadLine
Loop
end if
%>
「今回も、これで解決!」というわけにはいかなかった。
第二ラウンド突入!!
「UTF-8のページが文字バケする(BASP21はUTF-8に対応していない)」
これはWebメールを作ったときに随分と闘ってギブアップした問題である。
MovableTypeで出力されるページの文字セットがUTF-8であるため、このままでは目的を達成できない。
ではどうすればいいのか。
以前、携帯電話用にperlで作ったやつがあり、それを改造して文字セットをSJISに変換させれば良いような。
さてと取り掛かるかと思いつつ、ネット検索してみると「MT4i」が既にその機能を持っているらしい。
まずは、「MT4i」をインストールして正常に動くことを確認。
すかさずMT4iを改造。(単ページ表示をシンプルにする)
表示させたいページをパラメータで渡すようにASP側を変更。
page = Request.QueryString(“page”)
temp1 = bobj.GetTempFile()
rc = bobj.W3get(“-o ” & temp1 & ” -j sjis http://www.xxx.xx.xx/xxx/mt4i1.cgi?id=2&mode=individual&no=1&eid=” & page)
これでIISのASPでMTのページを表示させることができた。
追記.
受け渡しパラメータを細工されると見せたくないブログまで見られてしまう。
エントリーを検索する部分を修正。
sub individual {
のところにある
my $entry = MT::Entry->load({blog_id => $cfg{Blog_ID},id => $eid});