« カテゴリ別書評一覧の新装開店 | トップページ | チャールズ・テイラー「音の不思議をさぐる 音楽と楽器の科学」大月書店 佐竹淳・林大訳 »

2018年2月 5日 (月)

ココログ(Typepad)のバックアップを複数のファイルに分けるVBScript

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

【はじめに】

 ココログは、記事のバックアップを取れるし、復元もできる。バックアップを取るのは簡単だが、復元の際に困る場合がある。

 というのも。ココログで復元するには、「管理」ページの「読み込む」を使う。が、ココログだと、一回の操作で読みこめるファイルの大きさに、制限があるのだ。最大3M(メガバイト)まで。

 記事の数が多かったり、大きな写真を使っていると、バックアップの大きさが3Mを越えてしまう。私の場合は約17Mに達した。だから、復元の際には、複数のファイルに分けて、何回か「読み込む」操作をしなきゃいけない。

 分けるったって、単純にバイト数で分けるわけにはいかない。記事の切れ目で分ける必要がある。ってんで、記事の切れ目でファイルを分ける VBScript を作った。

 はいいが、使い勝手はとても悪い。

 というのも。

 このスクリプト、元ファイルを幾つかのファイルに分けて書きだす。

 のはいいが、書き出した全てのファイルに対し、手作業で文字コードを変える必要があるのだ。書き出すファイルは、BOM つきの UTF-8 だ。これを、BOM なしの UTF-8 に変える。仮に10個のファイルに別れたら、10回同じ操作を繰り返す必要がある。不細工だね。

 私は K2Editor を使い、いったん開いて、保存時の文字コードを UTF-8N に変えた。

 などの問題はあるが、記録として記事に残しておく。

【使い方】

  1. 下にあるソースを、div.vbs などのファイル名で保存する。
  2. ココログのバックアップを、div.vbs にドラッグ&ドロップする。
     →バックアップと同じフォルダに、"a-0.txt", "a-1.txt", "a-2.txt" … などが出来る。
  3. 上で出来たファイルは、文字コードが BOM つきの UTF-8 である。これを、テキスト・エディタなどで、BOM なしの UTF-8 に変える。
  4. 文字コードを変えたファイルを、ココログで「読み込む」。

【メモ】

a.文字コード

 ココログ(Typepad)のバックアップは、BOM なしの UTF-8 。読み込む際も、BOM なしの UTF-8 だ。BOM つきの UTF-8 も読ませてみたが、ハジかれた。いずれも改行文字は LF。

 面倒なことに、VBScript は Unicode が苦手だ。読み書きともに特殊な API を使わにゃならん。おまけに書けるのは BOM つき UTF-8 だけ。もっとも、いったん書いてから、先頭の3バイトを削って上書きすりゃいいんだが、面倒くさいからやめた←をい。

b.ココログのファイル形式

 この記事を書き始めてから調べて知ったんだが、ココログのバックアップのファイル形式は Tyopepad だった。んな事も知らずにスクリプトを書いていたとは、我ながら無謀な真似したもんだ。

c.ココログのバックアップの取り方

  1. 管理ページトップから、タブ「ブログ」を選ぶ。
  2. 「そのほかの操作」をクリックする。
    →ポップアップ・メニューが出る。
  3. ポップアップ・メニューから、「ブログの管理」を選ぶ。
    →「ブログ」タブの「管理」サブタブが出る。
  4. 「管理」サブタグから、「読み込み/書き出し」を選ぶ。
    →「読み込み/書き出し」の頁が出る。
  5. 書き出し(IPv4のみ)を右クリックして、リンク先を保存する。
    ブラウザが Firefox なら、「名前をつけてリンク先を保存(K)…」を選べば、
    ファイル保存ダイアログが出る。
  6. 上で保存したファイルが、ココログのバックアップだ。

d.ココログを復元する際の注意事項

 復元する前に、更新通知とRSSフィードを切っておこう。常連さんや Google にスパムを送りかねない。というか、私は切らずにやらかしたのでかなり迷惑をかけてしまった。

 復元は、バックアップと同じ「読み込み/書き出し」の「読み込み」を使う。文字コードは「Unicode(UTF-8)」にする。読み込んだ後にブログの再構築を促してくる。が、記事が多いと再構築は時間がかかるので、最後のファイルを読み込んだ後にしよう。

【ソース】

' 大きいテキストファイルを3Mぐらいに分割
Option Explicit
Dim WSH   : Set WSH  = WScript.CreateObject("Wscript.shell")
Dim FSYS  : Set FSYS = WScript.CreateObject("Scripting.FileSystemObject")
Const MAXBUF = 2700000

' ダブルクリックで起動したら使い方を示して終わる
if WScript.Arguments.length <> 1 then
    Call MsgBox( "Drag&Dropしたファイルを3Mごとに分割する" )
    WScript.Quit
end if

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

' 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 article    : article    = ""
Dim buf        : buf        = ""
Dim n        : n            = 0
Do While iHandle.EOS = False
    Dim line : line = iHandle.ReadText( -2 ) & vbLf
    if InStr( line, "AUTHOR: " ) = 1 then
        if ( Lenb( buf ) + Lenb( article ) ) > MAXBUF then
            buf = putBuf( buf, iFolder & "a-" & n & ".txt" )
            n = n + 1
        end if
        buf = buf & article
        article = ""
    end if
    article = article & line
Loop
buf = putBuf( buf & article, iFolder & "a-" & n & ".txt" )
Call MsgBox( n & ": " & msg )
WScript.Quit

' ファイル f にテキスト c を書きだす
Function putBuf( c, f )
    putBuf = ""
    if Lenb( c ) = 0 then Exit Function
'
    Dim oHandle : Set oHandle = CreateObject("ADODB.Stream")
    oHandle.Charset    = "UTF-8"
    oHandle.Open
    oHandle.WriteText c, 0
    oHandle.SaveToFile f, 2        '上書き
    oHandle.Close
end Function

【関連記事】

|

« カテゴリ別書評一覧の新装開店 | トップページ | チャールズ・テイラー「音の不思議をさぐる 音楽と楽器の科学」大月書店 佐竹淳・林大訳 »

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

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: ココログ(Typepad)のバックアップを複数のファイルに分けるVBScript:

« カテゴリ別書評一覧の新装開店 | トップページ | チャールズ・テイラー「音の不思議をさぐる 音楽と楽器の科学」大月書店 佐竹淳・林大訳 »