サーバー移動反省点 5 ーブログデータ変更、修正(Rewrite含む)、画像ファイル取得ー

これは結構、、、いやかなり面倒でした。

データを考えるのは好きなので、苦労ではないんですがホント面倒でした。

この記事は長くなりますので、続きを読んでみたい方だけどうぞ!

 

画像データ移行

まず画像データです
ロリポップ&JUGEMサーバーに置いてある画像を自分サーバーに置きたいと考えてました。

そのためには、
(1) 画像の取得
(2) 記事の画像URLの変更

 

この2点が必要なんですね。
ということで、簡易的なバッチプログラムを作りましたよ〜。
DB構成はテーブルも少ないので、解析も簡単だったのですが、
本サイトにER図があったので、作る前に念のため確認しました。(WordPressER図)

 

バッチプログラムの処理フロー

  1. WordPressデータベースに入れた、記事を取得する(wp_term)
  2. 記事から正規表現を用いて、画像のURLを取り出す
  3. URLからfile_get_contentsで画像ファイルを取得する
  4. 画像ファイルを日付連番の名前に変更し、記事の年月のディレクトリに置く
    (記事の年月は同タイミングで自動生成)
  5. 記事のURLを新しい画像URLに置き換えて、記事を更新する。

 

画像のURLを取り出すところは、雑な正規表現ですw
得意ではないんですよね、正規表現…。
アフィリエイトの画像は省いたり、そこそこ制限はいれています。

 

これで、自サーバーに置ける画像データができあがりました。

 

タグ作成

そして、タグとカテゴリに関して。
管理画面に、カテゴリをタグに変換・タグをカテゴリに変換、という機能があるので、
期待して使ったのですが、本当に変換するだけの機能で、

 

タグに変換するとカテゴリがなくなり、カテゴリに変換するとタグがなくなるという…。
後でテーブル構造をみてみると、リレーションはそのままで、

カテゴリかタグかどうかのカラムを変えただけという…。

 

 

私がやりたいのは、それじゃない・・・。

 

 

やりたいことは以下2点
(1) カテゴリと同じタグを作成したい
(2) 1で作ったタグを記事に設定したい
これですね。さて、、、ということで、またもやバッチプログラム作成ですw

 

 

  1. タグのデータ作成
  2. 記事から、カテゴリの名前を取得し、タグの名前と付きあわせてタグのIDを取得
  3. リレーションテーブルをINSERTする

 

ちなみに、WordPressのテーブル構造はとても簡単で(言葉を選んでおります)、
外部キー制約もあまりないので、テストするにはラクです。
それでも、データは大事なので要所で、DB全体のdumpを取得し、
変なデータが出来上がったときは、dumpから一気に入れ替えしています。
dumpデータ大事です!

 

 

これで簡易的ではありますが、タグが出来ました。

残りのタグは、空いてる時にちまちまと手動で増やしていきます。

 

 

URLの考察

そして、結構悩んだ最大の関門…。
「記事のURLの整合性」

 

SEOも含む話なのですが、
例えば、JUGEMの記事のURLって、

 

http://blog.quality-season.jp.s3-website-ap-northeast-1.amazonaws.com/p=12345

 

みたいになっているんですね。
このp=12345 の部分。
この数字は、JUGEMサーバー内のデータIDのため、

個人で割り振られているわけではないんですね。
なのでブログ内での統一性はあまりないです。

 

このID、もしくはURLがエクスポートファイルに書きだされていれば問題なかったんですが、
そんなもんはありませんでした。(・д・)チッ

 

それで、WordPressのデータにインポートすると、新しく記事が作成されていくので、
記事のURLが

 

http://blog.quality-season.jp.s3-website-ap-northeast-1.amazonaws.com/eid=1

 

となります。
この数字が異なってしまうと、
今までGoogleさんが貯めこんでくれた、

 

Google検索結果からの誘導がほぼ無意味になってしまうんです。

 

 

アクセス誘導がもったいなーい。

 

 

ということで、Rewriteを考察しました。
以前のURLで訪問してくれた場合、新しいURLに自動的に遷移してくれるような感じです。
ただ、、、やっぱり数字に整合性がなくて、どうにもこうにもならなかったんで…。

 

かなり力技でバッチプログラム書きました(またかよ!)

 

結構、いろんなこと考えたんですけどね。

 

 

  1. 簡単に新規テーブルを作ります。

例)PK、JugemのID、WordPressのID、Jugemの記事タイトル(確認用)、WordPressの記事タイトル(確認用)
2. 実際に当時のBlogの年月・ページ指定のサイトURLからfile_get_contentsでファイルを取得
3. 取得したHTMLから、タイトルのHTMLタグとリンクタグからIDを正規表現で探す。
4. タイトルからWordPressのDBを検索して、記事情報を取得。
5. 1で作ったテーブルに、3で取得したJugemのIDとタイトル、4で取得したWordPressのIDをINSERTする。
6. これを全ての年月・ページ数で繰り返す

 

 

これで、ほぼ全てのデータが中継されるテーブルに作られます。
実際には、タイトルにたまに使われているチルダ(コレ→〜)などが邪魔をして、
15件くらい取得できなかったのもあったんですが、
それはもう手動でINSERTしました。
これが出来てしまえば、後はちゃんとできているかをSELECTで確認します
タイトルを一緒に入れているので、タイトルが一致していればOK。
確認が終わったら、中継テーブルとWordPressのテーブルをJOINして、
JugemIDをPKとし、いっきにWordPressの記事テーブルにINSERTします。
PKの採番はかなり進んでしまうのですが、これで記事の番号がおなじになりました。

 

古いデータを消す前に、気をつけなければならないのが、カテゴリとタグのリレーション。
これも古い記事IDに紐付いているので、これも各テーブルをJOINして一気にUPDATEします。
そして、問題なければ、DELETE
ということで、ようやく新しいデータが出来上がりました!

 

そしてもうひとつ、
http://blog.quality-season.jp.s3-website-ap-northeast-1.amazonaws.com/p=12345
http://blog.quality-season.jp.s3-website-ap-northeast-1.amazonaws.com/eid=12345

 

このp=の部分とeid=の部分。
URLの変数名が、WordPressの管理画面から変更できるかなーと思ってたんですが、
パッと見た感じ、上手いこと変更できなかったんですよね。
で、元々動的なURLはSEO的にちょっとアレだなーと思ってたので、

 

最終形は

 

http://blog.quality-season.jp.s3-website-ap-northeast-1.amazonaws.com/12345.html

 

にしたい!と思ってました。
ここでRewrite登場ですね。

 

 

はい・・・

 

 

ここは、うちの上司がボランティア(たぶんw)で書いてくれましたw
よくわかんないんですもん。
書き上がったのを見ると、ああーなるほど、ってなるんですけどね。。。
(このお礼はお仕事を頑張ることでチャラになると思っております)

 

 

職権乱用?ありがたやー、ありがたやーですw

 

 

ということで、Rewriteはあっさりとできあがりました!

 

コメントを残す

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


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>