これは結構、、、いやかなり面倒でした。
データを考えるのは好きなので、苦労ではないんですがホント面倒でした。
この記事は長くなりますので、続きを読んでみたい方だけどうぞ!
画像データ移行
まず画像データです
ロリポップ&JUGEMサーバーに置いてある画像を自分サーバーに置きたいと考えてました。
そのためには、
(1) 画像の取得
(2) 記事の画像URLの変更
この2点が必要なんですね。
ということで、簡易的なバッチプログラムを作りましたよ〜。
DB構成はテーブルも少ないので、解析も簡単だったのですが、
本サイトにER図があったので、作る前に念のため確認しました。(WordPressER図)
バッチプログラムの処理フロー
- WordPressデータベースに入れた、記事を取得する(wp_term)
- 記事から正規表現を用いて、画像のURLを取り出す
- URLからfile_get_contentsで画像ファイルを取得する
- 画像ファイルを日付連番の名前に変更し、記事の年月のディレクトリに置く
(記事の年月は同タイミングで自動生成) - 記事のURLを新しい画像URLに置き換えて、記事を更新する。
画像のURLを取り出すところは、雑な正規表現ですw
得意ではないんですよね、正規表現…。
アフィリエイトの画像は省いたり、そこそこ制限はいれています。
これで、自サーバーに置ける画像データができあがりました。
タグ作成
そして、タグとカテゴリに関して。
管理画面に、カテゴリをタグに変換・タグをカテゴリに変換、という機能があるので、
期待して使ったのですが、本当に変換するだけの機能で、
タグに変換するとカテゴリがなくなり、カテゴリに変換するとタグがなくなるという…。
後でテーブル構造をみてみると、リレーションはそのままで、
カテゴリかタグかどうかのカラムを変えただけという…。
私がやりたいのは、それじゃない・・・。
やりたいことは以下2点
(1) カテゴリと同じタグを作成したい
(2) 1で作ったタグを記事に設定したい
これですね。さて、、、ということで、またもやバッチプログラム作成ですw
- タグのデータ作成
- 記事から、カテゴリの名前を取得し、タグの名前と付きあわせてタグのIDを取得
- リレーションテーブルを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に自動的に遷移してくれるような感じです。
ただ、、、やっぱり数字に整合性がなくて、どうにもこうにもならなかったんで…。
かなり力技でバッチプログラム書きました(またかよ!)
結構、いろんなこと考えたんですけどね。
- 簡単に新規テーブルを作ります。
例)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はあっさりとできあがりました!