このスレは2chボード一覧の更新に関する情報を扱います。
ボード一覧:http://menu.2ch.net/bbsmenu.html
また、一覧上のカテゴリの再編もここで検討を行います。
ただしbbspinkは除外、秘密基地で別途(ry。
発端および検討内容は以下をご覧ください。
質問・雑談スレ62@運用情報板
http://qb5.2ch.net/operate/kako/1092/10927/1092708821.html(381-398)
前スレ
http://qb5.2ch.net/test/read.cgi/operate/1116229949/
探検
■ ボード一覧更新情報3
■ このスレッドは過去ログ倉庫に格納されています
1まほら ★
2007/04/16(月) 08:05:04ID:???0169ひよこパーラー
2007/05/16(水) 18:34:12ID:AoXOiB7X0 ### 設定
# 更新する掲示板一覧のファイル名・パス
@file = ('bbstable.html', 'bbsmenu.html');
#@file = ('faq.html', 'map.html', 'adv.html');
# バックアップの拡張子
$old = 'old';
### GETなら全て初期画面表示
if ( $ENV{'REQUEST_METHOD'} eq 'GET'){
print <<"owari";
Content-Type: text/html; charset=Shift_JIS
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>掲示板一覧の更新</title>
</head>
<body>
<h1>掲示板一覧の更新</h1>
<p>指定された掲示板の移転を検出して、掲示板一覧を更新します。<br>
移転した板の<b>移転前の</b>URLを、1行に1つずつ書いてください。</p>
<p>対象ファイル:
owari
foreach ( @file ) { print " $_"}
print <<"owari";
</p>
<form method="POST" action="$ENV{'SCRIPT_NAME'}">
<textarea name="ita" cols="50" rows="20"></textarea><br>
<input type="submit" value="送信">
</form>
</body>
</html>
owari
exit;
}
print "Content-Type: text/plain; charset=Shift_JIS\n\n";
### 入力情報をもらう
# POSTだけ。GETは全て初期画面だから
$ENV{'CONTENT_LENGTH'} > 2048 and &end('でかい');
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
# デコ
foreach ( split(/&/, $query) ) {
my ($name, $value) = split(/=/);
$value =~ tr/+//d;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
# 無い
$FORM{'ita'} or &end('入力して');
# 更新する掲示板一覧のファイル名・パス
@file = ('bbstable.html', 'bbsmenu.html');
#@file = ('faq.html', 'map.html', 'adv.html');
# バックアップの拡張子
$old = 'old';
### GETなら全て初期画面表示
if ( $ENV{'REQUEST_METHOD'} eq 'GET'){
print <<"owari";
Content-Type: text/html; charset=Shift_JIS
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>掲示板一覧の更新</title>
</head>
<body>
<h1>掲示板一覧の更新</h1>
<p>指定された掲示板の移転を検出して、掲示板一覧を更新します。<br>
移転した板の<b>移転前の</b>URLを、1行に1つずつ書いてください。</p>
<p>対象ファイル:
owari
foreach ( @file ) { print " $_"}
print <<"owari";
</p>
<form method="POST" action="$ENV{'SCRIPT_NAME'}">
<textarea name="ita" cols="50" rows="20"></textarea><br>
<input type="submit" value="送信">
</form>
</body>
</html>
owari
exit;
}
print "Content-Type: text/plain; charset=Shift_JIS\n\n";
### 入力情報をもらう
# POSTだけ。GETは全て初期画面だから
$ENV{'CONTENT_LENGTH'} > 2048 and &end('でかい');
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
# デコ
foreach ( split(/&/, $query) ) {
my ($name, $value) = split(/=/);
$value =~ tr/+//d;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
# 無い
$FORM{'ita'} or &end('入力して');
2007/05/16(水) 18:35:21ID:AoXOiB7X0
### 入力内容を確認
@ita = split(/\r\n|\r|\n/, $FORM{'ita'});
foreach $ita ( @ita ) {
$ita !~ /^http:\/\/(?!www|info|headline|find|epg|movie)\w+\.(?:2ch\.net|bbspink\.com)\/\w+\/$/
and &end('板URLだけ書いて');
my $aru = 0;
foreach $data ( @filedata ) { $aru = grep(/\Q$ita/, @{$$data[1]}) and last; }
$aru or &end("$itaは板一覧に無い");
}
# ここまでで @ita は板一覧に載っている板URLだけだと確認された
### 移転先を探す
foreach $ita ( @ita ) {
print "$ita -> ";
my $res = &get($ita);
# GET失敗
unless ( $res->is_success ) {
print $res->status_line, "\n";
next;
}
# でかい
if ( $res->header('Content-Length') > 512 ){
print 'Content-Length: ',
$res->header('Content-Length'),
" たぶん現役\n";
next;
}
# 板URLを探す
my $iten;
my ($dom, $bbs) = $ita =~ m|^http://(\w+\.)(.+)$|;
if ( ($iten) = $res->content =~ m|(http://(?!\Q$dom\E)\w+\.\Q$bbs\E)| ) {
print "$iten @";
# 板一覧を変換
foreach $data ( @filedata ) {
if ( grep(s/\Q$ita/$iten/g, @{$$data[1]}) ) {
$$data[2] = 1;
print " $$data[0]";
}
}
print "\n";
# 移転先っぽいURLが無い
} else {
print "移転先不明\n";
next;
}
}
@ita = split(/\r\n|\r|\n/, $FORM{'ita'});
foreach $ita ( @ita ) {
$ita !~ /^http:\/\/(?!www|info|headline|find|epg|movie)\w+\.(?:2ch\.net|bbspink\.com)\/\w+\/$/
and &end('板URLだけ書いて');
my $aru = 0;
foreach $data ( @filedata ) { $aru = grep(/\Q$ita/, @{$$data[1]}) and last; }
$aru or &end("$itaは板一覧に無い");
}
# ここまでで @ita は板一覧に載っている板URLだけだと確認された
### 移転先を探す
foreach $ita ( @ita ) {
print "$ita -> ";
my $res = &get($ita);
# GET失敗
unless ( $res->is_success ) {
print $res->status_line, "\n";
next;
}
# でかい
if ( $res->header('Content-Length') > 512 ){
print 'Content-Length: ',
$res->header('Content-Length'),
" たぶん現役\n";
next;
}
# 板URLを探す
my $iten;
my ($dom, $bbs) = $ita =~ m|^http://(\w+\.)(.+)$|;
if ( ($iten) = $res->content =~ m|(http://(?!\Q$dom\E)\w+\.\Q$bbs\E)| ) {
print "$iten @";
# 板一覧を変換
foreach $data ( @filedata ) {
if ( grep(s/\Q$ita/$iten/g, @{$$data[1]}) ) {
$$data[2] = 1;
print " $$data[0]";
}
}
print "\n";
# 移転先っぽいURLが無い
} else {
print "移転先不明\n";
next;
}
}
171ひよこパーラー
2007/05/16(水) 18:37:17ID:AoXOiB7X0 ### ファイル更新
foreach $data ( @filedata ) {
if ( $$data[2] ) {
# バックアップ
print "unlink $$data[0].$old",
unlink("$$data[0].$old") ? "" : " 失敗", "\n",
"rename $$data[0] -> $$data[0].$old",
rename($$data[0], "$$data[0].$old") ? "" : " 失敗", "\n",
# ファイル保存
"open >$$data[0]",
open(FILE, ">$$data[0]") ? "" : " 失敗", "\n";
print FILE @{$$data[1]};
close FILE;
}
}
print 'おわり';
exit;
### 結果出力
sub end {
print @_;
exit;
}
### GET
use LWP::UserAgent;
sub get {
my $uri = $_[0];
my $ua = LWP::UserAgent->new;
$ua->timeout(5);
$ua->agent("$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'} ($ENV{'REMOTE_ADDR'})");
my $req = HTTP::Request->new(GET, $uri);
return $ua->simple_request($req);
}
foreach $data ( @filedata ) {
if ( $$data[2] ) {
# バックアップ
print "unlink $$data[0].$old",
unlink("$$data[0].$old") ? "" : " 失敗", "\n",
"rename $$data[0] -> $$data[0].$old",
rename($$data[0], "$$data[0].$old") ? "" : " 失敗", "\n",
# ファイル保存
"open >$$data[0]",
open(FILE, ">$$data[0]") ? "" : " 失敗", "\n";
print FILE @{$$data[1]};
close FILE;
}
}
print 'おわり';
exit;
### 結果出力
sub end {
print @_;
exit;
}
### GET
use LWP::UserAgent;
sub get {
my $uri = $_[0];
my $ua = LWP::UserAgent->new;
$ua->timeout(5);
$ua->agent("$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'} ($ENV{'REMOTE_ADDR'})");
my $req = HTTP::Request->new(GET, $uri);
return $ua->simple_request($req);
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【ホリエモン】堀江貴文氏「俺本気になって暴露するなら文春とか霞むくらいの情報持ってるよ」と告白し反響 元フジ長谷川豊氏と対談 ★5 [Ailuropoda melanoleuca★]
- 【八潮市道路陥没】運転手の救出活動を再開…作業用スロープが完成し重機でがれきの撤去始める ★12 [Ailuropoda melanoleuca★]
- 【札幌】セルフレジ横『3円の有料レジ袋』を勝手に持ち去る…イギリス人観光客の48歳の男―追いかけてきたコンビニ店員の顔を殴り逮捕 [煮卵★]
- 《困惑の鶴瓶を直撃》沈黙破り明かした中居正広から「ごめんなさい…ごめんなさい」引退前の謝罪、CM写真削除、BBQ当日のこと [ひかり★]
- 【MT/AT】ネット上の根強い「エンジンブレーキうざい」理論とは!! 実は重大な「責任転嫁」の可能性も!!★3 [ひぃぃ★]
- 【鹿児島】はま寿司で食中毒 15人に症状 調理従事者からノロウイルスを検出 [シャチ★]
- 【悲報】トルドー首相、同盟国アメリカに対する報復関税を表明。トランプ大統領、歴史的な友好関係を崩壊させてしまう [519511584]
- 【実況】博衣こよりのえちえちロマサガ2リメイク🧪 ★1★2
- 【実況】博衣こよりのえちえちロマサガ2リメイク🧪 ★1
- 【悲】エッヂで「ネトウヨを高校時代に済ませたやつ、勝ち組だった」というスレが大盛況で完走 [312375913]
- 【悲報】欧州EV販売マイナス6%、ハイブリッドは+20%wwwwwwwwwwwww [308389511]
- 【画像】Z世代「片目イケメンと付き合った結果wwwwww」