ケータイ画像出力のためのキャリア・機種判別

By ookura - 08/09/11 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

キャリアの判別方法

上記のようにユーザーエージェントはキャリア毎にいくつかのパターンがありますので、それを元に判別します。

<?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;
?>