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 { |