今とあるサイトを構築中で、そこの記事に今まで書いたはてなダイアリーからデータを持って行った際のメモ。ちなみに smartsection に持って行った場合です。それ以外の場合は各自データ構造を分析してから持って行ってください。
まず、はてなのデータをCSV形式でインポート。データ形式は、
date,title,body,comment,text
ってなってるので、これを smartsection のデータベース形式に変更する必要がある。smartsection は、
itemid,categoryid,title,summary,display_summary,body,uid,datesub,status,image,counter,weight,dohtml,dosmiley,doxcode,doimage,dobr,cancomment,comments,notifypub,meta_keywords,meta_description,short_url,partial_view
って感じのデータ構造でまるっきり違うため、CSVエディタを使って編集。自分の場合はエクセルだと固まったため、Cassava というフリーのCSVエディタを使った。
データ編集の際には、はてなの text カラムは body とダブっているので削除。プレーンテキストが必要なら body の方を消す。
で、あとは既に登録してある記事を参考に、各カラムの内容を埋めていく。事前に1件は記事を登録しておかないと難しいと思う。空欄でもいいのは summary meta_keywords meta_description short_url あたり。これは後から手動で入れるしかない感じ。
で、普通にその辺りの処理だけして作ったCSVの例。
"7","5","何かここ最近ハイペースな更新だ(これでも)","","0"," <div class=""section""> <h3><a href=""/cruel/#p1"" name=""p1""><span class=""sanchor"">■</span></a>[<a href=""/cruel/searchdiary?word=%2a%5b%c6%c7%c5%c7%a4%ad%5d"" class=""sectioncategory"">毒吐き</a>] 日本の権利者は概して原理主義者である</h3> <p>原理主義者が言い過ぎなら、度を超した潔癖性でもいいけどさ。</p> (中略) </div> <div class=""section""> <h3><a href=""/cruel/#p2"" name=""p2""><span class=""sanchor"">■</span></a>しかし……</h3> <p>書き始めたときはせいぜい10行くらいで終わると思ってたのに、何でこんな長文に。</p> </div> ","1","1169790000","2","blank.png","0","0","1","1","1","0","0","1","0","1","","","","0"
これでデータは一応移せるけど、はてなのリンクがそのまま残ってるのは何とかしたいということで、以下の正規表現で空白と置換。
<a href=\"\"\/cruel\/#p.+<\/a>\] <a href=\"\"\/cruel\/#p.+<\/a>
これだと注釈とか付けたリンクなどが残るので、それも全て排除したいなら
<a href=\"\"\/cruel\/#.+<\/a>\] <a href=\"\"\/cruel\/#.+<\/a>
とやればOK。cruel の部分は各自のIDに変更すること。
で、できあがった最終形はこんな感じ。
"7","5","何かここ最近ハイペースな更新だ(これでも)","","0"," <div class=""section""> <h3>日本の権利者は概して原理主義者である</h3> <p>原理主義者が言い過ぎなら、度を超した潔癖性でもいいけどさ。</p> (中略) </div> <div class=""section""> <h3>しかし……</h3> <p>書き始めたときはせいぜい10行くらいで終わると思ってたのに、何でこんな長文に。</p> </div> ","1","1169790000","2","blank.png","0","0","1","1","1","0","0","1","0","1","","","","0"
これを phpMyAdmin を使ってインポートすればOK。その際の設定は、フィールド区切り記号を「,」に(今回カンマ区切りなので)、行の終端記号 を「n」のみにする。あとCSVファイルの漢字コードが Shift-JIS なら、漢字コード変換を「EUC」にチェックを付ける。
以上でデータは正しくインポートできた。ただしこの事例はさくらインターネットでの事例であり、他の環境で同様にうまくいくかは不明。
今更ながら、これだけではちょっと分かりづらい記事なので補足と一部記事修正。
A1セルに日付データがある場合(Windows版 Excel 2003で確認)
=A1*86400-"1970/1/1"*86400
とすれば、日時データのUNIX値が計算される。ちなみに、UNIX時間をシリアル値に直すには、
="1970/1/1"+A1/86400
とすればいい。( http://oshiete1.goo.ne.jp/kotaeru.php3?qid=1018715 より引用)
または、下記ソフトを使って変換してもいい。たくさんあると面倒かもしれないけど。(未使用なので詳細は不明)
UNIXTIME Converter
あとはこの日記の例で表示したままを流用しても、特に問題は出ないはず。