モバイル向け Google Adsense 出力内容を変数として取り出す方法

モバイル向け Google AdsensePHP, Perl, JSP, ASPソースコードを提供していますが、以下はPHPの貼り付けソースコードに関するTIPSです。

<?php
// 広告コードサンプル
$GLOBALS['google']['ad_type']='text';
$GLOBALS['google']['channel']='';
$GLOBALS['google']['client']='pub-0000000000000000';
$GLOBALS['google']['format']='mobile_single';
$GLOBALS['google']['https']=$_SERVER['HTTPS'];
$GLOBALS['google']['host']=$_SERVER['HTTP_HOST'];
$GLOBALS['google']['ip']=$_SERVER['REMOTE_ADDR'];
$GLOBALS['google']['markup']='xhtml';
$GLOBALS['google']['oe']='utf8';
$GLOBALS['google']['output']='xhtml';
$GLOBALS['google']['ref']=$_SERVER['HTTP_REFERER'];
$GLOBALS['google']['url']=$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$GLOBALS['google']['useragent']=$_SERVER['HTTP_USER_AGENT'];
require('http://pagead2.googlesyndication.com/pagead/show_ads.php');

?>

ヘルプには「広告コードをコピーし、モバイルウェブページのソースを開き、広告を表示する位置にコードを貼り付けます」とあります。


しかし、素直に実行すると

・ HTML内に煩雑なPHPコードが混入
・ 同一コードを複数ファイルに記述

という、信じられないことになってしまいます。広告コードを別ファイルにして表示する位置でインクルードするのひとつの手ですが、それでも HTML内に <?php require(); ?> が混ざるのは美しくありません。


さらに大きな問題は、この広告コードは http://pagead2.googlesyndication.com/pagead/show_ads.php を require した時点で広告内容を出力してしまいます。


テンプレートエンジンを用いているとき、HTMLとPHPコードの混在を最小限度に抑えたいとき等々、広告内容を変数にセットして置きたいものです。そんなときには、以下のような関数を用いることで広告内容を変数にセットできます。

<?php

function getGoogleAdsenseContents()
{
	$GLOBALS['google']['ad_type']='text';
	$GLOBALS['google']['channel']='';
	$GLOBALS['google']['client']='pub-0000000000000000';
	$GLOBALS['google']['format']='mobile_single';
	$GLOBALS['google']['https']=$_SERVER['HTTPS'];
	$GLOBALS['google']['host']=$_SERVER['HTTP_HOST'];
	$GLOBALS['google']['ip']=$_SERVER['REMOTE_ADDR'];
	$GLOBALS['google']['markup']='xhtml';
	$GLOBALS['google']['oe']='utf8';
	$GLOBALS['google']['output']='xhtml';
	$GLOBALS['google']['ref']=$_SERVER['HTTP_REFERER'];
	$GLOBALS['google']['url']=$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
	$GLOBALS['google']['useragent']=$_SERVER['HTTP_USER_AGENT'];
	ob_start();
	require('http://pagead2.googlesyndication.com/pagead/show_ads.php');
	$contents = ob_get_contents();
	ob_end_clean();
	return $contents;
}


/**
 * 変数 $adsense_contents にセットする例
 */
$adsense_contents = getGoogleAdsenseContents();

?>

[追記]

PHPに関しては Google の提供する貼り付け用ソースコードが酷いとの意見もちらほらあるようです。


確かにコード自体は酷いです。しかし、多言語ソースと比べれば一目瞭然ですが、PHPに関してはできるだけ“いかつくないコード”にすることで(プログラム経験のない)一般ユーザーへの敷居を低くするよう、配慮した結果なのだと思います。一方で、サーバー環境依存によっては導入時にエラーが出てしまう、という問題を引き起こしてしまっていますが、ここらあたりはマスを対象とするサービスの難しさですね。


PHPプログラマーならモバイル向けGoogle AdSenseをPHPで使うの「リモートスクリプトをローカルに置く」という方法の中で、2007年10月現在のリモートスクリプトが紹介されているので、各自で最適化ハックするのがよいかもしれません。