先日開始された携帯サイト向けのGoogle AdSenseですが、PC向けサイトのようにJava Scriptが使えないため、PHPやらCGIやらの手を借りなければいけないということです。
とりあえず適当にGoogle AdSenseが吐き出したコードをmt4i.cgiにコピペしてこねくり回していたんですが、一応動きはするものの、処理が美しくないためうろうろ悩んでいたところ、作者様のブログに「Google様が吐き出したコードを改変するのは違反に当たる」との記述と、それに対応する賢い方法が書かれていたので、うちでも外部ファイルを実行させて変数に入れるようにしました。
この方法は外部プロセスを走らせるので、処理に時間が若干かかるような気もするんですが、それまでのコードはmt4i.cgiの先頭にGoogleのコードを追加して必要のないimageとかの処理でも実行させていたのに比べれば遥かにマシでしょうw
とりあえず、mt4i.cgiの「sub htmlout 」に処理を追加してヘッダを作っているところに仕込みました(赤が追加部分)。
===== 前略 =====
# HTMLヘッダ/フッタ定義
my $adsense = qx/perl adsense.pl/;$data = “<!DOCTYPE HTML PUBLIC \”-//W3C//DTD Compact HTML 1.0 Draft//EN\”><html><head><meta name=\”CHTML\” HTTP-EQUIV=\”content-type\” CONTENT=\”text/html; charset=Shift_JIS\”><meta http-equiv=\”Pragma\” content=\”no-cache\”><meta http-equiv=\”Cache-Control\” content=\”no-cache\”><meta http-equiv=\”Cache-Control\” content=\”max-age=0\”><title>$hd_blog_name mobile ver.</title></head><body bgcolor=\”$cfg{BgColor}\” text=\”$cfg{TxtColor}\” link=\”$cfg{LnkColor}\” alink=\”$cfg{AlnkColor}\” vlink=\”$cfg{VlnkColor}\”>” . $adsense . $data;
===== 後略 =====
ですが、一部ページでしか表示されません。
どうやらmt4i 3.0βからエントリーの一覧やエントリーの詳細などはテンプレートを使用するようになっているようで、この方法では対応できません。なので、とりあえずindex.tmplを見てましょう。
<!DOCTYPE HTML PUBLIC “-//W3C//DTD Compact HTML 1.0 Draft//EN”>
<html>
<head>
<meta name=”CHTML” HTTP-EQUIV=”content-type” CONTENT=”text/html; charset=Shift_JIS”>
<meta http-equiv=”Pragma” content=”no-cache”><meta http-equiv=”Cache-Control” content=”no-cache”>
<meta http-equiv=”Cache-Control” content=”max-age=0″>
<title>
<TMPL_VAR NAME=”BLOG_TITLE”> mobile ver.
</title>
</head>
<body bgcolor=”#FFFFFF” text=”#000000″ link=”#0000FF” alink=”#FF0000″ vlink=”#800080″>
<TMPL_VAR NAME=”ADSENSE”>
<h1 align=”center”>
===== 後略 =====
赤が追加した部分です。各テンプレートの同様の場所に赤字の部分を追加して、mt4i.cgiに戻る。
テンプレートの処理をしているところはどこだろうと探してみたら「sub _tmpl_common」あたりが臭いので、
===== 前略 =====
# Version No.
if ($tmpl->query(name => ‘VERSION’) eq ‘VAR’) {
$tmpl->param(VERSION => encode(“shiftjis”,decode(“euc-jp”,$version)));
}# Google Ads
if ($tmpl->query(name => ‘ADSENSE’) eq ‘VAR’) {
my $adsense = qx/perl adsense.pl/;
$tmpl->param(ADSENSE => encode(“shiftjis”,decode(“euc-jp”,$adsense)));
}
===== 後略 =====
ごっそり追加したところなんとか表示されるようになりましたとさ。おかげさまでずいぶんすっきりと書けました。そうそう、Googleのはeuc-jpでコードを取得してます。
これが正しいかどうかなんて動けばOK主義の当方にはわかりかねますのであしからずw 3.0β3にて作者様が対応してくださるそうなので、出たら速効上書きだ!!!!
以下関係ないんですが、mt4i.cgiの作者様のブログ(talk to oneself 2)はなぜかうちのIE7では盛大に文字化けする。ページ遷移するごとにエンコードをUTF-8にしなきゃいけないのはなんでだろうと思って見てみたら、
<meta http-equiv=”Content-Type” content=”text/html; charset=utf8” />
UTF8って書いてんじゃん?と調べてみたらどうやら
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8” />
これが正しいっぽい。微妙に間違ってるとはいえ、MSめっ!なんで毎回毎回Shift_JISだと御認識するのかーっ!!
コメント
charset の件、ご指摘ありがとうございます。しかしその箇所、 使ってるんですよね、うーん…。
Adsense のコードですが、そもそも Shift_JIS で取得していただければ、パラメーターに突っ込む前の encode() は必要なくなりますよ。
わー、そうかタグは消えちゃいますよね…。
<$MTPublishCharset$> 使って charset 出力してます。
わざわざ見に来ていただきありがとうございます。
charsetに関しては、うちも$MTPublishCharset$で出してます。
うちはMovable Typeのバージョンが4.0.1なので、途中で変わったのかしら?
なんにせよ、ちゃんと文字コードを判定できないIE7が一番悪いに違いありませんw
AdSenseのコードの件ですが、Shift_JISで取得していないのは「sub htmlout」でも使ってるからです。こちらがEUCじゃないと文字化けしてしまうので、「sub _tmpl_common」では変換するようにしてます。
まだよく見れていないのですが、また何か気になることがありましたらwikiにでも書き込ませていただきます。