微軟啟用了新的live域名,有許多人將hotmail之類的帳號轉到新的域名,這就出現了如何將原帳號下的個人信息轉移到新帳號的問題。對于live messager的聯系人列表可采用其聯系人選項中的導入導出功能,而最麻煩當屬將live spaces的空間博客轉移到新的帳號名下。最直接方法就是聯系微軟管理員,將你舊帳號下的空間所有權轉移到新帳號名下,但是業務上是否可行不得而知。因此轉而另一方法,開新的空間,將舊空間的博客轉移到新空間來,本文就是采用這種思路,順帶提及下live api的簡單使用。
Windows Live Spaces MetaWeblog API提供了給外部程序進行文章內容設置和讀取的功能。API使用了XML—RPC協議來在客戶端應用程序與Weblog服務器端進行通訊。
為了使用MetaWeblog API編輯空間中的博文內容,首先需要在空間啟用E-mail發布功能,并設置密碼字。
- 到你的空間中的Options->E-mail Publishing選項進行配置
- 打開E-mail發布功能,并選擇 secred word的密碼字。
在程序中會用到用戶名和密碼,如果你的空間地址為: oldname.spaces.live.com,則用戶名就是oldname,而不是你的live id,密碼則是上面設置的secred word,而不是live id的密碼。
現在的MetaWeblogApi能進行發布新博文,編輯現有的博文,獲取指定博文,獲取類別列表,獲取最近發布的博文,刪除博文,獲取用戶博客信息,獲取用戶信息等功能。由這些功能,想遷移博客內容,首先需要獲取到舊空間里的博文。我們自然想到用MetaWeblogAPI metaWeblog.getRecentPosts Method函數,指定一個較大的值,然后獲取全部的博文。很可惜,對于live spaces值只能取20,也就是說只能獲取最近20篇博文。順便提下,這里的20篇包括你己發布的,和存在空間里的草稿,這些草稿有時候并不會在空間里顯示出來,但是操作時會有表示。如果用MetaWeblogAPI metaWeblog.getPost Method,需要知道指定博文的id號,沒有獲取到全部博文id的方法作輔助,這又是一個因難。
最后我采用了將metaWeblog.getRecentPosts方法的獲取值設為1,每次取最近的一篇博文,然后記錄id號,將這博文用MetaWeblogAPI metaWeblog.newPost Method發表到新空間,然后用MetaWeblogAPI blogger.deletePost Method將這id號的博文從舊空間中刪去,重復進行,直到無法從舊空間里獲取到博文。在程序實現借用了MSDN中的示例,為了防止網絡故障之類以及做了備份,先是將獲取博文內容寫到本地文件,再進行刪除。
程序中還要說明的是,由于live spaces服務器使用非標準的時間格式,造成用DateTime.Now和獲取到的博文的dateCreated都是"1/1/0001 12:00:00 AM"的格式,這需要在Invoke方法調用前加上this.NonStandard = XmlRpcNonStandard.AllowNonStandardDateTime語句。還有需要用到CookComputing.XmlRpcV2.dll,它實現了.net 2.0版本的XML-RPC協議,己包含在文末的源碼中。如果是.net 1.1,需要其他相應的文件,可具體參見http://www.xmlrpc.com/metaWeblogApi。
最后要提下的是,程序只用于我自己的空間遷移,再加上不懂C#,用戶名和密碼之類都硬編碼了,MetaWeblog之類的方法也應能用于像cppblog之類用wordpress的博客空間。這些部分加之完善,應能做個博客搬家工具的。
參考:
文中的遷移工具源碼下載
MDSN Windows Live Spaces SDKs
posted on 2008-09-24 21:50
len 閱讀(2135)
評論(2) 編輯 收藏 引用 所屬分類:
IT技術