FC2 ブログパーマネントリンクを考慮したリストア用ツール

FC2 ブログバックアップファイルにパーマネントリンクを保持するためのダミー記事を挿入するスクリプトプログラムを perl で書きました。これは記事番号が歯抜けになっている時に使用するためのものです。簡単なものですが、誰もやっていないようなので公開します

使い方は以下の通りです。

用意するもの:
プログラムファイル (backup.pl という名前でダウンロードしましょう)、sitemaps.xml とバックアップファイル (仮に "fc2blog_all.txt" とします)

実行方法:
これら3つのファイルを同じディレクトリに置いて、コマンドラインでそのディレクトリに移動し、

perl backup.pl fc2blog_all.txt > newbackup.txt

と実行するとダミー記事の入った newbackup.txt が生成されます。

  • バックアップファイル中のエントリは番号の昇順に並んでいると想定しています。(全記事をバックアップすれば昇順に並ぶようです。)
  • 記事の時刻をキーに sitemaps.xml 中の記事番号とバックアップファイル中のエントリをマッチングさせているため、同時刻に複数エントリがあるとうまく動きません。時刻は秒も含むので普通に書いていればまず大丈夫だとは思います。
  • ダミー記事は以下の内容になります。気に入らない人は自分でプログラムを直しましょう。
    • タイトルは「DUMMY (n)」、ここで n は抜けていた記事番号。
    • 作成時刻は 2000年 1月 1日 0時 0分 0秒
  • sitemaps.xml については、こちらの説明をご覧ください。このブログならば http://hetarena.com/sitemaps.xml の内容を保存します。当然各自のブログ URL に置き換えてバックアップファイルと同じタイミングで取得したものを使用しなければなりません。

なお、テストは行いましたが、プログラムの不測の動作により問題が生じても責任は負えません。悪しからず。perl は万年初級です。

「perl って何?」という人は… どうしましょう?


参考エントリ


2006.12.27 追記:

  1. 世の中にはタグを取り除いてただのテキストファイルとして XML ファイルを保存してしまうブラウザが存在するようです。これについては簡単な取得用 perl スクリプトを書きました。プログラム中の sitemaps.xml の URL をご自分のものに変えて以下のように実行してください。proxy が必要な環境では "$ua->proxy"… の行を有効にしてプロキシサーバ名とポート番号をご自分の環境に合わせてください。
    perl httpget.pl > sitemaps.xml
    

    実は使っているライブラリが perl の標準なのかよくわかっていないのですが、Linux 上の perl v5.8.8 や Windows 上の ActivePerl 5.8.7 では特にモジュールの追加なく動きました。

  2. sitemaps.xml には下書きのエントリが含まれないため、バックアップ中に下書きデータが含まれる場合は不整合が起こります。手で sitemaps.xml に項目を追加するなりして対処してください。
  3. "-------------------------------" のような内容が記事に含まれても問題ないようプログラムを修正しました。直したのは以下の部分のみです。
    -$/ = "--------\n";
    +$/ = "\n--------\n";
    

2006.12.28 追記:

プログラムを修正しました。修正点は以下の通りです。

  1. 下書き記事が含まれていてもエラーとならないようにしました。ただし、sitemaps.xml に下書き記事の情報は含まれないため、直前の公開記事の番号の続きが使われます。従って下書き記事の直前の記事が削除されているときはその下書き記事の番号が変化します。
  2. ダミー記事のステータスを「下書き」に変更しました。怪しいダミー記事が見えても仕方ないですものね。

テストはしていますが、元のバックアップファイルも必ず保管しておきましょう。

また昨日の “-----—” の扱いの件ですが、「問題ないように」とは「このプログラムでエラーとならないように」という意味です。特に変換処理をしているわけではないので、FC2 のインポートツールの動作ではそのままリストアできないと思われます。

おっと、この記事のリストアができないではないか…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*