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