- 締切済み
携帯電話の機種名
携帯電話の機種名を掲示板に表示したいのですが、どなたかご教示いただけませんでしょうか? $ENV{'HTTP_USER_AGENT'}で取得できるのですが、機種名だけを抜き出す方法がわかりません。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- zxcv0000
- ベストアンサー率56% (111/196)
> 下記のようなルーチンがあります。呼び出す際はどのように記述すれば良いのでしょうか? ご質問の意味がよくわからないんですが、以下に解釈して良いですか? 「phone.pl の中に理解不能なサブルーチンがあります。 試しに使ってみたいのですが....」 えと、ここいら辺は避けて通る事を強く強くお勧めします。 機種名表示の為に質問せにゃならん技術力の持ち主にとっては百害あって一利なしです。 深く説明できませんが、人様に不愉快を大きく超えた迷惑をかける結果になる危険をはらむものです。
- zxcv0000
- ベストアンサー率56% (111/196)
phone.pl に限らず、環境変数から得られる機種名は「そのCGIを起動した閲覧者」が使う機種のものです。 だから、内容表示処理中に得た機種名は内容表示を見る人の機種のものです。 つまり動作は正常で、 phone.pl の導入は一旦 OK です。 (なぜ一旦かは最後に) あなたの希望が「過去の投稿画面の表示処理では、その時の投稿者の端末機種名を表示したい」であれば、投稿内容をファイルやデータベースに記憶する処理にその時得た機種名をも記憶する様にCGIを修正せねばなりません。 話題の表示処理では、その時得た機種名では無くファイル/データベースから読み出した内容を表示する必要があります。 つまりその CGI(phone.pl では無く phone.pl を組み込まれた側) の内部をかなり把握しないと出来無い修正です。 頑張ってみてください。 それらが全て完了してから、「phone.pl がちゃんと動作してるか」の本当のテストができます。 これまでは、限られた機種(例えばあなたの機種だけ)でしか正常確認ができていなかった訳ですから。 P.S. 機種名の記憶と表示は、投稿完了前に投稿者に認知させないとプライバシー問題になりかねないのでご注意を。 # 彼氏の携帯借りて投稿したら、付き合ってるのがバレちゃった、とか。
補足
zxcv0000様 有難う御座います!あっているかどうか分かりませんが下記のような ルーチンがあります。呼び出す際はどのように記述すれば良いのでしょうか? hoge->hoge("hoge"); ←こちらで良いでしょうか?? #端末ID取得ルーチン sub get_dev_id { # Docomo if ($ENV{'REMOTE_HOST'} =~ /docomo\.ne\.jp$/i) { if ($ENV{'HTTP_USER_AGENT'} =~ /(ser\w+)/i) { return $1;} else { return '';} } # Ez-Web elsif ($ENV{'REMOTE_HOST'} =~ /ezweb\.ne\.jp$/i) { if ($ENV{'HTTP_X_UP_SUBNO'} ne '') { return "$ENV{'HTTP_X_UP_SUBNO'}";} else { return '';} } # J-SKY elsif ($ENV{'REMOTE_HOST'} =~ /jp\-[\w]\.ne\.jp$/i) { if ($ENV{'HTTP_USER_AGENT'} =~ /(SN\w+)/) { return $1;} else { return '';} } } #端末ID取得可能判定ルーチン sub available_dev_id { if ($ENV{'REMOTE_HOST'} =~ /docomo\.ne\.jp$/i) { if ($ENV{'HTTP_USER_AGENT'} =~ /501i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /502i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /821i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /P651ps/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /R691i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /F210i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /KO210i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /N210i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /P210i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /F671i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /SO210i/i) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /SH251i/) { return 0;} elsif ($ENV{'HTTP_USER_AGENT'} =~ /SH251iS/) { return 0;} } # J-SKY elsif ($ENV{'REMOTE_HOST'} =~ /jp\-[\w]\.ne\.jp/i) { if ($ENV{'HTTP_USER_AGENT'} =~ /J\-PHONE\/[23]\.0\//) { return 0;} } return 1; }
- zxcv0000
- ベストアンサー率56% (111/196)
参考URLは、 「HTTP_USER_AGENT 機種名」でググった結果です。 ご希望は全対応でしょうか? パッケージやCGIが配布されてないか、さらにググればあるんじゃ無いでしょうか。
補足
検索してphone.plというライブラリを設置してみたのですが、 エラーは出ずに動きました。ですが書込みをした機種が表示されるのではなくアクセスしてる自分の機種が表示されます。 コードを書く部分が間違っているのでしょうか? (include.pl) 共通の設定とサブルーチン #ブラウザ判別 # <IN> なし # <OUT> ブラウザ種別(不明の場合は'etc') sub getAgent { if ( $dbg ) { print DBG "---サブルーチン:getAgent---\n" } my( $ret, $camera, $home, $new, ); my( @user_agent ) = split(/\//,$ENV{'HTTP_USER_AGENT'}); if ($user_agent[0] eq 'ASTEL') { $ret = 'di'; # ドットi } elsif ($user_agent[0] eq 'UP.Browser') { $ret = 'ez'; # EZweb 旧端末 } elsif ($user_agent[0] =~ /^KDDI/) { $ret = 'ez'; # EZweb WAP2.0 対応端末 } elsif ($user_agent[0] eq 'PDXGW') { $ret = 'h'; # H" } elsif ($user_agent[0] eq 'DoCoMo') { $ret = 'i'; # i-mode } elsif ($user_agent[0] eq 'J-PHONE') { $ret = 'J'; # J-SKY } elsif ($user_agent[0] eq 'L-mode') { $ret = 'L'; # L-mode } elsif ($user_agent[0] eq 'Mozilla') { $ret = 'PC'; # パソコン } else { $ret = 'etc'; # それ以外 } $date .= "<BR>[$ret]からの投稿"; ##新たに追記しました## # UA記録終了 # 携帯機種記録 require "phone.pl"; my $phone = &phone_info(); if ( $phone->{type} ){ $date .= "<BR>[$phone->{type}/$phone->{name}]"; } else { $date .= "<BR>[PC]"; } # 携帯機種記録終了 (bbs.cgi) 掲示板メイン部分 print "<font size=1>$phone->{type}$phone->{name}</font>"; http://www.kawa.net/works/perl/phone/pnews.html#usage1
補足
上記の件は、phone.plとは全ったく別の話です。失礼しました