移行作業だいたい完了!!
SakuSakuジゴロウ卒業にあわせて、当ブログもJugemからHatenaに引っ越した。はてなに越してきた理由は・・
- 過去ブログのインポートができるようになっていた。
- はてなという組織じたいに興味が。
インポートについては前からあったらいいなと思ってたら、いつのまにか実装されてた。やっぱ、キーワードに勝手にリンクが張られたり、とかって楽しいな。似たようなキーワード使ってるページを見れたり(隣のはてな・だっけ)。で、はてなという組織が、すごく若くて自由らしい。アイデアが行動の源!アイデアって重要だな。なんか、はてなって日本版グーグルって感じの会社だ。
今までJugemというブログサービスを使ってきたのだが、Hatenaに移行するにあたって、これまでにホームページやBlogで書いてきた日記を全部Hatenaに移行したいなとおもった。そこでJugemのエクスポート機能を使ってすべての日記をXML出力。で、Hatenaにインポートすんべ!と思ってたら、やっぱりJugemとHatenaじゃXMLの形式が違うと。
というわけで、JugemのエクスポートXMLファイルをHatenaのインポートXMLファイルに変換するJugem2hatenaというJavaクラスを作ってみた。以下がソースなり。うーん、DOMってやっぱめんどくさいけど、便利だわ。DOMといえば入社直後のプロジェクトで使ってたな。。
うん。社員のスキルデータを帳票に直すっていう機能だったな。
package kenmaz.jugem2hatena; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Jugem2Hatena { public static void main(String[] args) throws Exception { List list = new ArrayList(); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbFactory.newDocumentBuilder(); Document doc = builder.parse(new File("jugem.xml")); Element root = doc.getDocumentElement(); NodeList entries = root.getChildNodes().item(4).getChildNodes(); for (int i = 0; i < entries.getLength(); i++) { Node entry = entries.item(i); NodeList children = entry.getChildNodes(); Data data = new Data(); Node titleItem = children.item(0).getChildNodes().item(0); if (titleItem != null) { data.title = titleItem.getNodeValue(); } Node categoryItem = children.item(2).getChildNodes().item(0); if (categoryItem != null) { data.category = categoryItem.getNodeValue(); } Node dateItem = children.item(3).getChildNodes().item(0); if (dateItem != null) { data.setDate(dateItem.getNodeValue()); } Node descrptionItem = children.item(4).getChildNodes().item(0); if (descrptionItem != null) { data.description = descrptionItem.getNodeValue(); } list.add(data); } create(list, builder); } private static void create(List list, DocumentBuilder builder) throws Exception { Document doc = builder.newDocument(); Node dialy = doc.createElement("diary"); for (Iterator iter = list.iterator(); iter.hasNext();) { Data data = (Data) iter.next(); Node day = doc.createElement("day"); NamedNodeMap dayAtt = day.getAttributes(); Attr dateAttr = doc.createAttribute("date"); dateAttr.setNodeValue(data.date); dayAtt.setNamedItem(dateAttr); Node body = doc.createElement("body"); String bodyText = createBodyText(data); body.appendChild(doc.createTextNode(bodyText)); day.appendChild(body); dialy.appendChild(day); } doc.appendChild(dialy); TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new FileOutputStream(new File( "out.xml"))); transformer.transform(source, result); } private static String createBodyText(Data data) { String title = data.title; String description = data.description; String category = data.category; StringBuffer sb = new StringBuffer(); sb.append("*["); sb.append(category); sb.append("]"); sb.append(title); sb.append("\n"); sb.append(description); return sb.toString(); } private static class Data { public String title; public String category; public String date; public String description; public void setDate(String newDate){ int idx = newDate.indexOf(" "); newDate=newDate.substring(0,idx); date = newDate.replace("/","-"); } } }