| version 1.7, 2002/11/06 19:29:58 |
version 1.7.2.3, 2002/11/08 00:45:07 |
| |
| ### $Id$ | ### $Id$ |
| ### | ### |
| ### | ### |
| use strict; | #use strict; |
| use Socket; | use Socket; |
| | use DB_File; |
| | use POSIX; |
| eval {require 'jcode.pl'} | eval {require 'jcode.pl'} |
| or error('jcode.pl が見つかりません'); | or error('jcode.pl が見つかりません'); |
| | |
| |
| pathReadCgi => 'test/read.cgi', | pathReadCgi => 'test/read.cgi', |
| regexNeedUrl => qr{^http://(?:[^.]+\.)+(?:2ch\.net|bbspink\.com|machibbs\.com)/\S+/$}i, | regexNeedUrl => qr{^http://(?:[^.]+\.)+(?:2ch\.net|bbspink\.com|machibbs\.com)/\S+/$}i, |
| #regexNeedUrl => qr{^http://(?:[^.]+\.)+(?:machibbs\.com)/\S+/$}i, | #regexNeedUrl => qr{^http://(?:[^.]+\.)+(?:machibbs\.com)/\S+/$}i, |
| replaceWords => [qw(BoardName BoardUrl ThreadName ThreadUrl)], | replaceWords => [qw(BoardName BoardUrl ThreadName ThreadUrl ThreadOrder ThreadCount)], |
| urlBbsmenu => 'http://www.ff.iij4u.or.jp/~ch2/bbsmenu.html', | urlBbsmenu => 'http://www.ff.iij4u.or.jp/~ch2/bbsmenu.html', |
| | usedb => 1, # DB機能を使うなら '1' 使わないなら '0' |
| | dbfile => 'random2ch.db', |
| | dblockfile => 'dblock', |
| | LOCK_EX => 2, |
| | LOCK_UN => 8 |
| ); | ); |
| | |
| | |
| ################################################################################# | ################################################################################# |
| sub resultHtml { | sub resultHtml { |
| return \<<'EOF'; | return \<<'EOF'; |
| |
| <hr> | <hr> |
| <p> | <p> |
| <a href="__BoardUrl__">__BoardName__</a>板の | <a href="__BoardUrl__">__BoardName__</a>板の |
| <a href="__ThreadUrl__">__ThreadName__</a>スレへいってらっしゃい | __ThreadOrder__: <a href="__ThreadUrl__">__ThreadName__</a>(__ThreadCount__)スレへいってらっしゃい |
| </p> | </p> |
| </body> | </body> |
| </html> | </html> |
| |
| sub getLinks; | sub getLinks; |
| sub getHtml; | sub getHtml; |
| | |
| my %link =(); | my %link =( |
| | ThreadName =>'', |
| | ThreadOrder =>'', |
| | ThreadCount =>'', |
| | ThreadUrl =>'', |
| | BordName =>'', |
| | BordUrl =>'' |
| | ); |
| | |
| # 板を決定 | # 板を決定 |
| { | { |
| |
| my %thread = %{ getLinks getHtml $subback, $option{'httpPort'} }; | my %thread = %{ getLinks getHtml $subback, $option{'httpPort'} }; |
| | |
| my @key = keys %thread; | my @key = keys %thread; |
| $link{'ThreadName'} = $key[int(rand 2000) % $#key]; | # $link{'ThreadName'} = $key[int(rand 2000) % $#key]; |
| | my $tempThreadName = $key[int(rand 2000) % $#key]; |
| | |
| my($server, $bbs) = ($link{'BoardUrl'} =~ m|^http://([^/]+)/([^/]+)/$|i); | my($server, $bbs) = ($link{'BoardUrl'} =~ m|^http://([^/]+)/([^/]+)/$|i); |
| | |
| if ($link{'BoardUrl'} =~ m/(?:2ch|bbspink)/) { | if ($link{'BoardUrl'} =~ m/(?:2ch|bbspink)/) { |
| | ($link{ThreadOrder}, $link{ThreadName}, $link{ThreadCount}) |
| | = ($tempThreadName =~ m/^(\d+):\s+(.*)\((\d+)\)$/); |
| $link{'ThreadUrl'} = join '/', ( | $link{'ThreadUrl'} = join '/', ( |
| 'http:/', $server, $option{'pathReadCgi'}, | 'http:/', $server, $option{'pathReadCgi'}, |
| $bbs, $thread{$link{'ThreadName'}} | $bbs, $thread{$tempThreadName} |
| ); | ); |
| }elsif($link{'BoardUrl'} =~ m/(?:machibbs)/o) { | }elsif($link{'BoardUrl'} =~ m/(?:machibbs)/o) { |
| | ($link{ThreadOrder}, $link{ThreadName}, $link{ThreadCount}) |
| | = ($tempThreadName =~ m/^(.*)\((\d+)\)$/); |
| $link{'ThreadUrl'} = join '/', ( | $link{'ThreadUrl'} = join '/', ( |
| 'http:/', $server, $thread{$link{'ThreadName'}} =~ m|^\.\./(.*)| | 'http:/', $server, $thread{$tempThreadName} =~ m|^\.\./(.*)| |
| ); | ); |
| } | } |
| } | } |
| | |
| | # DB機能が有効な場合DBに遍歴を残す |
| | if ($option{usedb}) |
| | { |
| | our ($db, %h); |
| | open (DBLOCK, $option{dblockfile}); |
| | flock DBLOCK, $option{LOCK_EX}; |
| | |
| | $db = tie %h, "DB_File", $option{dbfile} |
| | or error("$option{dbfile}が開けません:$!"); |
| | |
| | ############ |
| | ## DB仕様 ## |
| | ############ |
| | $h{time()} = join ',' , ( |
| | $link{ThreadUrl}, |
| | $link{ThreadName}, |
| | $link{ThreadOrder}, |
| | $link{ThreadCount}, |
| | $link{BoardName}, |
| | $link{BoardUrl} |
| | ); |
| | |
| | |
| | undef $db; |
| | untie %h; |
| | flock DBLOCK, $option{LOCK_UN}; |
| | } |
| | |
| # 結果を出力 | # 結果を出力 |
| { | { |
| my $result = ${ resultHtml() }; | my $result = ${ resultHtml() }; |
| $result =~ s/__${_}__/$link{$_}/g for @{ $option{'replaceWords'} }; | $result =~ s/__${_}__/$link{$_}/g for @{ $option{'replaceWords'} }; |
| print $result; | print $result; |
| } | } |
| | |
| | |
| | |
| sub getHtml { | sub getHtml { |