趣旨
最近ユーザーエージェントが話題です。
流行に乗ってUser AgentからAndroidの端末モデル名を取得する方法を試してみました。
これで気になるあの子がどの端末を使っているかも丸わかり
早速ですが、こちらです。
ua="{User Agent}"
echo $ua | sed -e "s/; wv//" | sed -e "s/^.*; //" | sed -e "s/ Build.*//" | sed -e "s/[)].*//"
具体的には、
; wv
を空文字に置換
^.*;
を空文字に置換
Build.*
を空文字に置換
[)].*
を空文字に置換
解説
AndroidのUser Agentは
Mozilla/5.0 (Linux; U; Android 8.0.0; {Model} Build/xxxx.xxxxxx.xxx; wv) AppleWebKit/....
みたいな感じ。
最初の()の中にある{Model}を取得したい。
ただし、この()が色々パターンがあって・・・
wsがついていなかったり
(Linux; U; Android 8.0.0; {Model} Build/xxxx.xxxxxx.xxx)
Build番号が入っていなかったり
(Linux; U; Android 8.0.0; {Model})
言語コードが入っていたり
(Linux; U; Android 8.0.0; ja-JP; {Model} Build/xxxx.xxxxxx.xxx; wv)
などなど
そこで・・・・
-
; wv
を除去(2の処理でこの;が邪魔になるので) - 先頭から
;
までを全部除去(これで先頭がModel名になるはず。Model以降に;が無いことを祈る(今の所無さそう)) - Build番号以降を除去→これでModel名だけ残る
- )以降を除去(Build番号がないケースの対応)
取得したモデル名を下記のページで照会すればブランド名も丸わかり
おことわり
本来であればUser Agentの構文をちゃんと理解して着手するべきですが、脳みそが足らなかったので、実際のUAを眺めながら帰納的に対応。
どうせUAから取得する意味もなくなるし、もしかしたらもっと楽に取得できるのかもしれないですね。
https://wicg.github.io/ua-client-hints/#http-ua-hints