RunSir'Blog--For Technology

人生没有彩排,更不会有重播,每秒都在直播中渡过;放弃等于失去一切,坚持将至少保持获得一切的一丝希望。
随笔 - 32, 文章 - 4, 评论 - 31
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

MetaWeblogAPI C# Code Sample

Posted on 2007-05-31 09:16  RunSir.cn  阅读(356)  评论(0编辑  收藏
This C# code example demonstrates how to use all of the methods supported by the MetaWeblog API. The example enables external programs to get and set the text and attributes of Weblog posts. The example uses the XML-RPC protocol for communication between client applications and the Weblog server
using System; 
using CookComputing.XmlRpc; 
using System.Net; 
  
namespace MetaWeblogApi 

  
  
/// <summary> 
/// This struct represents information about a user's blog. 
/// </summary> 

[XmlRpcMissingMapping(MappingAction.Ignore)] 
struct UserBlog
public string url; 
public string blogid; 
public string blogName; 
}
 
  

/// <summary> 
/// This struct represents information about a user. 
/// </summary> 

[XmlRpcMissingMapping(MappingAction.Ignore)] 
struct UserInfo
public string url; 
public string blogid; 
public string blogName; 
public string firstname; 
public string lastname; 
public string email; 
public string nickname; 
}
 
  
  
/// <summary> 
/// This struct represents the information about a category that could be returned by the 
/// getCategories() method. 
/// </summary> 

[XmlRpcMissingMapping(MappingAction.Ignore)] 
struct Category
public string description;
public string title; 
}
 
  
/// <summary> 
/// This struct represents the information about a post that could be returned by the 
/// editPost(), getRecentPosts() and getPost() methods. 
/// </summary> 

[XmlRpcMissingMapping(MappingAction.Ignore)] 
struct Post {
public DateTime dateCreated;
public string description;
public string title; 
public string postid;   
public string[] categories;
}
 
  
/// <summary> 
/// This class can be used to programmatically interact with a Weblog on 
/// MSN Spaces using the MetaWeblog API. 
/// </summary> 

[XmlRpcUrl("https://storage.msn.com/storageservice/MetaWeblog.rpc")] 
class MsnSpacesMetaWeblog : XmlRpcClientProtocol 
  
  
/// <summary> 
/// Returns the most recent draft and non-draft blog posts sorted in descending order by publish date. 
/// </summary> 
/// <param name="blogid"> This should be the string MyBlog, which indicates that the post is being created in the user’s blog. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <param name="password"> The user’s secret word. </param> 
/// <param name="numberOfPosts"> The number of posts to return. The maximum value is 20. </param> 
/// <returns></returns> 

[XmlRpcMethod("metaWeblog.getRecentPosts")] 
public Post[] getRecentPosts( 
string blogid, 
string username, 
string password, 
int numberOfPosts)

return (Post[]) this.Invoke("getRecentPosts"new object[]{ blogid, username, password, numberOfPosts});  
}
 
  

        
/// <summary> 
        
/// Posts a new entry to a blog. 
        
/// </summary> 
/// <param name="blogid"> This should be the string MyBlog, which indicates that the post is being created in the user’s blog. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <param name="password"> The user’s secret word. </param> 
/// <param name="post"> A struct representing the content to update. </param> 
        
/// <param name="publish"> If false, this is a draft post. </param> 
        
/// <returns> The postid of the newly-created post. </returns> 

        [XmlRpcMethod("metaWeblog.newPost")] 
public string newPost( 
string blogid, 
string username, 
string password, 
Post content, 
bool publish)

return (stringthis.Invoke("newPost"new object[]{ blogid, username, password, content, publish});  
}
 
  
/// <summary> 
/// Edits an existing entry on a blog. 
/// </summary> 
/// <param name="postid"> The ID of the post to update. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <param name="password"> The user’s secret word. </param> 
/// <param name="post"> A struct representing the content to update. </param> 
/// <param name="publish"> If false, this is a draft post. </param> 
/// <returns> Always returns true. </returns> 

[XmlRpcMethod("metaWeblog.editPost")] 
public bool editPost( 
string postid, 
string username, 
string password, 
Post content, 
bool publish)

return (boolthis.Invoke("editPost"new object[]{ postid, username, password, content, publish});  
}
 
  
/// <summary> 
/// Deletes a post from the blog. 
/// </summary> 
/// <param name="appKey"> This value is ignored. </param> 
/// <param name="postid"> The ID of the post to update. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <param name="password"> The user’s secret word. </param> 
/// <param name="post"> A struct representing the content to update. </param> 
/// <param name="publish"> This value is ignored. </param> 
/// <returns> Always returns true. </returns> 

[XmlRpcMethod("blogger.deletePost")] 
public bool deletePost( 
string appKey, 
string postid, 
string username, 
string password,
bool publish)

return (boolthis.Invoke("deletePost"new object[]{ appKey, postid, username, password,  publish});  
}
 
  

/// <summary> 
/// Returns information about the user’s space. An empty array is returned if the user does not have a space. 
/// </summary> 
/// <param name="appKey"> This value is ignored. </param> 
/// <param name="postid"> The ID of the post to update. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <returns> An array of structs that represents each of the user’s blogs. The array will contain a maximum of one struct, since a user can only have a single space with a single blog. </returns> 

[XmlRpcMethod("blogger.getUsersBlogs")] 
public UserBlog[] getUsersBlogs( 
string appKey, 
string username, 
string password)
  
return (UserBlog[]) this.Invoke("getUsersBlogs"new object[]{ appKey,  username, password});  
}
 
  
/// <summary> 
/// Returns basic user info (name, e-mail, userid, and so on). 
/// </summary> 
/// <param name="appKey"> This value is ignored. </param> 
/// <param name="postid"> The ID of the post to update. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <returns> A struct containing profile information about the user. 
/// Each struct will contain the following fields: nickname, userid, url, e-mail, 
/// lastname, and firstname. </returns> 

[XmlRpcMethod("blogger.getUserInfo")] 
public UserInfo getUserInfo( 
string appKey, 
string username, 
string password)
  
return (UserInfo) this.Invoke("getUserInfo"new object[]{ appKey,  username, password});  
}
 
  
  
/// <summary> 
/// Returns a specific entry from a blog. 
/// </summary> 
/// <param name="postid"> The ID of the post to update. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <param name="password"> The user’s secret word. </param> 
    
/// <returns> Always returns true. </returns> 

[XmlRpcMethod("metaWeblog.getPost")] 
public Post getPost( 
string postid, 
string username, 
string password)

return (Post) this.Invoke("getPost"new object[]{ postid, username, password});  
}
 
  
/// <summary> 
/// Returns the list of categories that have been used in the blog. 
/// </summary> 
/// <param name="blogid"> This should be the string MyBlog, which indicates that the post is being created in the user’s blog. </param> 
/// <param name="username"> The name of the user’s space. </param> 
/// <param name="password"> The user’s secret word. </param> 
/// <returns> An array of structs that contains one struct for each category. Each category struct will contain a description field that contains the name of the category. </returns> 

[XmlRpcMethod("metaWeblog.getCategories")] 
public Category[] getCategories( 
string blogid, 
string username, 
string password)
  
return (Category[]) this.Invoke("getCategories"new object[]{ blogid, username, password});  
}
 
  
/// <summary> 
/// The main entry point for the application. 
/// </summary> 

[STAThread] 
static void Main(string[] args) {
  
MsnSpacesMetaWeblog mw 
= new MsnSpacesMetaWeblog(); 
string username = "!Space3*Pqc3*yUo00Y0!"
string password = "mYsEcReTwOrD"
mw.Credentials 
= new NetworkCredential(username, password); 
  
try
  
  
// Space3Pqc3yUo00Y0 
Post post = new Post(); 
post.categories 
= new string[]{"Test Posts"}
post.title 
= "Tets 3"
post.description 
= "This is my 3rd test post"
post.dateCreated 
= DateTime.Now; 
  
string id = mw.newPost("MyBlog", username, password, post, true); 
  
post.title 
= "Test 3 (typo fixed)";
  
mw.editPost(id, username, password, post, 
true); 

post 
= mw.getPost(id, username, password); 
Console.WriteLine(
"Just edited the post with the title '{0}' at '{1}'", post.title, post.dateCreated); 
  
/* display list of categories used on the blog */ 
Category[] categories 
= mw.getCategories("MyBlog", username, password); 

foreach(Category c in categories)
Console.WriteLine(
"Category: {0}", c.description); 
}
 
  
/* display title of the ten most recent posts */ 
Post[] posts 
= mw.getRecentPosts("MyBlog", username, password, 10); 
  
foreach(Post p in posts)
Console.WriteLine(
"Post Title: {0}", p.title); 
}
 
  
mw.deletePost(String.Empty, id, username, password, 
true); 
Console.WriteLine(
"The post entitled '{0}' has been deleted", post.title); 
  
/* get info on user's blogs */ 
UserBlog[] blogs 
= mw.getUsersBlogs(String.Empty, username, password); 

foreach(UserBlog b in blogs)
Console.WriteLine(
"The URL of '{0}' is {1}", b.blogName, b.url); 
}
 
  
/* get info on the user */ 
UserInfo user 
= mw.getUserInfo(String.Empty, username, password); 
Console.WriteLine(
"{0} {1} ({2}) is the owner of the space whose URL is {3}", user.firstname, user.lastname, user.email, user.url); 

  
}
catch(XmlRpcFaultException xrfe)
Console.WriteLine(
"ERROR: {0}", xrfe.FaultString); 
}
 
  
Console.ReadLine(); 
}
 

}


}
更多技术参考文章:
  http://www.xml-rpc.net/  
  http://www.cookcomputing.com/blog/index.html  
  http://lichdr.cnblogs.com/archive/2006/01/17/319040.html  
  http://www.bo-blog.com/p/mwa.php  
  http://dudu.cnblogs.com/archive/2006/02/15/331414.html  
  http://  http://www.xml-rpc.net/  
  http://www.cookcomputing.com/blog/index.html  
  http://lichdr.cnblogs.com/archive/2006/01/17/319040.html  
  http://www.bo-blog.com/p/mwa.php  
  http://dudu.cnblogs.com/archive/2006/02/15/331414.html  
  http://www.zoundry.com/download.html.zoundry.com/download.html
Code from http://msdn2.microsoft.com/en-us/library/aa905670.aspx