#!/usr/local/bin/perl # # osaka.cgi by Take # httpでファイルを持ってきて大阪弁に変換する # # $lib_dir = '/cgi/foo/libwww'; # libwwwを別のディレクトリに置く時に設定する # push(@INC,$lib_dir); require "www.pl"; require "wwwurl.pl"; require "wwwerror.pl"; $CGI_DIR = '/foo/osaka/'; # 自分の環境に合わせて書き換えること $CGI_URL = 'http://www.***.ne.jp/~foo/osaka/'; # 自分の環境に合わせて書き換えること $HTM_URL = 'http://www.***.ne.jp/~foo/osaka/'; # 自分の環境に合わせて書き換えること # &set_proxy; # $pname = $0; # $pname =~ s#^.*/([^/]+)$#$1#; # lose the path # $pname =~ tr/a-z/A-Z/; # uppercase it $method = 'GET'; # Method = program name $UserAgent = "osaka.cgi/0.11 ($HTM_URL)"; # Set up User-Agent: header &www'set_def_header('http', 'User-Agent', $UserAgent); $pwd = ( $ENV{'PWD'} || $ENV{'cwd'} || '' ); $Base = "file://localhost$pwd/"; # Set up initial Base URL $Tout = 60; # Time-out in seconds $Ims = ''; # If-Modified-Since header $home = $CGI_DIR; $tempfile = $home . "temp"; $basedir = ''; 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; $FORM{$name} = $value; } $url = $FORM{'URL'}; # WebページのURLを取得 $url =~ s///g; $flag_osaka = ($FORM{'osaka'} ne ''); # 大阪弁変換 0:しない 1:する $flag_okochama = ($FORM{'okochama'} ne ''); # お子ちゃま変換 0:しない 1:する $flag_nyanko = ($FORM{'nyanko'} ne ''); # にゃんこ変換 0:しない 1:する $flag_more = ($FORM{'more'} ne ''); # 連続変換 0:しない 1:する if ($flag_more){ $conv = $CGI_URL . sprintf("osaka.cgi?more=1%s%s%s&URL=",($flag_osaka?'&osaka=1':''),($flag_okochama?'&okochama=1':''),($flag_nyanko?'&nyanko=1':'')); } if (!($flag_osaka | $flag_okochama | $flag_nyanko)){ $flag_osaka = 1; } if ($url eq '' || $url eq 'http://'){ print "Location: " . $HTM_URL . "\n\n"; exit(0); } $url = &wwwurl'absolute($Base, $url); &set_basedir; %headers = (); $headers = ''; $content = ''; $headers{'Referer'} = $ENV{'HTTP_REFERER'}; $headers{'Forwarded'} = 'by $HTM_URL for '.$ENV{'REMOTE_HOST'}; if ($ENV{'HTTP_FORWARDED'} ne ''){ $headers{'Forwarded'} .= ', '.$ENV{'HTTP_FORWARDED'}; } $url =~ m#://([^/]+)/#; $host = $1; if ($host ne ''){ $headers{'Host'} = $host; } $response = &www'request($method, $url, *headers, *content, $Tout); $content =~ s/charset=[-A-Za-z0-9_]+/charset=ISO-2022-JP/i; if ($flag_more){ &conv_more; } $content =~ s###i; if (!open(OUT,">$tempfile")) { print $errormes_hed; print "

ERROR: Cannot open $tempfile

\n"; print $errormes_tail; exit(0); } flock(OUT,2); # ファイルをロック print OUT $content; close(OUT); print "Content-type: text/html\n\n"; $cmd_line = sprintf("/bin/nkf -e $tempfile %s%s%s| /bin/nkf -j",($flag_osaka?'| ./osaka ':''),($flag_okochama?'| ./okochama ':''),($flag_nyanko?'| ./nyanko ':'')); print `$cmd_line`; exit; # プロキシの設定 sub set_proxy { $ENV{'http_proxy'} = "http://10.0.1.254:8080/"; $ENV{'https_proxy'} = "http://10.0.1.254:8080/"; $ENV{'ftp_proxy'} = "http://10.0.1.254:8080/"; } sub set_basedir { $basedir = $url; if (($basedir =~ m#http://([^/]*)/(.*)#i) && ($2 =~ m#/#)){ $basedir =~ s#([^/]*)$##; } if (!($basedir =~ m#/$#)){ $basedir .= '/'; } } sub conv_more { $basedir =~ m#(.*)://#; $hosturl = $1 . '://' . $host; @lines = split(/HREF=/i, $content); for($content=$prev=shift(@lines); $line=shift(@lines); $prev=$line){ if ($prev=~/