Android機種名を取得するPHPコード

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

何気にこんな機種もあるんですね。これはタブレットに分類したいなあ。

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日までは、更新もお休みします。本年も大変お世話になりました、ありがとうございます。

それでは、良いお年を!
 

できる100ワザ Google Analytics 増補改訂版 SEO&SEMを強化する新・アクセス解析術
大内 範行 できるシリーズ編集部
インプレスジャパン
売り上げランキング: 16153