はてなダイアリーからの記事移行
思い立って昔はてなダイアリーで書いていた記事をこのブログに移行した。
昔のブログは フリーフォーム フリークアウト。2012 年から更新していない。
以降の方針
- はてなダイアリーの機能で、エントリを movable type 形式でエクスポート
- エクスポートしたファイルを、現在のブログの形式に変換
- 1 つの mt 形式のファイル => エントリごとに分割された md 形式のファイル
- 過去のはてなダイアリーの各記事の中身を移行後の URL へのリンクに書き換える
- リダイレクトするのは無理なので
記事の移行
- 記事のエクスポート
http://d.hatena.ne.jp/{your id}/port
からMovable Type 形式
のテキストファイルを取得
- ruby 環境の準備諸々
brew update
brew install rbenv
rbenv install 2.4.1
rbenv exec gem install bundler
rbenv rehash
cat << EOS > Gemfile
source "http://rubygems.org"
gem "mustache"
gem "stringex"
EOS
rbenv exec bundle install --path vendor/bundle
- 適当に拾ってきた mt to md converter というスクリプトを改造して使う
- https://gist.github.com/cou929/6f2e3eb40abaea09a9d933d7f946b0e4
- なお、以下のカスタマイズを行った
- 出力フォーマットの修正 (元は octpress に合わせたフォーマットだったので)
- 旧記事のリンクをコメントに埋め込み
- 1 日に複数記事ある場合、1 ファイルにマージする
- parse error の微修正
- 出力ファイルの mtime を記事作成日に変更
rbenv exec bundle exec ruby mt_to_markdown.rb ./cou929_la.txt ./res
これではてなダイアリーの各エントリを markdown 形式で保存できた。あとはいつもの手順でこれを publish した。
旧 URL からのリダイレクト
- 認証
- OAuth は面倒なので WSSE 認証 で。
- こんな感じでたたける
curl -H 'X-WSSE: UsernameToken Username="cou929_la", PasswordDigest="6iTSm2Gsg6ePCz+Or7UnIv/IARI=", Nonce="5kV1Q1Tq3mK5CItNrdL1Ph4UFB0=", Created="xxxx"' 'http://d.hatena.ne.jp/cou929_la/atom'
- 過去エントリの取得
- まずは全エントリの title, date, entry_id を取得する。こちら の
日記エントリーの取得
API を使う。 - レスポンスが xml なのでパースに苦労する。
xmllint
で何故かうまくパースできず (xpath がうまくマッチしない。後述のxpath
コマンドでなら動作するのだが。)、mac のxpath
コマンドを使った。それでも出力がかなり微妙 (stdout への出力に改行が入らなかったり)… なので、置換で無理やりなんとかしている。
- まずは全エントリの title, date, entry_id を取得する。こちら の
curl -s -H 'X-WSSE: UsernameToken Username="cou929_la", PasswordDigest="6iTSm2Gsg6ePCz+Or7UnIv/IARI=", Nonce="5kV1Q1Tq3mK5CItNrdL1Ph4UFB0=", Created="2017-08-06T19:43:07Z"' 'http://d.hatena.ne.jp/cou929_la/atom/blog' | xpath -p '//entry/link[contains(@rel,"alternate")]/@href | //entry/title/text()' 2>/dev/null | perl -nle '$_ =~ s/ href="(.*?)"/\n$1\t/g; print $_' | perl -nle '/cou929_la\/(\d+)\/(\d+)/; print "$1\t$2\t" . (split /\t/, $_)[1]' | tee -a entries.tsv
- こんな感じの出力になる
# date, etnry_id, title の tsv
20130420 1366445641 MySQL Casual Talks vol.4
20130121 1358776754 [book] Web API 設計のベストプラクティス集 "Web API Design - Crafting Interfaces that Developers Love"
20121229 1356746993 [javascript] Google JavaScript Style Guilde をリビジョン 2.64 にあわせて修正しました
...
日記エントリーの取得
API はページングされているので、同じ要領ですべてのデータを取得。過去記事のりすとにあたるひとつの tsv ができる。最後に、更新
- こちら の
日記エントリーの編集
API を使う - 以下のように xml を投げ込めば良い
- こちら の
curl -s -X PUT -H 'X-WSSE: UsernameToken Username="cou929_la", PasswordDigest="6iTSm2Gsg6ePCz+Or7UnIv/IARI=", Nonce="5kV1Q1Tq3mK5CItNrdL1Ph4UFB0=", Created="2017-08-06T19:43:07Z"' 'http://d.hatena.ne.jp/cou929_la/atom/blog/20071109/1194621111' -d 'はじめます 移転しました http://please-sleep.cou929.nu/ '
まだやっていないこと
- 画像の置き場所をはてなフォトライフから自前に移行する
- はてなキーワードになっているリンクの修正
はてなブログ Perfect GuideBook
posted with amazlet at 17.08.06
ソーテック社 (2016-07-22)
売り上げランキング: 9,926
売り上げランキング: 9,926