package ma_lib; #****************************************************************************** #ma_lib.pl # #modified :2003/04/05 #Copyright :The Room #E-Mail :dream@lib.net #URL :http://dream.lib.net/room/ # #これはフリー素材です。 #転載・商用目的の利用の際には、メールをお願いします。 #*あまり汎用性は考えて作られていません。 #****************************************************************************** # # インポート方法 require 'ma_lib.pl'; # # ----------------------------------------------------------------------------- # # 使い方 @result = &ma_lib::terminal_check(); # # 概要 端末の情報を取得する # # 返り値 ($user_agent,$terminal,$t_sy,$t_name,$t_color,$t_mime) # # # user_agent 環境変数 HTTP_USER_AGENT # # terminal 機種ごとの番号 # 0 i-mode # 1 J-Skyweb # 2 EZweb # 3 ドットi # 4 H" # 5 PCその他 # # t_sy 機種ごとの略称 # i-mode -> i # J-Skyweb -> J # EZweb -> E # ドットi -> D # H" -> H # PCその他 -> (返り値なし) # # t_name 端末名 # ただしH"は H"/PDX または feelH" のいずれかの世代を返す。 # J-Skywebについてはロット番号を削除して返す。 # PCその他の場合は返り値なし。 # # t_color 発色数 # 0 ->不明 # 1 ->白黒 # 2 ->白黒4階調 # 3 ->16色 # 4 ->256色 # 5 ->256色以上 # # t_mime 機種ごとに対応しているMIMEタイプ # i-mode -> text/html # J-Skyweb -> text/html # EZweb -> text/x-hdml # ドットi -> text/html # H" -> text/plain # PCその他 -> text/html # # #****************************************************************************** #i-mode # USER_AGENT # DoCoMo/1.0/F502i/c10 # DoCoMo/1.0/F502i # 機種名は3番目の値。 #機種別発色数情報 %imode_color = ( 'D501i','1', 'F501i','1', 'N501i','1', 'P501i','1', 'D502i','4', 'F502i','4', 'N502i','2', 'P502i','2', 'NM502i','1', 'SO502i','2', 'F502it','4', 'N502it','4', 'SO502iWM','4', 'F503i','4', 'P503i','4', 'N503i','5', 'D503i','5', 'SO503i','5', 'SH503i','5', 'F503iS','5', 'P503iS','4', 'N503iS','5', 'D503iS','5', 'SO503iS','5', 'D504i', '5', 'F504i', '5', 'F504iS','5', 'N504i', '5', 'N504iS','5', 'SO504i','5', 'P504i', '5', 'P504iS','5', 'D209i','4', 'F209i','4', 'N209i','2', 'P209i','2', 'R209i','2', 'KO209i','4', 'ER209i','1', 'P209iS','4', 'D210i','4', 'F210i','4', 'N210i','4', 'P210i','4', 'KO210i','4', 'SO210i','4', 'D211i','5', 'F211i','5', 'N211i','5', 'P211i','5', 'SO211i','5', 'R211i','5', 'F212i' , '5', 'SO212i', '5', 'D251i', '5', 'D251iS', '5', 'F251i', '5', 'N251i', '5', 'P251iS', '5', 'SH251i', '5', 'SH251iS', '5', 'SH601em','1', 'P651ps','1', 'F671i','5', 'F671iS', '5', 'P751v', '5', 'R691i','2', 'R692i', '5', 'ex_navi_1.0','0', 'ex_navi_2.0','0', 'P821i','2', 'N821i','2', 'SH821i','4', '633S','5', '641P','4', '641S','4', '641Sf','4', '641Ss','4', '642S','5', 'SH712m','4', 'PD555S','1', 'N2001', '5', 'N2002', '5', 'N2051', '5', 'N2401', '5', 'D2101V','5', 'P2002', '5', 'P2101V','5', 'P2102V','5', 'T2101V','5', 'F2051', '5', 'F2611', '0' ); #****************************************************************************** #J-Skyweb # HTTP_USER_AGENT # J-PHONE/2.0/J-DN02 # J-PHONE/2.0/J-DN02_a # ロット番号も含まれる場合がある。 # が、旧機種はデータを吐かない可能性がある(?)ため、 # HTTP_X_JPHONE_MSNAME # HTTP_X_JPHONE_SOUND # HTTP_X_JPHONE_DISPLAY # HTTP_X_JPHONE_COLOR # で検出を行う。 # MSNAMEは、やはりロットを含む場合がある。 # #****************************************************************************** #EZweb # # HTTP_USER_AGENT # UP.Browser/3.03-HI11 UP.Link/3.2.2.7c # UP.Browser/3.04-HI12 UP.Link/3.2.2.7c # KDDI-HI21 UP.Browser/6.0.2.254(GUI) MMP/1.1 (cdmaOne3000,5000シリーズ) #EZweb機種データ # 'デバイスID','端末名' %ez_terminal=( 'TS24','A5304T', 'SA24','A1302SA', 'SN23','A1301S', 'SYT4','TS31', 'KCTB','TK23', 'KCTA','TK22', 'TST6','TT22', 'KCT9','TK21', 'SYT1','TSO1', 'CA22','A5302CA', 'HI23','A5303H', 'SA22','A3015SA', 'TS23','A5301T', 'ST14','A1014ST', 'KC15','A1013K', 'TST5','TT21', 'TS21','C5001T', 'SN21','A3014S', 'TS22','A3013T', 'CA21','A3012CA', 'SA21','A3011SA', 'MA21','C3003P', 'KC21','C3002K', 'HI21','C3001H', 'SN22','A1101S', 'KC14','A1012K', 'ST13','A1011ST', 'SY15','C1002S', 'SN17','C1001SA', 'CA11','C303CA', 'CA12','C311CA', 'CA13','C409CA', 'CA14','C452CA', 'DN01','C202DE', 'DN11','C402DE', 'HI01','C201H', 'HI02','C201H', 'HI11','C302H', 'HI12','C309H', 'HI13','C407H', 'HI14','C451H', 'KC11','C307K', 'KC12','C313K', 'KC13','C414K', 'KCC1','D303K', 'KCC2','D304K', 'KCI1','702G', 'KCI2','703G', 'KCT1','TK01', 'KCT2','TK02', 'KCT3','TK02', 'KCT4','TK03', 'KCT5','TK04', 'KCT6','TK05', 'KCT7','TK11', 'KCT8','TK12', 'MA11','C308P', 'MA12','C308P', 'MA13','C408P', 'MAC1','D305P', 'MAC2','D305P', 'MAI1','704G', 'MAI2','704G', 'MAT1','TP01', 'MAT2','TP01', 'MAT3','TP11', 'MIT1','TD11', 'SN11','C305S', 'SN12','C404S', 'SN13','C406S', 'SN14','C404S', 'SN15','C413S', 'SN16','C413S', 'SNC1','D306S', 'SNI1','705G', 'ST11','C403ST', 'ST12','C411ST', 'SY11','C304SA', 'SY12','C401SA', 'SY13','C405SA', 'SY14','C412SA', 'SYC1','D301SA', 'SYT1','TS01', 'SYT2','TS02', 'SYT3','TS11', 'TS11','C301T', 'TS12','C310T', 'TS13','C410T', 'TS14','C415T', 'TSC1','D302T', 'TSI1','701G', 'TST1','TT01', 'TST2','TT02', 'TST3','TT03', 'TST4','TT11', 'D2','D2', 'NT95','UP.SDK', 'P-PAT','P-PAT', 'SP01','UP.SDK', 'UPG1','UP.SDK' ); #****************************************************************************** #ドットi # # HTTP_USER_AGENT # ASTEL/1.0/J-0511.00/c10/smel # AJ-51 Ver1.00を示す。 # 今のところ、AJ-51しか無い。 #ドットi機種別発色数 %doti_color = ( 'AJ-51','2' ); #****************************************************************************** #H" # # HTTP_USER_AGENT # PDXGW/1.0(TX=8;TY=4;GX=96;GY=65;C=G2;G=B2;GI=0) # C の値が発色数。値が無い場合は白黒2階調。 # G2 白黒2階調 / C4 カラー4色(白黒4階調として集計) # C256 カラー256色 / CF フルカラー(65536色以上として集計) # 端末名が判断不可能な為、代わりに世代識別を行う。 # GI=0/1 H"/PメールDX / GI=2 feelH" #****************************************************************************** sub terminal_check{ my $user_agent=$ENV{'HTTP_USER_AGENT'}; my $jsky1=$ENV{'HTTP_X_JPHONE_COLOR'}; my $jsky2=$ENV{'HTTP_X_JPHONE_DISPLAY'}; my $jsky3=$ENV{'HTTP_X_JPHONE_MSNAME'}; my $jsky4=$ENV{'HTTP_X_JPHONE_SOUND'}; my ($terminal,$t_name,$t_color,$t_sy,$t_mime,$t_temp); #デバッグ用 # $user_agent="DoCoMo/1.0/F501i"; #i-mode白黒 # $user_agent="DoCoMo/1.0/F502i"; #i-modeカラー # $user_agent="DoCoMo/1.0/ex_navi_2.0_AA1234"; #自動車電話 # $user_agent="DoCoMo/2.0 P2101V(c100)"; #FOMA # $user_agent="J-PHONE/2.0/J-DN02";$jsky1="G2";#J-Sky白黒 # $user_agent="J-PHONE/2.0/J-DN02";$jsky1="C256";#J-Skyカラー # $user_agent="UP.Browser/3.03-HI11 UP.Link/3.2.2.7c";#EZ白黒 # $user_agent="UP.Browser/3.04-HI12 UP.Link/3.2.2.7c";#EZカラー # $user_agent="KDDI-HI21 UP.Browser/6.0.2.254(GUI) MMP/1.1";#EZ 300x/500x系 # $user_agent="ASTEL/1.0/J-0511.00/c10/smel";#ドットi白黒 # $user_agent="PDXGW/1.0(TX=8;TY=4;GX=96;GY=65;C=G2;G=B2;GI=0)";#H"白黒 #i-mode########################################################################## if (($user_agent =~ /^DoCoMo\/\d+\.\d+\/([^\/]*)/i) || ($user_agent =~ /^DoCoMo\/2\.0 ([^\(]*)/i)) { $terminal = 0; $t_name = $1; if ($t_name =~ /(ex_navi_\d\.\d)/){ $t_name = $1; } $t_color = $imode_color{$t_name}; $t_color = 0 if $t_color eq ""; $t_sy = "i"; $t_mime = "text/html"; #J-Skyweb######################################################################## } elsif ($jsky1 ne "" || $jsky2 ne "" || $jsky3 ne "" || $jsky4 ne "" || $user_agent =~ /^J-PHONE/){ #J-Skyweb $terminal = 1; $jsky3 = $1 if $jsky3 =~ /(.*)_/; $t_name = $jsky3; $t_name = "Unknown" if $jsky3 eq ""; if ($jsky1 eq "G2"){$t_color=1;} elsif ($jsky1 eq "G4"){$t_color=2;} elsif ($jsky1 eq "C16"){$t_color=3;} elsif ($jsky1 eq "C256"){$t_color=4;} elsif ($jsky1 eq "C4096"){$t_color=5;} elsif ($jsky1 eq "C65536"){$t_color=5;} else{$t_color=0;} $t_sy = "J"; $t_mime = "text/html"; #EZWeb######################################################################### } elsif ($user_agent =~ /^UP\.Browser[^-]*-(\w*) /i || $user_agent =~ /^KDDI-([^ ]*) /i) { $terminal = 2; $t_temp = $1; $t_name = $ez_terminal{$t_temp}; $t_color = (split(/,/,$ENV{'HTTP_X_UP_DEVCAP_SCREENDEPTH'}))[0]; if ($t_color > 256){$t_color = 5;} elsif ($t_color > 16){$t_color = 4;} elsif ($t_color > 2){$t_color = 3;} elsif ($t_color == 2){$t_color = 2;} elsif ($t_color == 1){$t_color = 1;} else{$t_color = 0;} $t_name = "Unknown" if $t_name eq ""; $t_color = 0 if $t_color eq ""; $t_sy = "E"; $t_mime = "text/x-hdml"; #ドットi####################################################################### } elsif ($user_agent =~ /^ASTEL\//) { #ドットi $terminal = 3; $t_name = $1 if $user_agent =~ /ASTEL\/\d+\.\d+\/(.*)\d\.\d+/; $t_color = 2; $t_sy = "D"; $t_mime = "text/html"; # H" ########################################################################## } elsif ($user_agent =~ /^PDXGW\/\d\.\d/i){ $terminal = 4; $t_temp=$1 if $user_agent =~ /C=(\w*);/; if ($t_temp eq "C4"){$t_color=2;} elsif ($t_temp eq "C256"){$t_color=4;} elsif ($t_temp eq "CF"){$t_color=5;} else{$t_color=1;} $t_temp=$1 if $user_agent =~ /GI=(\d)/; if ($t_temp == 2){$t_name="feelH\"";} else{$t_name="H\"/PDX";} $t_sy = "H"; $t_mime = "text/plain"; #その他の媒体################################################################## }else{ $terminal = 5; $t_name = "PCその他"; $t_color = $t_sy = ""; $t_mime = "text/html"; } return ($user_agent,$terminal,$t_sy,$t_name,$t_color,$t_mime); } 1;