Finally, I can convert tumblr blog to Octopress!

前回の続き

前回のエントリーでは、tumblr APIを手作業で実行して、xmlを出力したり、octopress用のmarkdownに変換する方法を書いた。

今回は全ての作業を一括して実行するツールであるtumblr2markdownを作った話。

使い方はREADME.mdにも書いた通りだが、日本語でも書いておこうと思う。

Installation

このtumblr2markdownではSymfony2のComsoleコンポーネントを使用している。その依存関係を判断して、自動的に必要なライブラリをインストールしてくれるのがComposerだ。

Install composer

Composerをインストールしていない場合は、まずComposerをインストールする。

curl -sS https://getcomposer.org/installer | php

次はcomposer.jsonを用意しておく。ここにはインストールすべきツールであるtumblr2markdownが必要だ、ということを書いておく。

composer.json
{
require: {
"satooshi/tumblr2markdown": "dev-master"
}
}

Install tumblr2markdown

それからcomposerコマンドを使ってtumblr2markdownをインストールする。

$ composer install

which composerを実行したときにcomposerコマンドが見つからない場合はこの方法でインストールできるはずだ。

$ php composer.phar install

You can git clone as an alternative way

もちろん、直接git cloneしても大丈夫だ。cloneしたディレクトリでcomposer installすればいい。

# HTTP
$ git clone https://github.com/satooshi/tumblr2markdown.git
# SSH
$ git clone git@github.com:satooshi/tumblr2markdown.git

Usage

tumblr2markdownで使えるオプションは-hまたは--helpで確認できる。

# show help
$ php app/console.php tumblr:markdown -h
Usage:
tumblr:markdown [-b|--blogname="..."] [-o|--output="..."] [-d|--dump-redirect] [-t|--type="..."] [-i|--id="..."] [--tagged="..."] [--chrono="..."] [--search="..."]
Options:
--blogname (-b) Your blog name
--output (-o) Output directory (default: "_posts")
--dump-redirect (-d) Dump redirection code for Sinatra
--type (-t) The type of posts to return. If unspecified or empty, all types of posts are returned. Must be one of text, quote, photo, link, chat, video, or audio.
--id (-i) A specific post ID to return. Use instead of start, num, or type
--tagged Return posts with this tag in reverse-chronological order (newest first). Optionally specify chrono=1 to sort in chronological order (oldest first).
--chrono Return posts with this tag in reverse-chronological order (newest first). Optionally specify chrono=1 to sort in chronological order (oldest first).
--search Search for posts with this query.

必要なオプションは-bまたは--blognameだ。ここではブログ名を指定する。自分のtumblrページのURLがsatooshi-jp.tumblr.comだったら、satooshi-jpを指定する。

$ php app/console.php tumblr:markdown -b satooshi-jp

これを実行すると_postsディレクトリが作成され、この中にY-m-d-slug.markdownというファイルが出来上がっているはずだ。これがOctopress用のmarkdownファイルとなる。

Filter export posts

出力したいエントリーをフィルターしたい場合には、次のオプションが使用可能だ。

  • --type (-t)
  • --id (-i)
  • --tagged
  • --chrono
  • --search

--typeはtumblrブログのエントリータイプをフィルターする。例えば、textタイプのみ出力したい場合は、次のようなコマンドを実行する。というより、このタイプ以外には対応していないので、注意が必要だ。

$ php app/console.php tumblr:markdown -b satooshi-jp -t text

--idは特定のエントリーだけを出力したい場合に使用する。例えば、エントリーIDが43537435080の場合は次のようなコマンドを実行する。

$ php app/console.php tumblr:markdown -b satooshi-jp -i 43975662084

--taggedは特定のタグが付いたエントリーだけを出力したい場合に使用する。例えば、"photo"というタグが付いたエントリーの場合は、次のようなコマンドを実行する.

$ php app/console.php tumblr:markdown -b satooshi-jp --tagged photo

--chrono--taggedと一緒に使うオプションだ。単に出力順を変えるオプションで、0か1を指定する。

--searchはエントリー内の単語を検索してくれるらしいぞ。実際に付けて実行したことないので、どうなるかは試してみてからのお楽しみだ。

Dump redirection code for Sinatra

もし、tumblrを独自ドメインで使っていて、Octopressでも同じドメインを使う場合、tumblrのURLをOctopressのURLにリダイレクトしたいという事もあるかもしれない。その時には--dump-redirectまたは-dを付けると、リダイレクト用のコードを出力可能だ。ファイルに出力した方が便利だったかもしれないが、echoしただけなので、標準出力に出てくる。完全に手抜きだ。どうしてもファイルに出したい場合は> redirect.rbとかなんとかしてほしい。

Limitation

適当に作ったツールなので、制限事項がある。

  • textタイプ以外のエントリーには対応していない
  • htmlフォーマット以外のエントリーには対応していない

もしこれらの制限事項に当てはまる場合は、適当にforkするか、気軽にpull requestして欲しい。もちろん日本語のPRでも大丈夫。markdownフォーマットで書いている場合はpandocを実行しないようにすればいいだけなので、対応も簡単なはずだ。

ちなみに、Githubのページはここにある。