Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
146 lines (99 sloc) 4.6 KB


Build Status

Movable Type import / export format parser and builder for Ruby.

Format documentation is below.


$ git clone https:://
$ cd movable_type_format
$ bundle install
$ bundle exec rake install


mt2json command parse MovableType import /export format and format to JSON.

$ cat exported.txt | mt2json
    "author": "Foo Bar",
    "basename": "a-dummy-title",
    "body": "This is the body.\n\nAnother paragraph here.\n\nAnother paragraph here.",
    "categories": [
    "comments": [
        "author": "Foo",

# You can specify file instead of stdin.
$ mt2json exported.txt

# -h / --help option prints help
$ mt2json -h

# -c / --compact-output option outputs in a single line.
$ mt2json -c exported.txt

Usage of library


First, load gem.

require "movable_type_format"

MovableTypeFormat::Parser.parse parses String or IO, and returns Enumerator of MovableTypeFormat::Entry.

exported ="exported.txt")
entries = MovableTypeFormat::Parser.parse(exported)

MovableTypeFormat::Entry has sections. Sections are collection of MovableTypeFormat::Section::Base (or its descendant).

entry = entries.to_a[0]
pp entry.sections
# [#<MovableTypeFormat::Section::Metadata:0x007fc3f39b2238
#   @body=nil,
#   @fields=
#    [#<MovableTypeFormat::Field:0x007fc3f39b1f18
#      @key="TITLE",
#      @value="A dummy title">,
# ...

MovableTypeFormat::Section::Base has name, fields, and body. Field has key and value.

comment = entry.sections.find{|s| == "COMMENT" } #=> "COMMENT"
# [#<MovableTypeFormat::Field:0x007fc3f39a32d8 @key="AUTHOR", @value="Foo">,
#   #<MovableTypeFormat::Field:0x007fc3f39a3120
#    @key="DATE",
#    @value="01/31/2002 15:47:06">]
comment.body #=> "This is\nthe body of this comment."

Usable accessors

MovableTypeFormat::Entry has usable accessors of sections. (Some accessors access metadata section.)

# Available accessors:
#   allow_comments, allow_pings, author, basename, body,
#   category, convert_breaks, date, excerpt, extended_body,
#   keywords, no_entry, primary_category, status, tags, title
p entry.title #=> "A dummy title"
entry.title = "Updated title"

# comments, pings are collections of sections.
p entry.comments[0].title #=> "Comment title"
entry.comments = entry.comments.reject{|c| c.title["SPAM"] }

MovableTypeFormat::Section::Comment has usable accessors of fields.

# Available accessors:
#   author, date, email, url
comment = = "labocho"
comment.body = "Comment body"

MovableTypeFormat::Section::Metadata has usable accessors of fields.

# Available accessors:
#   author, title, basename, status, allow_comments, allow_pings,
#   convert_breaks, primary_category, category, date, tags, no_entry
metadata =
metadata.title = "Title"

MovableTypeFormat::Section::Ping has usable accessors of fields.

# Available accessors:
#   title, url, ip, blog_name, date
ping =
ping.title = "New ping"


MovableTypeFormat::Entry#to_mt returns MovableType export format string.

# TITLE: Updated title
# AUTHOR: Foo Bar
# ...


After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to


Bug reports and pull requests are welcome on GitHub at[USERNAME]/movable_type_format.


The gem is available as open source under the terms of the MIT License.