キャリアの判別方法
上記のようにユーザーエージェントはキャリア毎にいくつかのパターンがありますので、それを元に判別します。
<?php
// ユーザーエージェント判別
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/^DoCoMo/', $userAgent)) {
$carrier = 'DoCoMo';
} elseif (preg_match('/^(J\-PHONE|Vodafone|SoftBank|MOT\-)/', $userAgent)) {
$carrier = 'SoftBank';
} elseif (preg_match('/^(KDDI\-|UP\.Browser)/', $userAgent)) {
$carrier = 'au';
} elseif (preg_match('/^Mozilla.+(DDIPOCKET|WILLCOM)/', $userAgent)) {
$carrier = 'Willcom';
} elseif (preg_match('/^emobile/', $userAgent)) {
$carrier = 'emobile';
} else {
$carrier = 'PC';
}
print $carrier;
?>
PEARでキャリア判別ができるライブラリも公開されていますのでこちらを使う方法もあります。
PEAR::Net_UserAgent_Mobile
http://pear.php.net/package/Net_UserAgent_Mobile/
機種の判別方法
画像縮小処理のための機種判別において最低限必要な情報は機種ユーザーエージェント・ブラウザ横サイズ・縦サイズになります。
機種判別をするには事前に各機種の情報を入手しておく必要があります。
各機種のブラウザ画面サイズの情報は各キャリアのサイトで確認できます。
DoCoMo
http://www.nttdocomo.co.jp/service/imode/make/content/spec/screen_area/
au
http://www.au.kddi.com/ezfactory/tec/spec/new_win/ezkishu.html
SoftBank
http://creation.mb.softbank.jp/terminal/?lup=y&cat=display
機種のデータはcsvファイルやXML、データベースや、配列、キャッシュにして保持しておきます。
判別用のユーザーエージェントは機種名までの文字列と機種名までにしておき、
照合の誤りを避けるために降順で照合させます。
▼CSVファイルサンプル(一部抜粋)
機種名,ユーザーエージェント機種IDまで,横サイズ,縦サイズ
905SH,Vodafone/1.0/V905SH,240,400 904T,Vodafone/1.0/V904T,240,320 703N,Vodafone/1.0/V703N,240,269 A1014ST,UP.Browser/3.04-ST14,120,108 A1011ST,UP.Browser/3.04-ST13,120,126 921T,SoftBank/1.0/921T,234,339 921SH,SoftBank/1.0/921SH,468,754 WX331K,Mozilla/3.0(WILLCOM;KYOCERA/WX331K,235,245 AH-K3002V,Mozilla/3.0(DDIPOCKET;KYOCERA/AH-K3002V,237,241 702sMO,MOT-C980,176,182 W63T,KDDI-TS3K,234,267 A5514SA,KDDI-ST27,235,242 W44K,KDDI-KC38,232,237 V801SH,J-PHONE/5.0/V801SH,240,260 J-T51,J-PHONE/4.2/J-T51,144,144 V403SH,J-PHONE/3.0/V403SH,240,260 J-DN03,J-PHONE/3.0/J-DN03,120,130 SH705iII,DoCoMo/2.0 SH705i2,240,320 SH705i,DoCoMo/2.0 SH705i,240,320 P704iμ,DoCoMo/2.0 P704imyu,240,270 P704i,DoCoMo/2.0 P704i,240,270 SO503iS,DoCoMo/1.0/SO503iS,120,113 SO503i,DoCoMo/1.0/SO503i,120,113
▼機種判別PHPサンプル
<?php
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$deviceList = file("DeviceDisplay.csv");
foreach ($deviceList as $key => $value) {
list($name, $agent, $width, $height) = explode(',', $value);
if (ereg($agent, $userAgent)) {
break;
}
}
print $name . " : " . $width . "x" . $height;
?>