#!/usr/bin/perl # # ページジャンパCGI # (c) 2000 by irao(irao@irao.com) #-------------------------------------------------------------------# local $rcsid = q$Id: jumper.cgi/v1.01 2000/07/01 irao Exp $; local $version = ($rcsid =~ m|/v([\d.]+)|)? ("version " . $1) : 'unknown'; local $copyright = "Copyright (c) 1999 by Irao. All rights reserved."; # i-mode 版の場所(パス/URL) $page_i = 'http://www.night-cruising.tv/blackbox/mobile.html'; # J-sky 版の場所(パス/URL) $page_j = 'http://www.night-cruising.tv/blackbox/mobile.html'; # EZweb 版の場所(パス/URL) $page_ez = 'http://www.night-cruising.tv/blackbox/mobile.html'; # PC 版の場所(パス/URL) $page_pc = 'http://www.night-cruising.tv/blackbox/pc.html'; # ドットi 版の場所(パス/URL) $page_a = 'http://www.night-cruising.tv/blackbox/pc.html'; &main; sub main { &init; $hua = $ENV{'HTTP_USER_AGENT'}; # SkyWeb $jp_name = "SkyWeb" if ($ENV{'REMOTE_HOST'} =~ /wgpproxy\d+\.sky\.jp-\w\.ne\.jp/); # J-sky $jp_name = $ENV{'HTTP_X_JPHONE_MSNAME'} if ($ENV{'HTTP_X_JPHONE_MSNAME'} !~ /^\s*$/); # パラメータが与えられたときの処理(強制モード) $hua = "ASTEL" if ($FORM{'sv'} =~ /^di$/i); $hua = "DoCoMo" if ($FORM{'sv'} =~ /^im$/i); $hua = "UP.Browser/3.0" if ($FORM{'sv'} =~ /^ez$/i); $jp_name = "J-Sky" if ($FORM{'sv'} =~ /^js$/i); # 機種判別の方法 # ASTEL $ENV{'HTTP_USER_AGENT'}が"ASTEL"を含む # ezWeb $ENV{'HTTP_USER_AGENT'}が"UP.Browser"を含む # i-mode $ENV{'HTTP_USER_AGENT'}が"DoCoMo"を含む # J-sky $ENV{'HTTP_X_JPHONE_MSNAME'}が空でない # あるいは$ENV{'REMOTE_HOST'}が"wgpproxy[0-9]+.sky.jp-[a-z].ne.jp"を含む # 参考 # PDX $ENV{'HTTP_USER_AGENT'}が"PDXGW"を含む # PDA $ENV{'HTTP_USER_AGENT'}が"sharp pda browser"を含む # または"Dialo"を含む # 以下では簡単のため$hua = $ENV{'HTTP_USER_AGENT'}としている # ezWeb if ($hua =~ m|UP\.Browser/[\d.]+|) { # ezWebではHTTP応答コード302に対応してないみたいなので # HDMLで自動ジャンプさせる # NODISPLAYでのACCEPT-ACTIONはユーザーが操作しなくても # TASKを実行する(この場合$page_ezへGO) print <<"EOD"; Content-Type: text/x-hdml;charset=Shift_JIS EOD # i-mode } elsif ($hua =~ /DoCoMo/i) { print "Location: $page_i\n\n"; # J-sky / Skyweb } elsif ($jp_name !~ /^\s*$/) { # $jp_name が空でなければ J-sky print "Location: $page_j\n\n"; ## 参考: PDXの場合. PDAも同様 (PDX って Location 使えたっけ?) # } elsif ($hua =~ /PDXGW/) { # print "Location: $page_pdx\n\n"; # } # ドットi } elsif ($hua =~ /ASTEL/i) { print "Location: $page_a\n\n"; # その他(PC) } else { print "Location: $page_pc\n\n"; } exit; } # パラメータの取得 sub init { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\n//g; $FORM{$name} = $value; } }