On Windows, the best choice for a blogging tool is Windows Live Writer. On the Mac, MarsEdit and Ecto are fairly popular. Also of note is ScribeFire, which is a FireFox extension that provides blog writing features right from the browser.
All of these tools support the MetaWeblog API (see below), so supporting MetaWeblog would give us instant support from all those tools.
There are many blogging APIs, but the most important are:
The MetaWeblog API is by far the most common API to get implemented by blogs and publishing software. Supporting it pretty much gives instant and universal support. It is a superset of the Blogger API.
The WordPress API is an extended version of the Movable Type API. The WordPress API is interesting in that it also exposes the concept of page in addition to blog posts.
The Movable Type is a fairly minimal and limited API. WordPress uses an extended version of that API.
The Blogger API is Google's blogging API. MetaWeblog is a superset of the Blogger API.
Atom Publishing Protocol
The Atom Publishing Protocol is what comes closest to an "official" standard. It does go well beyond simply blogging and is closer to the needs of a general purpose protocol to publish contents.
If we had to support only one format, MetaWeblog looks like the most universally supported one. On the other hand, it is rather poor in terms of features when compared with the WordPress API. For example, it doesn't have page support and is quite specialized to handle blog posts, which means that in order to use it as a more general publishing protocol, we might need to use some custom meta-data. The WordPress API might be a better choice because of the larger scope of the application. In addition to WordPress or MetaWeblog, Atom seems like a good investment for the future, and it does offer more CMS-friendly features than the others but client tool support is lacking. It might be a way in the future to achieve the universality that MetaWeblog or WordPress will make more difficult.
Supported API capability
The Live Writer manifest enables a very granular implementation of the various APIs. The following table shows what set of APIs Orchard would support at first.
Those capabilities are being provided by modules (blog, pages, tags), not by the core application. For that reason, we will eventually enable modules to participate in the creation of the manifest. As a first step though, we will implement the manifest as a static list of capabilities (see the LiveWriter Manifest documentation).
|API Capability||Orchard support||Expected behavior|
|supportsPostAsDraft||?||Respects the publish flag on metaWeblog.newPost and metaWeblog.editPost calls|
|supportsExtendedEntries||-||Supports mttextmore field of post struct|
|supportsCustomDate||?||Supports explicit specification of dateCreated field of post struct|
|supportsCategories||?||Supports categorization of posts using either a category array within the post struct or mt.setPostCategories|
|supportsCategoriesInline||?||Supports categories field of post struct|
|supportsMultipleCategories||?||Allows specification of more than one category per post|
|supportsHierarchicalCategories||-||Supports wp.getCategories and wp.addCategory|
|supportsNewCategories||-||Supports the addition of new categories from the client via either inline specification (see below) or via the wp.addCategory method|
|supportsNewCategoriesInline||?||Previously unused categories included within the categories field are automatically added|
|supportsKeywords||-||Supports mtkeywords field of post struct|
|supportsCommentPolicy||?||Supports mtallowcomments field of post struct|
|supportsPingPolicy||-||Supports mtallowpings field of post struct|
|supportsAuthor||?||Supports wpauthor field of post struct|
|supportsSlug||?||Supports either wpslug or mtbasname field of post struct|
|supportsPassword||-||Supports wppassword field of post struct|
|supportsExcerpt||?||Supports mtexcerpt field of post struct|
|supportsTrackbacks||-||Supports mttbpingurls field of post struct|
|supportsPages||?||Supports WordPress page editing API: wp.newPage, wp.editPage, wp.getPage, wp.getPages, wp.getPageList, andwp.deletePage|
|supportsPageParent||-||Supports wppageparentid field of page struct|
|supportsPageOrder||-||Supports wppageorder field of page struct|
|supportsEmptyTitles||-||Allows empty string as a valid value for the title field of the post struct|
|requiresHtmlTitles||-||Title field is interpreted as HTML content rather than plain text|
|requiresXHTML||-||Generate XHTML style markup by default|
|supportsScripts||?||Allows embedded script within post content|
|supportsEmbeds||?||Allows object embeds within post content|
Supporting custom date will mean for Orchard that that date gets translated into scheduled publication if the date is in the future, and to modifying the publication date on the post or page otherwise.
|Create and manage contents through XML-RPC APIs||No||No||Yes||Yes||Yes||Yes|
Note: the specific rights for each content type and operation are also checked in addition to this right. If this right is not granted, none of the operations work