OCNブログ人からSonetブログへの引っ越し日記 [デジタル・インターネット]
あまり誰にでもできる内容ではないですが、それなりに苦労したので自分メモを兼ねて記事にしておこうかと。
そもそもはブログ人のサービス終了っつー厄介な話が出てきたのが五月。
引っ越しに関する詳細が出てくる9月までのんびり待って増してその内容を見たのですが、gooブログ以外への引っ越しにはかなり面倒になることがこの時点で分かりました。
最初は特に気にせずgooブログさんにしようかとも思ったのですが、これOCN直営かと思ったらどうも違うっぽい。
ただでさえ多いアカウントをこれ以上増やしたくないのもあって、プロバイダにしているSo-netさんにブログサービスがあるはずだと思って探してみたらあったのでこれにすることに。
さて公式の移植ツールがサポートされてない宛先なので、記事はともかく、画像の引っ越しができない。
うちのブログは感想記事半分、TRPG記事半分、そして写真記事半分(あれ、計算が合わない)ってとこなので写真の引っ越しをどうにかできないかとがんばってみたのが今回の記事です。
まあぶっちゃけ簡単にはどうにもならんのですが(おい
今回はこんな手を使ってみました。
まず、OCNブログ人の記事データを引っこ抜きます。
これは公式Q&Aにも載っている方法でできます。記事を引っこ抜きたいブログの管理画面から、「読み込み/書き出し」タブに移動して「記事を書きだす」の項目を使えばOK。
これで過去の記事を一通り吸い出せます。俺の場合は締めて2152件。書きも書いたりですなあ。
全チェックはしてませんが、これがMovableTypeとかいうよくわからない形式で全件吸い出せるっぽい感じです。良くわからない形式ですがテキストファイルなのでどうとでもいじれます。
こいつをSo-net側の「記事管理」タブの「インポート・エクスポート」からインポートすれば記事は移植できます、が、割と失敗と表示されます。
失敗と表示されますが記事は上がってるみたいなので、二回三回と試すと同じが多重に投稿されちゃうので、注意です。
インポートした記事が全部反映されるには時間がかかるようなので、しばらくまって記事数をチェックして、足りないようならブログごと消して再投稿とします。
で、ここで注意したいのが、先述した画像ファイルのアドレスです。
そのままインポートすると、このアドレスがOCNのアドレスのままなので、OCN側のファイルが消されてしまう11月30日にはすべてリンク切れとなってしまいます。
なので画像ファイルをSo-net側に移植しなければなりませんし、インポートファイルのアドレスもSo-net側のアドレスにしないといけません。
いろいろ試しまして、So-netブログは画像を1件ずつアップロードすればファイル名がそのままでアップロードされることが分かりました。
最大10件まで一緒にアップロードできる仕様ではありますが、これを使うと(おそらくファイル名の重複を避けるために)ランダムのファイル名になってしまうので都合が悪いです。なので1件ずつアップロードします。
そのためにはOCNの方から画像をダウンロードしないといけません。
先のインポートファイルから、画像ファイルのアドレスを全部引っこ抜きます。
後で考えるとこの時点でプログラム組んだ方が早かったのですが、今回はテキストエディタのGrepツールを駆使して一通り画像ファイルのアドレスを引き出しました。
うちの場合はこれが1043枚。
画像ファイルに関しては、この引っこ抜いたアドレスを適当なダウンローダーツール拾って来て食わせてダウンロードすれば一通り抜き出せます。
次にインポートファイル内のアドレスの置換ですが、これはもうプログラムを組みました。OCNの画像ファイルのアドレスは日付で分けられているので、一括置換ではいかないのですね。
超手抜きですが、こんなC#コードを組んでVisualStudioeExpressでビルドして実行。
-------------------------何か呼び出す関数の中-------------------------
System.IO.StreamReader sr = new System.IO.StreamReader(@"F:\TRPG\天下無敵の独り言バックアップ(20140905) - コピー.txt");
List<string> lines = new List<string>();
string line = sr.ReadLine();
while(line != null)
{
lines.Add(line);
line = sr.ReadLine();
}
sr.Close();
// 格納フォルダ置換
for (int i = 0; i < lines.Count; ++i)
{
if (lines[i].Contains(@"ブログ人側の画像格納フォルダのアドレス") == true)
{
string taihi = lines[i];
string[] sp_split = lines[i].Split(new char[] { ' ' });
// おおもとのイメージ置換
for (int j = 0; j < sp_split.Length; ++j)
{
if (sp_split[j].Contains(@"ブログ人側の画像格納フォルダのアドレス") == true)
{
string[] sl_split = sp_split[j].Split(new char[] { '/' });
sp_split[j] = string.Format("src=\"So-net側の画像格納アドレス{0}", sl_split[sl_split.Length - 1]);
Console.WriteLine();
}
}
// サムネイル置換
for (int j = 0; j < sp_split.Length; ++j)
{
if (sp_split[j].Contains(@"ブログ人側の多分サムネイル画像格納フォルダのアドレス") == true)
{
string[] sl_split = sp_split[j].Split(new char[] { '/' });
sp_split[j] = string.Format("src=\"So-net側の画像格納アドレス{0}", sl_split[sl_split.Length - 1]);
Console.WriteLine();
}
}
StringBuilder sb = new StringBuilder();
for(int j=0; j<sp_split.Length; ++j)
{
sb.Append(sp_split[j]);
sb.Append(" ");
}
lines[i] = sb.ToString();
Console.WriteLine();
}
}
//ファイル書き出し
System.IO.StreamWriter sw = new System.IO.StreamWriter("Upload.txt");
for (int i = 0; i < lines.Count; ++i)
{
sw.WriteLine(lines[i]);
}
sw.Close();
--------------------------------------------------
OCN側は画像ファイルのアドレスが分かれてますがSo-net側は同じフォルダに格納されるみたいなのでこれで行けます。
これでインポートファイル内部の画像へのアドレスがSo-netにさしかわるので、こいつを先述の方法でSo-net側にインポートします。
そして画像は・・・
1枚1枚手作業でアップロードしていきます(笑
いやこれこそプログラムでどーにかしたかったんですがコード解析してでっちあげるのもめんどかったので、4日ぐらいかけて千枚超のファイルをちまちまあげておりました。
大分疲れましたが、以上の作業で画像含めて一通りのデータ引っ越しに成功しました。
まあ、2千件超の記事全部確認したわけじゃないので不備はあるかもですが、そこまで行くときりがないのでこの辺で妥協。
試行錯誤の過程で、ホームページビルダー17での移植なども試してみましたが、全件移植が簡単ではないのと、画像がやはりSO-net側に移動できないので断念しました。
ともあれ今週はこの作業でほぼつぶれました。おおう色々とやる予定の作業が何も進んでねえー。
モノトーンミュージアムのイケメンの国シナリオは、今週末の連休で一気に進めて挽回しよう。
お引っ越し乙ですー。コンゴトモヨロシク。
この手のサービスって管理が楽なのはいいけど、こういう時大変ですね。
やっぱし多少面倒でも自分でツール導入してやってった方がいいのかな。
あいや別に自サイト再開させたりとかいった予定は無いですが(笑)。
by うぉーろっ君 (2014-09-12 05:16)
>うぉーろっくんさん
ありがとやんすー。というかこのブログコメントメール通知してくれないのか。後で設定探してみよう。
ブログに限らずオンラインのサービスは、サーバーが辞めちゃうと利用できなくなるつーか今までの資産が消えるのが難点ですわね。
自分でサーバたてりゃいいんだろうけどなあ
by 天下無敵の無一文 (2014-09-20 11:08)