PC-Blues # 045 BBSから指定記事を読みこむ

当サイトも開設から七年めとなり、けいじばんの発言にももう死んでしまった人の言葉などが残っていたりする。たまに全文検索をして、「たしかこんなことを言ってた人もいたが、」などと探したりすることもあるようになった。

記事の検索はトップにgoogle使用の検索を置いたからいいが、問題はリンクである。たとえば、うちのけいじばんのなかで「原発」という言葉が出てきたのは、No.1287と1131,1094,682,210,209,208,206,204,200,58と検索できたとして、それへのリンクを貼るとなると困ってしまう。

とはいえ、リンクこそがウェブの生命である、というのも事実である。ウェブにものを書いていて、他者や自分の過去の発言に言及しながら、ちゃんと引用をしない、引用元の明示をしないというのはあまりに怠慢というものではある。勿論、リソースがウェブにあるとは限らないから、その場合はどこの本のどのページ、という昔ながらの方法に頼ることになる。

こういう原典明示をサボれば、「噂話やうろ覚えの知識と自分の印象だけでイイカゲンなことを言うヤツ」の謗りは免れないわけだが、逆にそういうイイカンゲンさが売りという場合もあるのでソレハソレである。

はなしが逸れた。そこで、けいじばんに関しても簡単リンクのための仕掛けをつくることにする。たとえば、掲示板のうちの209と206と1131を表示して、206にフォーカスを当てたいという場合は、 http://www.satani.org/cgi-bin/byo/bbslog.cgi?209&206&1131#206 というuriで表示できるようにする。ようするに?のあとに表示したい記事番号を入力すればよいのである。Noには<a>タグをつけておいた。name=xxxxxという形式にしたら、もし必要があれば、#のあとにフォーカスをあてたい記事番号をいれればよいのである。たいていのブラウザではそこがまず表示されるであろう。

これでは呪文が長すぎるような気もするのでその入力支援のためのhtmlを準備することとした。何を隠そう、この記事こそがそれである。 下記のボックスに参照したい記事番号を入れてsubmitしていただきたい。 希望どおりの記事がでていれば、そのときのuriをコピーして任意の記事なり、投稿なりにペーストすればよいのである。


ひとつめ

ふたつめ

みっつめ

よっつめ

いつつめ

準備はいいですね

すべてのメッセージを読む。

ソースでございます。


#!/usr/bin/perl
$\ = "\n"
#平成18年10月25日(水)
#
#入力を整理。数字とセパレータ以外は捨てる。こうするとちょっと安全になるそうな。
#動作検証するときはperl に -wTオプションをつけると
#マズいところを教えてくれるのだそうな。
# 記事番号を@arg1に保存。
unless($ENV{QUERY_STRING} eq ""){
    $ENV{QUERY_STRING} =~ s/[^1-9&]//g;
    @arg1 = split /&/,$ENV{QUERY_STRING};
}
###時間を表示してたときの残骸。
#($sec,$min,$hour,$mday,$mon,$year,$wday,$dmy) = localtime;
###########################################################
######最新ログナンバーを取得。上位15件を表示する準備。#####
###########################################################
#####################
#ああミーハー色替エ##
#####################
   $c = int(rand(5));

if($c == 0){
$color = "#ffffcc"
}elsif($c == 1){
$color = "#ffccff"
}elsif($c == 2){
$color = "#ccffff"
}elsif($c == 3){
$color = "#ffffff"
}elsif($c == 4){
$color = "#ffff66"
}else{
$color = "#ffcc33"
}
#############
#タイトル決定。
#############
    $subtitle = "過去記事log"
################################
#ヘッダと記事の上部を出力する。#
################################
print <<END ;
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML lang="ja" >
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS">
   <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
   <link href="../../micmic.css" type="text/css"  rel="stylesheet">
   <META NAME="Author" CONTENT="micmic">
   <LINK REL="NEXT" HREF="http://www.satani.org/index.html">
   <LINK REV="MADE" HREF="mailto://micmic\@osk.3web.ne.jp"> 
  <META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<STYLE type="text/css">
<!--
body { line-height :1.4;
     color :#000000 ;
     background-color: $color ; 
	margin: 2em
     }
a:link { color: #0000EE } 
a:visited { color: #551A8B } 
a:active { color: #FF0000 }
div.center { text-align: center }
div.pad { padding : 1em;
	  font-family : monospace
	}     
-->
</STYLE> 

  <TITLE>はげましのお声、ないしは罵詈雑言$subtitle</TITLE>
</HEAD>
<BODY>
<h1>はげましのお声、ないしは罵詈雑言$subtitle</h1>
  

END
###############################################################################
##ここから記事の表示。<a name>をつけておくと#番号で参照できるのでちょっと便利。
##############################################################################
    for(@arg1){
	print "<h3><a name=\"$_\">"
	print $_;
	print "</a></h3>"
	$mes = ""
###3桁以下の番号は上に0を補う。
	$log = sprintf("%04d.log",$_);
	open(LOG,$log); 
	while(<LOG>){
	    $mes = $mes.$_;
	}
	close(LOG);
##丸つき数字は端末ではバケたりするので排除。
	$_ = $mes;
	s/@/(1)/g;
	s/A/(2)/g;
	s/B/(3)/g;
	s/C/(4)/g;
	s/D/(5)/g;
	s/E/(6)/g;
	s/F/(7)/g;
	s/G/(8)/g;
	s/H/(9)/g;
	s/I/(10)/g;
	s/J/(11)/g;
	s/K/(12)/g;
	s/L/(13)/g;
	s/M/(14)/g;
	s/N/(15)/g;
	s/O/(16)/g;
	s/P/(17)/g;
	s/Q/(18)/g;
	s/R/(19)/g;
	s/S/(20)/g;
#改行も表示。
	s/\n/<br>/g;

	print $_;
	print "<hr>"
    }
#フッタ。やっぱり全部読みたいひともいるよね。
	print <<END2;

<div class="center"><A HREF="bbs2.cgi?type=all">すべてのメッセージを読む。</A></div>
<div class="center"><A HREF="bbs2.cgi?type=">普通の掲示板に戻る</A></div>

<div class="center"><A HREF="../../index.html">[Home]</A> 
<A HREF="../../tobyo/index.html">[目次]</A></div>


</BODY>
</HTML>
END2


ここまで。

[前へ] [次へ]
[Home] [目次]

2006/10/30