企业博客、MetaWeblog 和 XML-RPC 2014/07/12

如今,许多人都熟悉个人和公司或业界主办的博客。后者明显成为了传统公司和行业网站的下一代新兴产物。博客的内容涉及从简洁的特制产品公告和公共关系到实用且深刻的主题探索,这些主题可能对公司的产品或行业的未来方向相关。

常用缩写词

  • API:应用程序编程接口
  • FTP:文件传输协议
  • HTTP:超文本传输协议
  • IT:信息技术
  • MIME:多媒体 Internet 邮件扩展(Multimedia Internet Mail Extensions)
  • RFC:请求注解(Request for comments)
  • RPC:远程过程调用
  • RSS:真正简单的联合(Really Simple Syndication)
  • SQL:结构化查询语言
  • URL:统一资源定位符
  • XML:可扩展标记语言

随着实际提供更新和有用信息的企业和行业博客的成功推出,人们越来越注重将博客作为企业内部的通信和讨论机制。采用博客的组织应该将博客相关任务部署在企业 IT 基础设施附近,就像任何其他增强一样。企业内部博客通常包含与业务相关的讨论和信息,必须由组织的 IT 人员管理。选者正确的博客平台是关键的第一步。

选择支持开放博客 API 的开放平台能够为用户和管理员带来显著的优势。对于用户,这意味着他们可以使用广泛的流行应用程序(从浏览器插件到特定于平台的客户端应用程序)添加博客文章。对于管理员,支持公共 API 可以支持使用或开发管理性应用程序。

有许多标准博客 API 可供使用。在编写本文时,使用最广泛且支持最广泛的 API 包括:

  • Blogger。历史最悠久的博客 API。Blogger 是一个基于 XML-RPC 的接口,最初由 Pyra Labs 为他们的 Blogger 软件创建。第一个版本很快得到了许多其他博客平台的采用,因为它使用 XML 作为数据提交和交换的标准机制,还因为它使用 XML-RPC 标准来支持可以使用 XML-RPC 的任何编程语言的实现。Google 于 2003 年购买了 Blogger,不久之后 Blogger 2.0 API 就出现了 — 它现在成为了一个 Google Data API
  • MetaWeblog。由软件开发人员 Dave Winer 于 2002 年创建,目的在于解决 Blogger 1.0 API 中已发现的限制。MetaWeblog API 是一个基于 XML-RPC 的 API,使用了 RSS Web feed 格式(最流行的就是 <item> 标签)、以结构化数据(而不是 Blogger API 支持的简单字符串)形式查看博客文章等概念。这种集成使开发人员能够使用熟悉的模型创建、提交、管理和查询结构化博客文章。
  • Atom。这种基于 XML 的 API 也称为 Atom 发布协议(Atom Publishing Protocol),使用 Web 服务而不是 XML-RPC 作为其线级(wire-level)协议,通过利用现有的 HTTP 认证机制实现更强的安全性,支持一些个性的特性,比如使用网页标题中合适的 <link> 标签来发现 API。参见 参考资料 了解关于此协议的更多信息。

本文主要介绍 MetaWeblog。

选择博客平台

支持 MetaWeblog API 的最流行的博客软件包都是开源的,因此可以在面向内部的企业基础设施中安装和使用。流行的选择包括:

  • BLOG:CMS这个 GNU General Public License (GPL) 包需要 Apache Web Server、PHP 和一个 SQL 数据库,比如 MySQL 或 SQLite。
  • Blojsom这个 Berkeley Software Distribution (BSD) 许可包需要使用 Java™ 语言,一个 JavaServer Pages (JSP) 应用服务器,比如 JBoss、Jetty 或 Apache Tomcat,以及一个 SQL 数据库。
  • Drupal尽管 Drupal 主要用作一个内容管理系统 (CMS),但该 GPL 包也支持 MetaWeblog。Drupal 需要一个 Apache 或 Microsoft® Internet Information Services (IIS) Web 服务器,PHP,以及 MySQL 或 PostgreSQL。对 Microsoft SQL Server 的支持正在开发中。
  • Movable Type这个 GPL 包需要一个 Apache 或 IIS Web 服务器、PHP 和 Perl,以及一个 SQL 数据库。Movable Type 开发社区最近创建了 OpenMelody,这个工具虽然是新兴的,但值得研究。
  • Pebble这个 BSD 许可的包是围绕 MetaWeblog 编写的,需要 Java 语言和一个 JSP 2.0/Servlet 2.4 应用服务器,比如 Tomcat。内容以 XML 格式存储在服务器上,所以不需要数据库。
  • Roller这个 Apache 许可的包来自 Apache Foundation,需要 Java 语言,一个 JSP 2.0/Servlet 2.4 应用服务器(比如 Tomcat)和一个 SQL 数据库。
  • WordPress这个 GPL 包需要 Apache Web 服务器、Perl 和 MySQL。

决定最初使用哪个包取决于您的 Web 基础设施针对的是 Web 服务器还是应用服务器。WordPress 和 Movable Type 能够迅速识别经验丰富的博客作者,BLOG:CMS 和 Drupal 仅需要一个 Web 服务器。Blojsom、Pebble 和 Roller 都是流行的博客包,它们都需要一个应用服务器,但它们的关系数据库需求各不相同(Pebble 不需要关系数据库!)。

MetaWeblog API

MetaWeblog API 支持使用任何支持它的软件包发布、检索和编辑博客文章。许多人只是通过博客提供的编辑器在线创建博客文章,而 MetaWeblog API 支持使用更加丰富的编辑软件,从桌面包到基于浏览器的包,比如 ScribeFire(将在 本文后面的内容中 讨论)。MetaWeblog API 还简化了系统管理对博客文章的备份和归档,简化了在必要时迁移到其他博客包的过程。

该 API 包含比较少的方法。这些方法简化了对该 API 的掌握,它们包括:

  • editPost
      boolean metaWeblog.editPost(string postid,
                                  string username,
                                  string password,
                                  struct content,
                                  boolean publish)
  • getCategories
      struct metaWeblog.getCategories(string blogid,
                                      string username,
                                      string password)
  • getPost
      struct metaWeblog.getPost(string postid,
                                string username,
                                string password)
  • getRecentPosts
      struct metaWeblog.getRecentPosts(string postid,
                                       string username,
                                       string password,
                                       integer numberOfPosts)
  • newMediaObject
      struct metaWeblog.newMediaObject(string blogid,
                                       string username,
                                       string password,
                                       struct content)
  • newPost
      string Post metaWeblog.newPost(string blogid,
                                     string username,
                                     string password,
                                     struct content,
                                     boolean publish)

这些方法的参数包括:

  • blogid标识您想要连接到的博客。
  • content一种包含博客文章数据的结构。

    已为此结构定义的成员包括 RSS 2.0 中 <item> 类型的可能值:authorcategorycommentsdescriptionenclosureguidlinkpubDatesourcetitle。这些标准值形成一个广泛流行的博客内容和元数据字典。enclosure 等具有强制属性的 RSS 项通过一种结构来传输,这种结构的成员提供了这些值。对于博客文章,这种结构的 3 个主要成员包括 titlelinkdescription

    newMediaObject 方法支持将一个文件(通常是音频或视频文件)传输到博客服务器。此方法要求您提供的结构包含成员 bits(文件的实际内容,采用 base64 编码格式)、name(在博客服务器上使用的文件名)和 type(文件的 MIME 类型)。

  • numberOfPosts指定要检索的最大博客数量。
  • password指定想要用于验证博客的密码。
  • postid标识想要编辑或检索的特定博客文章。
  • publish指定您希望发布博客文章 (True) 还是将新的/更新的博客文章存储为草稿 (False)。
  • username指定想要用于验证博客的用户名。

metaWeblog 方法返回以下参数:

  • editPost始终返回 True。
  • getCategories返回一个机构体,它标识了每个可用的类别,具有 3 个字符串成员:descriptionhtmlUrlrssUrl
  • getPost返回具有成员的结构体,这些成员也可在以参数形式提供给 newPosteditPost 方法的结构体中使用。
  • getRecentPosts返回一个与最近的博客文章对应的结构体数组。数组中的每个结构体包含的成员与调用 getPost 返回的成员相同。
  • newMediaObject返回一个结构体,其中包含一个名为 url 的成员,该成员使用 HTTP 或 FTP 格式提供文件的 URL。
  • newPost返回一个字符串,该字符串可用作对 editPostgetPost 的调用中的 blogid

本文来源于: http://www.ibm.com/developerworks/cn/xml/x-metablog/