• 締切済み

携帯電話の機種名

携帯電話の機種名を掲示板に表示したいのですが、どなたかご教示いただけませんでしょうか? $ENV{'HTTP_USER_AGENT'}で取得できるのですが、機種名だけを抜き出す方法がわかりません。 宜しくお願い致します。

  • Perl
  • 回答数3
  • ありがとう数0

みんなの回答

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.3

> 下記のようなルーチンがあります。呼び出す際はどのように記述すれば良いのでしょうか? ご質問の意味がよくわからないんですが、以下に解釈して良いですか? 「phone.pl の中に理解不能なサブルーチンがあります。 試しに使ってみたいのですが....」 えと、ここいら辺は避けて通る事を強く強くお勧めします。 機種名表示の為に質問せにゃならん技術力の持ち主にとっては百害あって一利なしです。 深く説明できませんが、人様に不愉快を大きく超えた迷惑をかける結果になる危険をはらむものです。

nobody19
質問者

補足

上記の件は、phone.plとは全ったく別の話です。失礼しました

  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.2

phone.pl に限らず、環境変数から得られる機種名は「そのCGIを起動した閲覧者」が使う機種のものです。 だから、内容表示処理中に得た機種名は内容表示を見る人の機種のものです。 つまり動作は正常で、 phone.pl の導入は一旦 OK です。 (なぜ一旦かは最後に) あなたの希望が「過去の投稿画面の表示処理では、その時の投稿者の端末機種名を表示したい」であれば、投稿内容をファイルやデータベースに記憶する処理にその時得た機種名をも記憶する様にCGIを修正せねばなりません。 話題の表示処理では、その時得た機種名では無くファイル/データベースから読み出した内容を表示する必要があります。 つまりその CGI(phone.pl では無く phone.pl を組み込まれた側) の内部をかなり把握しないと出来無い修正です。 頑張ってみてください。 それらが全て完了してから、「phone.pl がちゃんと動作してるか」の本当のテストができます。 これまでは、限られた機種(例えばあなたの機種だけ)でしか正常確認ができていなかった訳ですから。 P.S. 機種名の記憶と表示は、投稿完了前に投稿者に認知させないとプライバシー問題になりかねないのでご注意を。 # 彼氏の携帯借りて投稿したら、付き合ってるのがバレちゃった、とか。

nobody19
質問者

補足

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)
回答No.1

参考URLは、 「HTTP_USER_AGENT 機種名」でググった結果です。 ご希望は全対応でしょうか? パッケージやCGIが配布されてないか、さらにググればあるんじゃ無いでしょうか。

参考URL:
http://memorva.jp/memo/mobile/http_user_agent.php
nobody19
質問者

補足

検索して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

関連するQ&A

  • Perlで携帯電話の製造番号を取得

    Perlで携帯電話の製造番号を取得 Perlで携帯電話の製造番号を取得するスクリプトを作っています。 docomoのD905iしか持っておらず、他の携帯での動作確認ができません。 以下のスクリプトで正しいでしょうか? 以下のスクリプトで、他にやっておいたほうがよい事など、 何かアドバイスがありましたらお願いします。 やりたいことは、 docomo、au、ソフトバンクのみで取得する。 iPhone、イーモバイルは取得しない。 古い携帯電話で取得できないものは切り捨てる。 携帯電話でアクセスした人が、それぞれに画面をカスタマイズでき、 次回アクセスしたときも同じ画面が表示されるようなサイトを作ろうとしています。 普通はクッキーで本人確認するのだと思いますが、携帯電話ではクッキーが 無いので、代わりに製造番号を使って本人確認しようと考えています。 1ヶ月くらいだけオープンするサイトであり、金銭的な絡みも個人情報も無いので、 携帯電話の所有者が変わったときの問題は無いと思っています。 ■ HTML <a href="./test.cgi" utn>製造番号取得</a> ■ Perl #--ソフトバンク if($ENV{'HTTP_X_JPHONE_UID'} ne ''){ $uid = $ENV{'HTTP_X_JPHONE_UID'}; } #--au elsif($ENV{'HTTP_X_UP_SUBNO'} ne ''){ $uid = $ENV{'HTTP_X_UP_SUBNO'}; } #docomo else{ $agent = $ENV{'HTTP_USER_AGENT'}; $ser_index = index($agent,'ser'); if ($ser_index != -1) { $uid = substr($agent,$ser_index+3); } } print"製造番号:$uid<br>\n"; 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 携帯電話における【USER_AGENT】とは

    携帯電話における【USER_AGENT】というのは、つまり“SH903i”のような “機種名”と考えて宜しいでしょうか? お願い致します。

  • orとelsif

    質問があります。 HTTP_USER_AGENTによって携帯端末とPC端末を振り分けるCGIを製作中です。 その際に疑問に思ったのですが、 if(($ENV{'HTTP_USER_AGENT'} =~ /***/i) or ($ENV{'HTTP_USER_AGENT'} =~ /***/i) or.....{ ~~~ } のように1行でorで繋げる方法と if($ENV{'HTTP_USER_AGENT'} =~ /***/i){ ~~~ } elsif($ENV{'HTTP_USER_AGENT'} =~ /***/i){ ~~~ } のようにelsifで繋げる方法とどちらが効率がいいのでしょうか? メモリの消費 サーバーへの負担 処理の速度 を中心にお願いします。

    • ベストアンサー
    • Perl
  • 携帯端末認識User-Agentについて

    初心者なのですが、CGIで携帯サイトを作っていますが。 実機がうまく動きません。User-Agentに問題があると考えています。 現在のソースと主な現象を記しますので、適切なものを教えて下さい。お願いします。 #----------# # 端末認識 # #----------# sub useragent { my $ua; #次にi-mode端末かどうかチェック if ($ENV{'HTTP_USER_AGENT'} =~ /^DoCoMo\/\d/) { $ua = 1; #次にJ-Phone端末かどうかチェック } elsif ($ENV{'HTTP_USER_AGENT'} =~ /^J-PHONE\/\d/) { $ua = 2; #EZweb端末かどうかチェック } elsif (($ENV{'HTTP_USER_AGENT'} =~ 'UP.B') && ($ENV{'HTTP_X_UP_SUBNO'} ne "")){ $ua = 3; #その他はPCとする } else { $ua = 0;} #PCブラウザ再判定 if ($ENV{'HTTP_USER_AGENT'} =~ /Mozilla\/|MSIE|Netscape|Opera|Lynx|AOL|Gecko/) {$ua = 0;} return $ua; } 主な現象 AU:ページ表示ごとに、いちいちブラウザメニューからページ更新をしなければならない(AUの特性もありますが) ソフトバンク:携帯版ではなく、PC版が表示されてしまう。 ドコモ :Pは問題ないようだが、SHは会員登録画面のフォームが半分の項目しか表示されず、次のページで残りの半分 は表示されるが、フォームにすべて書き込んで、登録送信をクリックしても、エラーデータ、の表示が出る。

    • 締切済み
    • CGI
  • iモード用ASPで電話番号を取得可能か

    iモード用のASPで、接続している携帯電話の電話番号か機体番号を取得することは可能でしょうか? 認証に使いたいのです。 HTTP_USER_AGENT情報で機体番号を取得できるということを聞いたのですが、具体的な方法がわかりません。 関連情報について何かご存知でしたら、教えていただけないでしょうか?

  • CGIの時間の環境変数

    ちょっとタイトルがあっているのか、イマイチ心配なのですが(汗) フォームのCGIを作っています。 登録情報がメールで届くようにしています。 ホスト名とかIPアドレス、ユーザーエージェントは下記でできました。 $host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2); $addr = $ENV{'REMOTE_ADDR'}; $HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'}; フォームに登録してくれた曜日とか時間を取るやり方がわかりません。 どなたかお知恵をお貸しください m(__)m

  • 信頼性

    普通ユーザーエージェントを取得する際には「$ENV{'HTTP_USER_AGENT'}」を使いますよね。 ただ、この値は詐称されやすいと聞きました。 いま「$ENV{'REMOTE_USER'}」でユーザー認証のサイトを作っているのですが、この値の信頼性はいかがなものなんでしょうか? また、REMOTE_ADDRの信頼性もいかがなものなのでしょうか? ご回答お願いします。

    • ベストアンサー
    • Perl
  • 複数の比較( =~ )を効率よくまとめたい

    アクセス端末によって見え方を変えさせるため、条件節ifで =~ を使って分岐させているのですが、ユーザーエージェントがあまりにも多く、コードが長くなりすぎ制作に支障が出てきています 100%完璧に分岐させるところまでは求めていないため(アクセスの95%程度うまく分けられればいいかと思ってます)、たとえばスマホの場合はiPhoneとかAndroid、PCの場合はMSIEなど極力共通の部分を見つけてまとめてはいますが、それでも携帯、スマホ、PCと分けると非常に多くなり、 if(($ENV{'HTTP_USER_AGENT'} =~ /MSIE/) || ($ENV{'HTTP_USER_AGENT'} =~ /Firefox/)){} など比較の片方は同じなのに同じことを何度も書く必要があり、非効率かつ強烈に長くなってしまい何とかまとめられないかと格闘しています たとえば別で $os_pc = "MSIE,Firefox"; $os_mb = "DoCoMo,KDDI"; など別でまとめて、 if($ENV{'HTTP_USER_AGENT'} =~ /$os_pcの,で分解したそれぞれの文字列と比較/){ PCと判定 }elsif($ENV{'HTTP_USER_AGENT'} =~ /$os_mbの,で分解したそれぞれの文字列と比較/){ 携帯と判定 } といったように、スマートに条件分岐させられないかと模索中ですが、=~ で別で用意したデータを,で分解してそれぞれと比べるとかできないでしょうか。 =~での比較ではなく、他の方法でもかまいませんので、ぜひお知恵をお貸しください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • HTTP_USER_AGENTの変更の仕方

    宜しくお願い致します。 私のHTTP_USER_AGENTが (Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.1.4322) なのですが、このHTTP_USER_AGENTを変更する方法はあるのでしょうか? ある掲示板を見ていて、好きな文字に変えたりしていたのでどうやってやるんだろう? と疑問に思っています、ご存知の方いましたら教えて下さい、宜しくお願いします。

  • ユーザーエイジェントの置き換え

    ユーザーエイジェントを検索して UP.Browserという文字列があった場合、 ユーザーエイジェントをauという置き換え表示したいと思っています。 具体的には KDDI-KC3R UP.Browser/6.2_7.2.7.1.K.4.310 (GUI) MMP/2.0 ↓ au と表示したいのですが、 Perlで記述する場合以下のように書いて間違えありませんか? 間違いなどありましたご指摘ください。 if($ENV{'HTTP_USER_AGENT'} =~ /UP.Browser/) { $agent=~s/$ENV{'HTTP_USER_AGENT'} /au/g; }

    • ベストアンサー
    • Perl

専門家に質問してみよう