アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセス元の端末(たとえばスマホなのかPCなのか)で表示する画像を変えたいため、アクセス端末の解像度を取得したいのですがどうすればよいでしょうか?
いろいろ探してみたのですが、javascriptばかりヒットし、use Term::ReadKeyというものも出てきたのですが、その参考ページをそっくり入れてみても動作しません。

sub agent{
%agent_type = (
qr/MSIE/i => 'p',
qr/iPhone/ => 's',
qr/iPad/ => 't',
qr/Android/ => 's',
一部省略
);
}

sub browser{
&agent;
my $ua = $ENV{'HTTP_USER_AGENT'};
foreach my $key(keys %agent_type){
if ($ua =~ $key){
$ua_type = $agent_type{$key};
last;
}
}
}

上記のような環境変数で振り分けることも考えたのですが、Androidだとスマホとタブレットと解像度が大きく違うものでも同じものをはき出してしまうかと思い、正確な振り分けができず困っています。

どうかperlだけで解決できる方法がありましたらぜひ教えてください。
よろしくお願いします。

A 回答 (4件)

Mobile::UserAgentは古すぎか。

。。
HTTP::MobileAgentのdisplayメソッドを使えば、多少ましでしょうが、
HTTP::MobileAgentは2012年が最新なのでどちらにしろ完璧な解像度を得るのは
不可能でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます
教えて頂いた方法でどこまで解像度が得られるか試してみます

お礼日時:2014/06/12 16:03

スマホは、完璧ではない(=全ての機種を判定できるわけではない)ですが、


Mobile::UserAgentのscreenDimsメソッドを使えばできると思います。

PCのクライアントの解像度はPerlだけで判定するのは無理でしょう。
HTTPリクエストに解像度の情報は含まれていないので。

javascriptで対応したほうがいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます
次も回答頂いてますので、そちらでコメントします

お礼日時:2014/06/12 15:30

 それは解像度をチェックしているのではありません。

単にユーザーエージェントを調べているだけで、解像度情報はHTTP要求ヘッダにはありません。

 スマホもPCも同じmedia="screen"であっても、幸いにスマホはCSS3に対応していますから、その拡張であるmediaqueryが利用できます。
 単純に端末の解像度で、ブラウザ自身の機能を使ってスタイルシートを切り替えるほうがはるかに容易です。javascriptのように端末でjavascriptを禁止していても利用できますし、スマホを回転させて縦横変えても切り替わります。
    • good
    • 0
この回答へのお礼

ありがとうございます
確かにスタイルシートで切り替えする方が賢明のようですね
そちらで考えてみます

お礼日時:2014/06/12 15:29

そもそも、端末が送信してこない情報をサーバ側で知る術はありません。


セッション等でサイトへの初回アクセスを検知し、初回時にJavaScriptだけのページを送って解像度情報をPOSTさせてから、本来のコンテンツを送出するようにするなどの工夫が必要でしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そうですよね、確かに送信してこない情報を知るすべなんてないですね

お礼日時:2014/06/12 15:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!