zoukankan      html  css  js  c++  java
  • MetaWeblogAPI C# Code Sample

    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
  • 相关阅读:
    为什么要用webUI?
    探索WebKit内核(一)------ 菜鸟起步
    主进程退出的时候,杀死所有子进程
    那两年炼就的Android内功修养
    飞鸽---局域网聊天软件攻防战
    如何利用Fluxion诱惑目标用户获取WPA密码
    性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench
    解决maven编译错误:程序包com.sun.xml.internal.ws.spi不存在
    Apache-Flink深度解析-DataStream-Connectors之Kafka
    linux下find(文件查找)命令的用法总结
  • 原文地址:https://www.cnblogs.com/runsir/p/765898.html
Copyright © 2011-2022 走看看