« 秋元道雄「パイプオルガン 歴史とメカニズム」ショパン | トップページ | ロバート・J・ソウヤー「ホミニッド 原人 ネアンデルタール・パララックス 1」ハヤカワ文庫SF 内田昌之訳 »

2018年2月12日 (月)

ココログのカテゴリーのアーカイブから記事一覧を作るVBScript

 カテゴリ別書評一覧の新装開店の詳細その4。

【はじめに】

カテゴリ別書評一覧を作り替える際、ついでに少し体裁を変えた。記事は千件以上あるので、手作業でじゃやってられない。そこで、各カテゴリーのアーカイブから一覧を作る VBScript を書いた。

【もう少し詳しく】

 各カテゴリーの頁の HTML は、次の構成だ。最新の10記事は全文を載せ、11記事目より前の記事はリンクだけが載っている。

 ¦
 ¦ なんかいろいろ
 ¦
記事1の全文
記事2の全文
記事3の全文
 …
記事10の全文
 ¦
 ¦ なんかいろいろ
 ¦
記事11へのリンク
記事12へのリンク
記事13へのリンク
 …
記事xへのリンク
 ¦
 ¦ なんかいろいろ
 ¦

 これから、各記事のタイトル・URL・日付を抜き出し、次の形の HTML を作る。

<li>記事1の日付 <a href="記事1のURL">
記事1のタイトル</a></li>
<li>記事2の日付 <a href="記事2のURL">
記事2のタイトル</a></li>
<li>記事3の日付 <a href="記事3のURL">
記事3のタイトル</a></li>
 …
<li>記事10の日付 <a href="記事10のURL">
記事10のタイトル</a></li>
<li>記事11の日付 <a href="記事11のURL">
記事11のタイトル</a></li>
<li>記事12の日付 <a href="記事12のURL">
記事12のタイトル</a></li>
<li>記事13の日付 <a href="記事13のURL">
記事13のタイトル</a></li>
 …
<li>記事xの日付 <a href="記事xのURL">
記事xのタイトル</a></li>

 ちなみに、記事1~記事10は、次の形になっている。

 ¦
 ¦ なんかいろいろ
 ¦

<h2>記事?の日付</h2>

 ¦
 ¦ なんかいろいろ
 ¦

<h3><a href="記事?のURL">記事?のタイトル</a></h3>
 ¦
 ¦ なんかいろいろ
 ¦

 記事11~記事xの形は以下。

<li class="archive-list-item"><a href="記事?のURL">記事?のタイトル</a> <span  class="archive-list-date">記事?の日付</span></li>

 要はテキスト・フィルタですね。必要な所を正規表現で見つけ出し、都合のいい形に直して書き出してるだけ。

【インストール】

 この記事の末尾にあるスクリプトを、ctindex.vbs などの名前で保存する。

【使い方】

  1. 各カテゴリーをブラウザで開き、その HTML を cat1.html などの名前で保存する。
  2. cat1.html を、ctindex.html にドラッグ&ドロップする。
     → cat1.html.txt ができる。
  3. テキスト・エディタで cat1.html.txt に見出しや <ol>~</ol> などを付け加えてください。

【スクリプト】

' 2018.01.266 カテゴリHTMLから索引頁を作る
Option Explicit
Dim WSH   : Set WSH  = WScript.CreateObject("Wscript.shell")
Dim FSYS  : Set FSYS = WScript.CreateObject("Scripting.FileSystemObject")

' ダブルクリックで起動したら使い方を示して終わる
if WScript.Arguments.length <> 1 then
    Call MsgBox( "Drag&DropしたファイルLから索引頁を作る" )
    WScript.Quit
end if

' D&Dしたファイル名からフルパスと親フォルダを得る
Dim iName   : iName   = WScript.Arguments.Item(0) ' D&Dしたファイルのフルパス
Dim iFolder : iFolder = FSYS.getParentFolderName( iName ) & "\" '親フォルダ名

' D&D したファイルを開く
Dim iHandle : Set iHandle = CreateObject("ADODB.Stream")
iHandle.Type          = 2                ' text mode
iHandle.charset       = "utf-8"
iHandle.LineSeparator = 10    ' lf
iHandle.open
iHandle.LoadFromFile iName '入力ファイルを読み込む
If Err.Number <> 0 Then
    Call MsgBox( "Code:" & Err.Number & " :Can not open " & iName )
    WScript.Quit
end if

Dim hDate, hURL, hTitle, rDate, rTitle, rList, oBuf
Set rDate  = new RegExp :  rDate.IgnoreCase = True    '<h2>日付</h2>
Set rTitle = new RegExp : rTitle.IgnoreCase = True    '<h3><a href=URL>記事名</a></h3>
Set rList  = new RegExp :  rList.IgnoreCase = True    '<li class=..>
rDate.pattern = "^.*<h2>(\d+)[^\d]+(\d+)[^\d]+(\d+).*</h2>.*$"
rTitle.pattern = "^.*<h3><a href=.([^>]+).>([^<]+)</a></h3>.*$"
rList.pattern = "^<li class=.archive-list-item.><a href=.(.*).>(.*)</a>.*<span .*>(.*)</span></li>$"
Do While iHandle.EOS = False
    Dim line : line = iHandle.ReadText( -2 )
'                                        <h2>日付</h2>
    if rDate.Test( line ) then
        hDate = rDate.Replace( line, "$1" & "." & "$2" & "." & "$3" )
    end if
'                                        <h3><a href=URL>記事名</a></h3>
    if rTitle.Test( line ) then
        hURL   = rTitle.Replace( line, "$1" )
        hTitle = rTitle.Replace( line, "$2" )
        oBuf = oBuf & "<li>" & hDate & " <a href=""" & hURL & """>" & vblf & hTitle & "</a></li>" & vblf
    end if
'                    <li class=..><a  href=URL>記事名</a> <span..>日付</span></li>
    if rList.Test( line ) then
        hURL   = rList.Replace( line, "$1" )
        hTitle = rList.Replace( line, "$2" )
        hDate  = rList.Replace( line, "$3" )
        oBuf = oBuf & "<li>" & hDate & " <a href=""" & hURL & """>" & vblf & hTitle & "</a></li>" & vblf
    end if
Loop
                    ' 結果の書き出し
Dim oHandle
Set oHandle = CreateObject("ADODB.Stream")
oHandle.Charset    = "UTF-8"
oHandle.Open
oHandle.WriteText oBuf, 0
oHandle.SaveToFile WScript.Arguments.Item(0) & ".txt", 2        '上書き

iHandle.Close
oHandle.Close
Call MsgBox( hDate )

【おわりに】

 改めて考えると、「複数のカテゴリーを一度で処理できりゃ楽なんじゃね?」とか「いっそカテゴリーのHTMLもスクリプトで取ってこいや」とか、改善の余地はいろいろあるけど、とりあえず役に立ったから良しとしよう。

【関連記事】

|

« 秋元道雄「パイプオルガン 歴史とメカニズム」ショパン | トップページ | ロバート・J・ソウヤー「ホミニッド 原人 ネアンデルタール・パララックス 1」ハヤカワ文庫SF 内田昌之訳 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: ココログのカテゴリーのアーカイブから記事一覧を作るVBScript:

« 秋元道雄「パイプオルガン 歴史とメカニズム」ショパン | トップページ | ロバート・J・ソウヤー「ホミニッド 原人 ネアンデルタール・パララックス 1」ハヤカワ文庫SF 内田昌之訳 »