Windows Live Plugins —— BatchPoster (发布到多个Blog)

CSDN和CnBlogs都不错,两个都想用着,所以就写了这么一个插件。用途嘛,当然就是把文章发布到多个博客上。

经常换Blog的或还没决定用哪一个的朋友也可以用这个,免得迁来迁去~

特  性:在任意一个帐号编辑完文章,点击“发送”后,将启动插件,提示用户选择帐号与目录,然后将文章发布到指定的各个帐号。

下载地址:https://sourceforge.net/projects/livewriterpost/

总  结:

1、几个比较常用的命名空间:

WindowsLive.Writer.Api;
WindowsLive.Writer.Passport;
WindowsLive.Writer.BlogClient;
WindowsLive.Writer.BlogClient.Clients;
WindowsLive.Writer.Extensibility.BlogClient;

2、使用WindowsLive.Writer.BlogClient.BlogSettings.GetBlogs函数获取帐户的列表,该函数返回一个BlogDescriptor数组。

3、WindowsLive.Writer.BlogClient.Blog对象包含一个帐户的较完整信息(包括目录),使用构造函数创建对象即可。

4、使用BlogSettings.ForBlogId函数获取指定帐户的设置信息。该函数返回一个BlogSettings对象。

5、WindowsLive.Writer.Api.PublishNotificationHook是“发布”操作的接口。

主要代码:

public override bool OnPrePublish(System.Windows.Forms.IWin32Window dialogOwner, IProperties properties, IPublishingContext publishingContext, bool publish)
        {
            bool Result = false;
            if (Posting) return true;

            //选择帐户
            if (DialogBlogSelect.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                Posting = false;
                return false;
            }

            //排除当前帐户
            for (int i = 0; i < DialogBlogSelect.SelectedBlogs.Count; i++)
            {
                if (DialogBlogSelect.SelectedBlogs[i].ID.ToString() == publishingContext.AccountId)
                {
                    DialogBlogSelect.SelectedBlogs.RemoveAt(i);
                    Result = true;
                    break;
                }
            }

            //发送到所选择的帐户
            foreach (AccountItem blog in DialogBlogSelect.SelectedBlogs)
            {
                string str;
                XmlDocument document;
                BlogSettings settings = BlogSettings.ForBlogId(blog.ID.ToString());
                IBlogClient client = BlogClientManager.CreateClient(settings);
                string postId = client.NewPost(settings.HostBlogId, publishingContext.PostInfo as BlogPost, NullNewCategoryContext.Instance, true, out str, out document);
                BlogPost post = client.GetPost(settings.HostBlogId, postId);
                string permalink = post.Permalink;
                if (!Uri.IsWellFormedUriString(permalink, UriKind.Absolute))
                {
                    permalink = new Uri(new Uri(settings.HomepageUrl), new Uri(post.Permalink, UriKind.Relative)).ToString();
                }
                ProcessStartInfo startInfo = new ProcessStartInfo(permalink);
                startInfo.UseShellExecute = true;
                Process.Start(startInfo);

            }

            Posting = false;
            return Result;
        }
其中有关发布的代码参考了网上某位同学发布的一个插件,是从其dll中Reflector出来的。不过我忘了出处了,Sorry!
赶工赶出来的,想完善的随便改去好了。
本文即通过此插件发布。
 
posted @ 2010-03-17 00:01  泉子  阅读(432)  评论(1编辑  收藏  举报