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!
赶工赶出来的,想完善的随便改去好了。
本文即通过此插件发布。
浙公网安备 33010602011771号