Categories: R10ブログ

ブログ記事 移動ツールをまとめる Rev.1

そろそろ旧ブログの記事を移行しないと新記事のサイト内リンクとか貼りにくいので作業開始・・・・

記事移行の目標は
アメブロ→FC2→WordPressへの引っ越しでできた不要フィールド / レコードの削除
今回は単純にデータベーステーブルをエクスポート、インポートできないので1記事毎に不要な情報が含まれていないか確認。
wp-content/uploads/ディレクトリ内に使っていない画像が大量に残っているので不要画像は引き継がずに整理

新ラベルの付加
All in One SEO等のオプションパラメータを引き継がない
アメブロやFC2のアイコンを使ったリンクの排除&置き換え
無効になったアフェリエイトリンクの削除
旧ブログからの記事引っ越しをできるだけ自動化できるように手順とツールを自分用メモを兼ねてまとめてみます。

作業手順

1) 記事一覧をプリントアウトして移行しない記事を選別
2) エクスポート用記事のカテゴリを作成
3) 作業対象の記事にエクスポート記事のカテゴリを付ける
(分からなくならないように古い記事から行う。まとめて設定する場合は記事一覧から)
4) ダッシュホードの「設定」-「エクスポート」から「エクスポート記事」カテゴリの記事をエクスポートしXMLを保存
5) エクスポートしたXMLからツールAを使って画像一覧を取得
6) 4)で作成した画像一覧を使いツールB)でローカルPC上に画像を集取
7) ツールBで収集した画像をFTPで新サーバの対象ディレクトリにアップロード
8) ツールCで記事内リンクを新サイトのURLに置き換え
9)  変換したXMLを 「設定」-「インポート」でインポート
A) アメブロへリンクされた画像リンクをツールDで探して手動で削除
B) インポートされた記事に新しいタグを付けて、インポート記事のチェック
(アメブロへのリンク置き換えが自動化できればさらに楽々なのですが、いい方法が思い浮かびません・・・)

ツール

■ ツールA
エクスポートXMLから画像URLを抽出するさくらエディタマクロ

//キーボードマクロのファイル
S_ReplaceAll('\\n', '\\r\\n', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('^((?!/wp-content/[\\w/:%#\\$&\\?\\(\\)~\\.=\\+\\-]+).)*$', '', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('^\\r\\n', '', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('^\\n', '', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('^\\r', '', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('(wp-content[a-zA-Z0-9/_".\-]{1,64})', '$1\\n', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('^((?!/wp-content/[\\w/:%#\\$&\\?\\(\\)~\\.=\\+\\-]+).)*$', '', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('(.+)(wp-content[a-zA-Z0-9/_".\-]{1,64})(.+)', '$2', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('^\\n', '', 60); // すべて置換
S_ReDraw(0); // 再描画
S_ReplaceAll('\\r', '', 60); // すべて置換
S_ReDraw(0); // 再描画
S_SelectAll(0); // すべて選択
S_SortAsc(0); // 選択行の昇順ソート
S_Merge(0); // 連続した重複行の削除(uniq)

■ツールB
上記マクロで抽出した画像リストを使って画像をローカルに収集するPHPスクリプト

<?php
// 記事中の画像収集スクリプト v.1.0
// BaseURLからの相対でディレクトリ構成を保って画像を収集
// 項目の先頭にセミコロンで該当行無効
// 収集中サーバにスパム扱いにされないように1画像1秒のインターバルを入れる
$BaseUrl = 'http://asakita.net/kabekin/';
$FileFolder = 'D:\\';
$ListFile = 'D:\ImgList.txt';
print("+++ Process Start...\n");
SaveListItem($ListFile, $BaseUrl, $FileFolder);
print("+++ Process Complete...\n\r");
exit(0);
//+++ ListFileの項目を抽出して画像を保存
// In:$ListFile=項目リスト Out:なし
function SaveListItem($ListFile, $BaseUrl, $FileFolder) {
 $iCnt = 0;
 $data = file($ListFile);
 foreach ($data as $row) {
  $iCnt++;
  $rowf = str_replace(array("\r\n","\r", "\n"), '', $row);  // 改行フィルタ
  sleep(1);  // 1秒ウェイト
  if (substr(trim($rowf), 0, 1) <> ';') {  // 有効確認
   // ディレクトリチェック&作成
   $PathVal = pathinfo($rowf);
   $DirName = $PathVal['dirname'];
   $DirName = $FileFolder . str_replace("/", "\\", $DirName);  // /→\ 変換
   if (file_exists($DirName)==false) {
    mkdir($DirName, 0777, true);
   }
    // 画像取得
   $ImgUrl = $BaseUrl . $rowf;
   $RecSize = SaveUrlImg($ImgUrl, $DirName);
   Disp($iCnt, $ImgUrl, $RecSize);
  }
 }
}
//+++ URLを指定し画像を取得し保存する
// In:$UrlStr=ターゲット画像URL, $FileFolder=保存フォルダ, Result:保存サイズ
function SaveURLImg($UrlStr, $FileFolder) {
 $Url = pathinfo($UrlStr);
 $InData = file_get_contents($UrlStr);
 $FileName = $Url['filename']; //ファイル名(拡張子なし)
 $ExtStr = $Url['extension']; //拡張子
 $OutData = $FileFolder . "\\" . $FileName . '.' . $ExtStr;
 $Res = file_put_contents($OutData, $InData);
 return $Res;
}
//+++ Info表示
function Disp($iCnt, $UrlStr, $RecSize) {
 $date = date_create_from_format('j-M-Y', '01-Jan-2015');
 echo date_format($date, 'Y-m-d H:i:s ');
 $format = "  No.%03d  取得URL=%s  保存容量=%s\n";
 printf($format, $iCnt, $UrlStr, $RecSize);
}

即席で作った適当スクリプトですので、参考にならないかと思います・・・・^^;;;

■ツールC
記事内リンクの変換マクロ

//キーボードマクロのファイル
S_ReplaceAll('(http://)fehobby.jp(.+)', '$1asakita.net/kabekin$2', 60); // すべて置換
S_ReDraw(0); // 再描画

■ツールD
アメブロへのリンク検出マクロ

//キーボードマクロのファイル
S_SearchNext('ameba.jp', 60); // 次を検索

アメブロにリンクされた表情アイコンなどはうまい一括置き換えが思い浮かばないので手動で置き換え・・・

さて、うまく運用できるでしょうか・・・

問題点を蓄積しながら試してみます^^

kabekin