Google AdSenseをapplication/xhtml+xmlの環境で表示する

覚え書き@kazuhi.to様の記事経由Keystone Websites様の記事を基にしてapplication/xhtml+xmlの環境でGoogle AdSenseから提供されるスクリプトを可視にするという試みを行いました。

Google AdSenseから提供されるshow_ads.jsは広告を表示するタグをdocument.writeで書き出そうとします。これではapplication/xhtml+xmlで送信するページには広告を掲載できません。しかも改変は一切不可という規約があるので事実上「そんなページにはウチの広告は表示しないでくれ!」と言われているようなものです。

しかしそこまで言われて引き下がるわけにはいきません。そんな中で上記の記事に辿り着いたというわけです。下記に当サイトでのMovable Type上の実装を覚え書きとして残しておきます。

改変は不可。さてどうする?

今回の実装はshow_ads.jsの出力を2つの形態で行うことで実現されます。具体的にはtext/htmlとして送信する場合には提供されたものをそのまま用いapplication/xhtml+xmlとして送信する場合には外部でshow_ads.jsから生成した出力画面をobject要素から取り込むという流れになります。尚UAの要求MIMEタイプを判別するためにPHPを用いています。

※この実装を行うとXHTML 1.1としてはInvalidな状態となります。それが許せない方は諦めてください。

Google AdSenseからの提供スクリプトをテンプレート化

この作業は以降の作業を簡便化する為に行うものですので「テンプレート・モジュールなんて使いたくないよ」という方は読み飛ばして頂いて結構です。

…というわけで新規テンプレート・モジュールを作成します。ここでは『GoogleAdSense』という名称で作成します。ここで表示している内容は私のGoogleとの契約内容に沿ったものですので各自修正してください。

<script type="text/javascript"><!--
google_ad_client = "pub-3296233600171376";
google_alternate_ad_url = "http://cefa.sakura.ne.jp/scripts/lilbox.php?type=smallrect";
google_ad_width = 180;
google_ad_height = 150;
google_ad_format = "180x150_as";
google_ad_channel ="";
google_ad_type = "text";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "CD5C5C";
google_color_url = "CD5C5C";
google_color_text = "000000";
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

show_ads.jsからの出力画面(HTML)を作成

このセクションで実際にobject要素から呼び出す内容を作成します。新規インデックス・テンプレートを作成して次のように記述します。ここでは名称を『GoogleAdSense Object』とします。

<?php header("Content-Type: text/html;charset=utf-8"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>広告</title>
<style type="text/css">
body {
margin:  0px;
padding: 0px;
}
</style>
</head>
<body>
<$MTInclude module="GoogleAdSense"$>
</body>
</html>

あとは実装だけ!

最後に実際のテンプレートに下記のような記述をします。『個別エントリー・アーカイブ』テンプレート等に次のように記述をしてしまいましょう。

<p id="google_ad">
<?php
if (ereg("application/xhtml+xml", $_SERVER['HTTP_ACCEPT'])) {
print "<object data="<$MTBlogURL$>modules/google_ad.php" type="text/html" width="180" height="150"></object>n";
}
?>
 
<$MTInclude module="GoogleAdSense"$>
</p>

後は対象を再構築してやれば完成です。