ブログシステムを Ghost へ乗り換えてみたが、 Publish 日付とブログの日付が合わない、といった事象が発生していた。(ブログ再構築の際に順番をいしきしていなかった為、 publish 日付でソートされると、あまり宜しくない結果になった。) 仕方ない、、、と放置していたが、この度簡単なスクリプトを書いて対応した。 node のインストールに若干手こずったが、まぁ、Javascript、簡単!

概要

  • Ghost 管理メニューより Export した Jsonファイルを用意する。
  • 今回は、ブログタイトルに、記事日付があったので、それを利用した。
  • title より取り出した 日付で、 publish_at 項目を更新。
  • 本来の日付でソートできた!!
vim convertMyGhostExport.js
var srcPath = "/home/ghost/Desktop/your-domain.ghost.2015-10-07.json";
var dstPath = "/home/ghost/Desktop/your-domain.ghost.2015-10-07_dst.json";
var json = require(srcPath);

json.db[0].data.posts.every(function(post,index,ar){
  var dateStr = post.title.substr(0, 8);
  if (!dateStr.match(/\d{8}/)) {
    // title の頭8文字が数値出ない場合は対象外
    return true;
  }
  if (post.status != "published") {
    // 公開していない場合は対象外
    return true;
  }
  var yyyy = dateStr.substr(0,4);
  var mm = dateStr.substr(4,2) - 1;
  var dd = dateStr.substr(6,2);

  console.log(dateStr, yyyy, mm, dd);
  var published = new Date(post.published_at);
  var newPublished = new Date(post.published_at);
  // title から作成した日付を設定
  newPublished.setFullYear(yyyy, mm, dd);
  console.log("  old: ==> "+published + "," + published.getTime());
  console.log("  new: ==> "+newPublished + "," + newPublished.getTime());
  post.published_at = newPublished.getTime();
  return true;
});

// 変換したJsonを出力
var fs = require('fs');
fs.writeFile(dstPath, JSON.stringify(json, null, '  '));

console.log("Done!");

実行は、 node 開発環境で、以下を実行

node convertMyGhostExport.js

Ghost ブログの管理画面から Delete All Post にて、全ブログデータを削除後、 Generate した Json ファイルから Import すると、あら結果OKじゃないの。 ちなみに、 Ghost ブログの Delete All Post では、 content/image などの 画像ファイルは消されない(DBのみクリア)っぽいので、この処理だけでうまくいった。