#!/usr/local/bin/perl require '../jcode.pl'; #■--------------------------------------------------------------------- #■ システム情報 #■--------------------------------------------------------------------- $this = "../edge/edge.cgi"; $ver = 'Version 0.20'; $urllistfile = 'urllist.dat'; #■フルURLを指定して下さい $cgiurl = ''; #■GET処理---------------------------------------------------------- $formdata = $ENV{'QUERY_STRING'}; $formdata =~ s/\+/ /g; # '+' -> ' ' #■$formdata の各部分を"&"で分割して配列に格納---------------------------- @pairs = split(/&/,$formdata); #■各データ内無効文字列の変換と文字コードの設定-------------------------- foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); #■引数内の<>やスペースを変換 $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #■jcode.plを使ってShift-JISにコンバート(sjisの部分) #■JISにするときはjis,EUCはeucと設定 &jcode'convert(*value,sjis); $DAT{$name} = $value; } # extract of number $str = $DAT{'pdxdata'}; # for jperl mode (euc version) # &jcode'convert(*str,'euc'); # $str =~ tr/0-9/0-9/; # for perl mode $str =~ s/0/0/g; $str =~ s/1/1/g; $str =~ s/2/2/g; $str =~ s/3/3/g; $str =~ s/4/4/g; $str =~ s/5/5/g; $str =~ s/6/6/g; $str =~ s/7/7/g; $str =~ s/8/8/g; $str =~ s/9/9/g; # cut (CR)(LF) and.. #$str =~ s/[^0-9]//g; # for pitch $data = $str; #■HTMLヘッダ表示 print "Content-Type: text/plain\r\n"; #print "Content-Type: text/html\r\n"; print "\r\n"; #■エッジヘッダ表示 print "From: $cgiurl\r\n"; print "Content-Type: Text/Plain\r\n"; print "\r\n"; &main_data_recive; &socket; &pdxout; exit; #■入力を受け取って処理----------------------------------------- sub main_data_recive { #■最初に表示するURLは件名から得る if($data eq '') { $datafile = $DAT{'pdxsubj'}; } else { #■それ以降はURLリストファイルと照合してURLを得る open(FILE,"$urllistfile") or die "URLリストファイルを読み込めません"; @URLLIST = ; close(FILE); foreach $list (@URLLIST) { ($no,$url) = split(/:=:/,$list); chop($url); &jcode'convert(*url,sjis); $no = $no + 0; $data = $data + 0; if($no eq $data) { $datafile = $url; } } } # $datafile = "http://www3.plala.or.jp/bountyhunter/"; #■目的URLからサーバー名を抽出 ($trust,$work) = split(/^http:\/\//,$datafile); ($server,$trust) = split(/\/.*$/,$work); # ($work,$trust) = split(/[0-9a-zA-Z^]*\.htm.*/,$work); } #■ソケット処理--------------------------------------- sub socket { use Socket; $port = getservbyname('http','tcp'); $iaddr = inet_aton($server) or die "$serverは存在しないホストです\r\n"; $sock_addr = pack_sockaddr_in($port,$iaddr); socket(SOCKET,PF_INET,SOCK_STREAM,0) or die "ソケットを生成できません\r\n"; connect(SOCKET,$sock_addr) or die "$serverのポート$portに接続できません\r\n"; select(SOCKET); $|=1; select(STDOUT); print SOCKET "GET $datafile HTTP/1.0\r\n"; print SOCKET "\r\n"; while () { m/^\r\n$/ and last; } } #■リンク番号の挿入と表示とURLリスト作成------------------------------- sub pdxout { $all = ''; while () { &jcode'convert(*_,sjis); $html = $_; $all .= $html; } $all =~ s/\n//g; $no = 0; #■添付番号 @A = split(/<\/a>/,$all); open(FILE,">$urllistfile") or die "URLリストファイルに書き込めません"; foreach $line (@A) { $line = &edge_link($line); $line = &tagcut($line); print $line; #■URLリストをファイルに書き出す $work = $no - 1; print FILE "$work:=:$url\r\n" if $work >= 0; } close(FILE); } #■リンクされている文字の前に番号を付ける sub edge_link { local($_) = $_[0]; ($front,$back) = split(//,$work); $no++; if($url =~ /^http:/i) { #■http:で始まらなければ } else { #($work,$trust) = split(/[0-9a-zA-Z^]*\.htm.*/,$work); ($locallink,$trust) = split(/[0-9a-zA-Z^]*\.htm.*/,$datafile); $url = "$locallink$url"; } } $_; } #■タグを削除 sub tagcut { local($_) = $_[0]; #■残すタグを変換 $_ =~ s/\t+/\[space\]/g; $_ =~ s/ +/\[space\]/g; $_ =~ s/\[space\]/ /g; $_ =~ s//\n-----------\n/g; $_ =~ s//【画像】/g; $_ =~ s/<\/td>/\n/g; $_ =~ s/

/\n\n/g; $_ =~ s/
/\n/g; #■全て削除 $_ =~ s/<.*?>//g; #■タグではない文章中の < > を元に戻す $_ =~ s/<//g; $_; }