作者: Hiromichi Honda
日時: 2002/1/30(12:07)
 皆さん、こんにちは。

 以前 freeML の方に書きかけていたものですが、まず、

news.dtd:
<!ELEMENT document (header, news+, site)>
<!ELEMENT header (#PCDATA)>
<!ELEMENT news (title, date, author, lead, content*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT lead (#PCDATA)>
<!ELEMENT content (a|br|img)+>
<!ELEMENT a (#PCDATA)>
<!ATTLIST a href CDATA #IMPLIED>
<!ELEMENT br EMPTY>
<!ELEMENT img EMPTY>
<!ELEMENT site (#PCDATA)>

という DTD でいくとして、XML 本文は、

news.xml:
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="news.xsl" ?>
<document>
 <header>TS Net News</header>
 <news>
  <title>TS Network ニュースシステム開始!</title>
  <date>2002/01/01</date>
  <author>閑舎</author>
  <lead>多数の参加者による Web 上のニュース共有システム始まる。</lead>
  <content>
   本日未明、うわさのニュース共有システムが始まった。<br/>
   これは @Nifty の フォーラム FGALTS 主宰者 藤岡氏の提唱によるもので、
   その呼びかけに応じて、
   有志数名が XML 形式による Web ニュース共有システムに賛同し、
   参加を表明したもの。<br/>
   当面、テキスト、スクリプトの話題についてのニュースを流していく。
   詳しくは
   <a href="http://homepage1.nifty.com/kazuf/">TS Network</a>参照のこと。
  </content>
 </news>
 <news>
  <title>Windows XP にセキュリティホール</title>
  <date>2001/12/22</date>
  <author>閑舎</author>
  <lead>セキュリティ対策万全のはず Windows XP にセキュリティホール見つかる。</lead>
  <content>
   <img src="kani.gif"/>最も安全なソフトウエアと喧伝されていた Windows XP だが、
   インターネットに接続しただけで、クラッカーがインターネットを通じて、
   他のコンピュータからそのマシンを自由に操作できるという最も危険なバグが見つかった。<br/>
   マイクロソフト社は21日、無料の修正用ソフトを発表した。<br/>
   原因は UPnP 機能にバッファーオーバーフローがひそんでいたためという。
  </content>
 </news>
 <site>閑舎のPage</site>
</document>

という感じ。使用する XSL は、

news.xsl:
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:output method="html" encoding="Shift_JIS"/>
 <xsl:template match="/document">
  <html>
  <head>
  <title><xsl:value-of select="header"/></title>
  </head>
  <body background="bg.jpg">
  <basefont size="2"/>
  <hr/>
  <h1>
   <xsl:attribute name="STYLE">color:navy;text-align:center</xsl:attribute>
   <xsl:value-of select="header"/>
  </h1>
  <hr/>
  <xsl:for-each select="news">
   <div style="font-size:large; background-color:bisque; color:navy">
    <xsl:value-of select="./title" /></div>
   <div style="color:green"> <xsl:value-of select="./date"/>
      <xsl:value-of select="./author"/></div>
   <div style="color:darkred; font-size:larger"> <u><xsl:value-of select="./lead"/></u></div>
   <div style="text-indent:10pt"><xsl:apply-templates select="./content"/></div>
   <hr/>
  </xsl:for-each>
  <div align="right"><xsl:attribute name="STYLE">font-size:12pt</xsl:attribute>
   <xsl:value-of select="site"/>
  </div>
  </body></html>
 </xsl:template>

 <xsl:template match="a">
  <xsl:element name="a">
   <xsl:attribute name="href">
	<xsl:value-of select="@href"/>
   </xsl:attribute>
   <xsl:value-of select="."/>
  </xsl:element>
 </xsl:template>

 <xsl:template match="img">
  <xsl:element name="img">
   <xsl:attribute name="src"><xsl:value-of select="@src"/></xsl:attribute>
   <xsl:attribute name="align">right</xsl:attribute>
  </xsl:element>
 </xsl:template>

 <xsl:template match="br">
  <br/>
 </xsl:template>
</xsl:stylesheet>

 これで、IE6、NN6 にてどちらも表示可能でした。この雛形が各サイトの決め
られた URL に有ったとすると、どのようにして収集が可能か、その原型を作る
だけなら、ローカルマシンに Perl があれば可、と思いますので、考えてみまし
た。

1. Perl から http で xml ファイルを get(Socket を use)。

2. Jcode.pm などで文字コードを SJIS に変換。

3. DOM を使ってもよいが、上くらいのタグ構造なら、自前で解析し、 各ニュー
  スのタイトル、日付、作者、リードを取り出し、サイト名も取り出すのも容易。

4. 自分が出力したい形式に加工して、digest0201.xml などとして出力する。

5. つづいて、Perl で ftp し、自分の Web サイトにセットする。

6. このスクリプトをスケジューラにセットして毎日 1 回とか自動化。

 こうすると、Perl がありさえすればニュース自動収集システムは完了、なん
ちゃって(^^;。

# 本当はこんなことしている場合じゃないんだが、忙しいと奇妙に現実逃避した
# くなる(^^;

--
本田博通(閑舎)
Hiromichi Honda <raku@...>