現在,許多人都熟悉我的和公司或業界主辦的博客。後者明顯成爲了傳統公司和行業網站的下一代新興產物。博客的內容涉及從簡潔的特製產品公告和公共關係到實用且深入的主題探索,這些主題可能對公司的產品或行業的將來方向相關。php
隨着實際提供更新和有用信息的企業和行業博客的成功推出,人們愈來愈注重將博客做爲企業內部的通訊和討論機制。採用博客的組織應該將博客相關任務部署在企業 IT 基礎設施附近,就像任何其餘加強同樣。企業內部博客一般包含與業務相關的討論和信息,必須由組織的 IT 人員管理。選者正確的博客平臺是關鍵的第一步。html
選擇支持開放博客 API 的開放平臺可以爲用戶和管理員帶來顯著的優點。對於用戶,這意味着他們可使用普遍的流行應用程序(從瀏覽器插件到特定於平臺的客戶端應用程序)添加博客文章。對於管理員,支持公共 API 能夠支持使用或開發管理性應用程序。java
有許多標準博客 API 可供使用。在編寫本文時,使用最普遍且支持最普遍的 API 包括:web
<item>
標籤)、以結構化數據(而不是 Blogger API 支持的簡單字符串)形式查看博客文章等概念。這種集成使開發人員可以使用熟悉的模型建立、提交、管理和查詢結構化博客文章。<link>
標籤來發現 API。參見 參考資料 瞭解關於此協議的更多信息。本文主要介紹 MetaWeblog。數據庫
支持 MetaWeblog API 的最流行的博客軟件包都是開源的,所以能夠在面向內部的企業基礎設施中安裝和使用。流行的選擇包括:apache
決定最初使用哪一個包取決於您的 Web 基礎設施針對的是 Web 服務器仍是應用服務器。WordPress 和 Movable Type 可以迅速識別經驗豐富的博客做者,BLOG:CMS 和 Drupal 僅須要一個 Web 服務器。Blojsom、Pebble 和 Roller 都是流行的博客包,它們都須要一個應用服務器,但它們的關係數據庫需求各不相同(Pebble 不須要關係數據庫!)。編程
回頁首api
MetaWeblog API 支持使用任何支持它的軟件包發佈、檢索和編輯博客文章。許多人只是經過博客提供的編輯器在線建立博客文章,而 MetaWeblog API 支持使用更加豐富的編輯軟件,從桌面包到基於瀏覽器的包,好比 ScribeFire(將在 本文後面的內容中 討論)。MetaWeblog API 還簡化了系統管理對博客文章的備份和歸檔,簡化了在必要時遷移到其餘博客包的過程。數組
該 API 包含比較少的方法。這些方法簡化了對該 API 的掌握,它們包括:瀏覽器
boolean metaWeblog.editPost(string postid, string username, string password, struct content, boolean publish)
struct metaWeblog.getCategories(string blogid, string username, string password)
struct metaWeblog.getPost(string postid, string username, string password)
struct metaWeblog.getRecentPosts(string postid, string username, string password, integer numberOfPosts)
struct metaWeblog.newMediaObject(string blogid, string username, string password, struct content)
string Post metaWeblog.newPost(string blogid, string username, string password, struct content, boolean publish)
這些方法的參數包括:
blogid
。標識您想要鏈接到的博客。content
。一種包含博客文章數據的結構。 已爲此結構定義的成員包括 RSS 2.0 中 <item>
類型的可能值:author
、category
、comments
、description
、enclosure
、guid
、link
、pubDate
、source
和title
。這些標準值造成一個普遍流行的博客內容和元數據字典。enclosure
等具備強制屬性的 RSS 項經過一種結構來傳輸,這種結構的成員提供了這些值。對於博客文章,這種結構的 3 個主要成員包括 title
、link
和 description
。
newMediaObject
方法支持將一個文件(一般是音頻或視頻文件)傳輸到博客服務器。此方法要求您提供的結構包含成員 bits(文件的實際內容,採用 base64 編碼格式)、name(在博客服務器上使用的文件名)和 type(文件的 MIME 類型)。
numberOfPosts
。指定要檢索的最大博客數量。password
。指定想要用於驗證博客的密碼。postid
。標識想要編輯或檢索的特定博客文章。publish
。指定您但願發佈博客文章 (True) 仍是將新的/更新的博客文章存儲爲草稿 (False)。username
。指定想要用於驗證博客的用戶名。metaWeblog
方法返回如下參數:
editPost
。始終返回 True。getCategories
。返回一個機構體,它標識了每一個可用的類別,具備 3 個字符串成員:description
、htmlUrl
和 rssUrl
。getPost
。返回具備成員的結構體,這些成員也可在以參數形式提供給 newPost
和 editPost
方法的結構體中使用。getRecentPosts
。返回一個與最近的博客文章對應的結構體數組。數組中的每一個結構體包含的成員與調用 getPost
返回的成員相同。newMediaObject
。返回一個結構體,其中包含一個名爲 url
的成員,該成員使用 HTTP 或 FTP 格式提供文件的 URL。newPost
。返回一個字符串,該字符串可用做對 editPost
或 getPost
的調用中的 blogid
。API 的描述很是有趣,但並不涉及到實際實例,這在一些情形中帶來了不便,尤爲是在該 API 的使用須要使用另外一個可能不熟悉的 API 時,好比本例中的 XML-RPC API。後面兩節主要介紹如何使用最流行的 MetaWeblog 方法 newPost
,以各類方式建立新博客文章。
清單 1 中的示例給出了一個很是簡單的 metaWeblog.newPost
方法調用。
import java.util.*; import java.io.*; import java.net.URL; import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; public class DemoPost { public static void main(String[] args) throws Exception { // Set up XML-RPC connection to server XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php")); XmlRpcClient client = new XmlRpcClient(); client.setConfig(config); // Set up parameters required by newPost method Map<String, String> post = new HashMap<String, String>(); post.put("title", "Hello, Blog!"); post.put("link", "http://www.vonhagen.org/"); post.put("description", "This is the content of a trivial post."); Object[] params = new Object[]{"1", "admin", "password", post, Boolean.TRUE}; // Call newPost String result = (String) client.execute("metaWeblog.newPost", params); System.out.println(" Created with blogid " + result); } }
主方法中的第一段代碼配置 MetaWeblog 使用的 XML-RPC 基礎設施,創建到 URL http://wordpress-host/wordpress/xmlrpc.php 的客戶端鏈接,該 URL 是個人示例 WordPress 博客服務器的 XML-RPC URL。不一樣的博客服務器會使用不一樣的 XML-RPC URL。能夠經過查看您選擇的博客服務器的文檔,獲取您須要的特定 URL。
第二段代碼建立一個 hash 映射並使用名稱-值對填充它,這些名稱-值對提供了創做博客文章所需的信息。設置了 title
、link
和 description
設置的值以後,hash 映射就會與 metaWeblog.newPost
方法須要的其餘參數一塊兒打包到一個數組中。
第三段代碼使用在第一段代碼中建立的 XML-RPC 客戶端鏈接實際調用 metaWeblog.newPost
方法。而後,此代碼打印該方法返回的字符串,也就是建立的遠程博客文章的 blogid
。
上一個示例頗有趣,但經過發佈單1、簡短的字符串來以博客格式從新實現 Twitter 可能很是慢。您可能更但願使用您熟悉的文本編輯器建立文件,而後使用自定義標題將該文件發佈到博客上。
清單 2 中的示例以 前一個示例 爲基礎,展現了在 metaWeblog.newPost
方法上的創新,支持您發佈文件的內容,並且能夠指定文章標題。在執行應用程序時,在命令行上指定這些項。
import java.util.*; import java.io.*; import java.net.URL; import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.client.XmlRpcClient; import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; public class DemoPostFile { private static byte[] readFromFile(String src) throws Exception { byte data[]; File file = new File(src); InputStream in = new FileInputStream(src); data = new byte[(int)file.length()]; in.read(data); in.close(); return data; } public static void main(String[] args) throws Exception { String filename = null; String title = "Sample Post From a File"; // Parse and apply command-line args if (args.length > 1) { filename = args[0]; title = args[1]; } else if (args.length == 1) { filename = args[0]; title = "Posted From File: " + filename; } else { System.out.println("Usage: DemoPostFile filename [title] "); return; } // Set up XML-RPC connection to server XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl(); config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php")); XmlRpcClient client = new XmlRpcClient(); client.setConfig(config); // Read post from file and set up parameters required // by newPost method String bits = new String(readFromFile(filename)); System.out.println(bits); Map<String, String> post = new HashMap<String, String>(); post.put("title", title); post.put("description", bits); Object[] params = new Object[]{"1", "admin", "password", post, true}; // Call newPost String result = (String) client.execute("metaWeblog.newPost", params); System.out.println(" Created with blogid " + result); } }
此應用程序中的第一個方法是一個 readFromFile
應用程序,它在這裏被聲明爲靜態的,以將其與靜態主方法的命令行參數解析輕鬆集成在一塊兒。
此應用程序的主方法中的第一段代碼初始化兩個變量,這兩個變量用於包含博客文章的文件名稱,應用程序將這兩個變量與文章標題一塊兒發佈。它而後解析應用程序用於執行調用的參數,肯定是否存在文件名和/或標題,並相應作出反應。
接下來的代碼初始化到博客服務器的 XML-RPC 客戶端鏈接。後面的代碼將在命令行上指定的文章內容讀取到一個變量中,並設置使用 metaWeblog.newPost
方法所需的其餘變量。最後一段代碼調用此方法並打印結果代碼,也就是博客服務器上的文章的 blogid
。
上一節 中提供的這種簡單實用工具並不適用於全部人:不是全部人都但願構建本身的工具,更不用說從傳統命令行執行程序了。運行使用標準 API(好比 MetaWeblog)的博客程序的主要緣由包括,可使用各類不一樣的應用程序,以不一樣語言編寫,以及在不一樣的操做系統和環境中執行。許多博客客戶端都具備本身的功能和追隨者,可使用它們簡化博客文章的建立和發佈。
一個最實用的 MetaWeblog 客戶端就是 ScribeFire(參見 參考資料),它是一個 Mozilla Firefox 插件,在 Firefox 中提供了功能全面的博客編輯器,簡化了博客的發佈,甚至支持從其餘網頁或文檔拖放帶格式的文本,上傳圖像等功能。圖 1 展現瞭如何使用 ScribeFire(位於 Firefox 窗口的底部)來將文章發佈到 WordPress 博客(位於 Firefox 窗口的頂部)。
MetaWeblog 客戶端一般也支持您配置到多個博客的鏈接,在不一樣的博客中發佈相同的內容。這項功能極大地簡化了將博客從內部企業博客傳輸到外部企業博客的過程。圖 2 展現瞭如何使用 ScribeFire(位於 Firefox 窗口的底部)將 圖 1 中顯示的相同內容發佈到 Pebble 博客(位於 Firefox 窗口的頂部)。
本文中提供和討論的示例實用工具只是強大的 MetaWeblog 的冰山一角。您可使用支持 MetaWeblog API 的任何實用工具來與支持該 API 的任何博客服務器通訊。您也能夠以 MetaWeblog API 爲核心來實現博客服務器,Pebble 博客服務器就是這麼作的(參見 參考資料)。
Pebble 博客服務器是一個 BSD (Berkeley Software Distribution) 許可的包,基於 MetaWeblog 編寫。由於 Pebble 是開源的,因此它的代碼能夠免費下載,能夠提供許多使用各類 MetaWeblog 調用的有用示例。圖 3 給出了標準的 Pebble 界面。
Pebble 的一個有趣方面在於,Pebble 服務器上的博客內容存儲爲 XML 文件,而不是像大部分其餘博客服務器那樣存儲在數據庫中。不須要數據庫服務器使 Pebble 在系統資源需求方面比其餘博客服務器更加輕量,它也簡化了備份等任務。博客文章被備份爲標準文件系統的一部分,而不須要數據庫轉儲或檢查點。
企業博客並非適用於全部企業信息類型的完美交付機制,但它們奠基了現代企業通訊和討論的基礎。在選擇企業博客服務器時,傳統的考慮因素包括成本、可維護性和實用性。從本文能夠看到,您的博客服務器支持的 API 與決策考慮因素同等重要。選擇支持 MetaWeblog 等標準 API 的博客服務器能夠在博客實用性方面提供顯著的長期優點,由於它令人們可以使用許多不一樣的客戶端來向這類中央資源創做和編輯博客文章。這種靈活性經常會決定人們是否使用博客。
描述 | 名字 | 大小 |
---|---|---|
簡單 MetaWeblog 發佈應用程序 | DemoPost.java.zip | 2KB |
發佈文件內容的 MetaWeblog 應用程序 | DemoPostFile.java.zip | 2KB |