
REGZAフォン、来たーーー!!!
AndroidもUSERAGENTから機種名が取れましたよ。とりあえず、ホスト名に上書きしちゃってますがw。
AndroidのUSERAGENT
UAは例えばこんな感じ。HT03Aなどは入る場所もちょっと違うとか、ホントいろいろあります。
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5
Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5
DoCoMo/2.0 P900i(c100;TB;W30H14)
Mozilla/5.0 (Linux; U; Android 2.1-update1; ja-jp; SonyEricssonSO-01B Build/2.0.B.0.138) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
Mozilla/5.0 (Linux; U; Android 2.2; ja-jp; SC-01C Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
WS007SH Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ja-jp) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16
Opera/9.80 (Android; Opera Mini/5.1.22460/21.549; U; ja) Presto/2.5.25 Version/10.54
何気にこんな機種もあるんですね。これはタブレットに分類したいなあ。
売り上げランキング: 3074
Android機種名取得で考えたこと
当サイトでは、スマートフォンをWordPressのKtai-styleというプラグイン、テンプレートで表示させています。ですから、iPhoneやAndroidも携帯トラッキング同様、ga.phpで取得しています。
そこで、ga.php内でUAを取得し、そこから機種名を抽出します。UA取得後は半角スペースで区切り、配列に入れます。すると、だいたい配列の[6]番目に機種名が入るんですね、ただし以下注意。
・Android、HT03Aは[7]番目。
・国内販売だけでも(前述のように)かなりの機種がある。
・iPadやiPhoneは単純に抽出しただけだと、余計な文字も入ってしまう。
・(モバイルビューOFFで)一部HTCでMacintoshと認識される。
・iPhone等はバージョン取得
・PHP5以上(ga.phpがそもそもPHP5以上)
なお、ga.phpで使われていないcookieを指定したところ、うまく取れませんでした。ですので、普段あまり使っていないホスト名(通常は同じドメインが記録されていることが多いと思います。Google翻訳などを経由するとGoogleと表示されるらしいので、活用はかなり特殊なケースかと判断)に上書き(オーバーライド)しちゃいました。$domainNameという値をオーバーライドします。
Android機種名取得のコード
ga.phpに追加して下さい。私は128行目の「$account = $_GET[“utmac”];」以降に入れました。
// 追加(途中にもあるので、無くてもいいかもしれませんが)
$userAgent = $_SERVER["HTTP_USER_AGENT"];
//ua0がユーザーエージェント、ua1が配列、ua2は区切り文字。結果$ua1[6]が機種名
$ua0 = $userAgent;
$ua1 = array();
$ua2 = " ";
//Androidをチェック HT03Aだけ7番目が機種名
if(strpos($ua0, "Android" ) ){
$ua1 = spliti( $ua2 , $ua0 );
if ($ua1[6]=='Docomo'){ $ua1[6]=$ua1[7]; }
if ($ua1[6]=='TOSHIBA_AC_AND_AZ)'){ $ua1[6]="TOSHIBA_AC_AND_AZ"; }
$domainName = $ua1[6];
}
//iPadをチェック (と;が付いてしまうので処理
elseif(strpos($ua0, "iPad" ) ){
$ua1 = spliti( $ua2 , $ua0 );
$ua1[6] = str_replace('(', '', $ua1[1]);
$ua1[6] = str_replace(';', '', $ua1[6]);
$domainName = $ua1[6];
}
//iPhone バージョンを入れる
elseif(strpos($ua0, "iPhone" ) ){
$ua1 = spliti( $ua2 , $ua0 );
$domainName = $ua1[6];
}
//iPod (と;が付いてしまうので処理
elseif(strpos($ua0, "iPod" ) ){
$ua1 = spliti( $ua2 , $ua0 );
$ua1[6] = str_replace('(', '', $ua1[1]);
$ua1[6] = str_replace(';', '', $ua1[6]);
$domainName = $ua1[6];
}
//HTC Macという認識もするらしいので、文字列もキレイに
elseif(strpos($ua0, "Macintosh" ) ){
$ua1 = spliti( $ua2 , $ua0 );
$ua1[6]=$ua1[9];
$ua1[6] = str_replace('/ERE27)', '', $ua1[6]);
$domainName = $ua1[6];
}
else{
//とりあえず何もひっかからなければ通常の値を。
$domainName = $_SERVER["SERVER_NAME"];
}
これで、このソースの後にくる“&utmhn=” . urlencode($domainName) .に、Android機種名が取得されます。結果はTOPの通り。
まあ、これがOSのバージョンに、iPhoneやAndroidのときだけ入れられれば、携帯機種名とともに理想なんですけどね。
・ ・ ・ ・ ・
というわけで、年内はここまで。30日〜3日までは、更新もお休みします。本年も大変お世話になりました、ありがとうございます。
それでは、良いお年を!
インプレスジャパン
売り上げランキング: 16153

