#!/usr/local/bin/perl use Socket; #Syllabus用に特化します。 #データ保存ディレクトリ $basedir="html/"; #ホスト名をここにいれる。 $hostname="165.93.***.***"; #ポート番号をいれる $port=1180; #メソッドを指定(GET,HEAD,POST) $method="POST"; #メソッドの引数(PATH指定) $path="cgi-bin/srcdtlnou"; #データ長さ指定 $length="Content-length: 19\r\n\r\nkcood="; #プロトコルはtcp $proto=getprotobyname('tcp'); #ホスト名からIPアドレスに変換 $iaddr=inet_aton($hostname) || die "$hostnameは見つかりませんでした\n"; #portとIPアドレスから構造体を生成 $sock_addr=sockaddr_in($port,$iaddr); #農学部データを取ってきます coderead("agri.euc.txt"); #工学部データを取ってきます coderead("tech.euc.txt"); #test用 #$data="1100000000200"; #postdata(1100000000300); #postdata(1100000000200); sub coderead{ #コードをデータから引出します local($filename)=@_[0]; local($i)=0; open(CODEFILE,"<$filename") || die "Read Error ... !!\n"; local(@dat)=; close(CODEFILE); for($i=0;$i<$#dat;$i++){ chop(@dat[$i]); split(',',@dat[$i]); print "file ( ".($i+1)." / $#dat)\n"; if($_[4] ne ""){ #print @_[4]."\n"; postdata(@_[4]); } } } sub postdata{ #コードを元にOracleサーバからデータを引出します local($data)=@_[0]; print "start $data -- "; #ソケットを生成 socket(SERVER,PF_INET,SOCK_STREAM,$proto) || die "ソケットを作成できませんでした。\n"; #ホストに接続 connect(SERVER,$sock_addr) || die "$hostnameのポート$portに接続できませんでした。\n"; #ファイルハンドルSERVERをバッファリングしない select(SERVER); $|=1; select(STDOUT); print "connect ok..."; #HTTPリクエスト送信 print SERVER "$method /$path HTTP/1.0\r\n$length$data\r\n"; #User-Agentを送信 print SERVER "User-Agent: SyllabusChecker/0.10 (HTTP client)\r\n"; print SERVER "\r\n"; #サーバーからのデータ表示(保存) local($filename)=$basedir.$data.".html"; open(SAVEFILE,">$filename") || die "Write Error ... !!\n"; local($source)=""; while(){ # m/^\r\n$/ && last; m/^$/ && last; } while(){ #print $_; $source=$source.$_; } #もし文字列置換を行うならここで行います(リンク先の変更など) $source=~s/
.*\n.*\n.*\n.*\n.*\n.*\n.*<\/BODY>/<\/BODY>/i; #ここまで(文字列置換部分) print SAVEFILE $source; close(SAVEFILE); print "end.\n"; }