【问题】
WLW在配置好之后,想要打开你的网站上面的某个帖子的话,目前只能通过两种办法:
(办法1)如果该帖子之前在你当前WLW中发布过,是可以通过 “打开最近使用过的日志”,然后找到该帖子,打开,编辑/更新,再发布的:
(办法2)如果之前该帖子不是通过你当前的WLW发布的,那么只有通过:
打开 –>选择你的网站,WLW会一次性地区检索(你所设置的)20/50/100/500/…个你的网站上面的帖子:
检索完毕后,再去找对应的帖子。期间也可以输入关键字,以筛选出对应帖子:
但是,对于我所遇到的情况是,想要更新某个帖子,此帖:
A。不是通过当前WLW发布的。
B。帖子是之前发布的 –> 即不是通过检索最近20,50,100个的就可以找到的
C。本身网站上面帖子太多,有4000+。
因此只能用上述第二种办法,但是如果要让WLW去检索500+个帖子:
A。非常耗时;
B。网络即使很好,也会出现这个错误的:
服务器响应无效
从日志服务器接收的对
metaWeblog.getRecentPosts方法的响应无效:
Invalid response document returned from XmlRpc server
之前试了过N此,从来没有一次成功的,都是出现上述错误。
所以想要获得更多的1000,3000的帖子,就更不用试了。
C。即使能检索出500+的帖子,然后也可以筛选,但由于帖子太多,也未必能很方便的找到所要的帖子。
而对于想要打开的帖子,其实登陆自己的网站,可以很方便的搜到,并且可以找到对应的固定链接(或?p=xxx样式的非固定链接)的。
此处希望可以通过给定WLW一个自己网站的固定链接,然后其可以直接打开对应的帖子,然后就可以正常的,编辑,修改,再发布最新内容了。
【解决过程】
1.网上搜了下,关于用wlw,给定帖子固定链接,打开网站上已存在的帖子,但是没有找到相关的讨论,更没有可借鉴的方法。
2. 想到了,实在不行的话,估计又是要靠自己写对应的WLW的插件了。
不过,网上先简单的看了看,根据微软的介绍:
好像,此处要实现打开某个已经存在的post,需要用
Windows Live Writer Application API
而不是之前的
Windows Live Writer Plugin API
的,因为后者只能只提供了接口,供你修改文章内容,在文章发布前后做一些事情,而无法打开文章内容。
3.后来对于上述的writer的api中,找了半天,也没有找到所需要的可以使用的api。
找到的最接近的也只是,可以调用wlw,打开open post,但是还是没有提供对应的网站的url链接,打开对应的post并编辑的功能。所以,暂时放弃此办法。
4. 因为wlw也是通过wordpress的XM-PRC协议进行获得网站上的帖子并编辑发布的,所以就去搜了关于XML-RPC方面的资料。
进过找寻,找到了一些相关的帖子:
C# XML-RPC协议实现百度和Google的Ping功能
介绍了如何在C#中利用XML-RPC。
介绍了,如何使用C#去写代码,实现调用XML-RPC来发布帖子。
其中提到的两个帖子:
都去看了,但是貌似没有找到哪里解释说,为何用metaweblog的API而不是用
http://codex.wordpress.org/XML-RPC_Support
中介绍的其他的,比如Blogger API, Movable Type API,以及WordPress API。
目前的理解是,WordPress API是针对Movable Type API的扩展。
而本身Blogger API, Movable Type API,Movable Type API三者是并列关系。
其中
http://xmlrpc.scripting.com/metaWeblogApi.html
也解释了:MetaWeblog API是Blogger API 更高一级的功能扩展。
关于C#所用到的XML-PRC,去这里下载:
http://xml-rpc.net/download.html
关于XML-PRC的参考文档:
XML RPC API详细说明文档(WordPress,CNblogs,CSDN,新浪)
5.最近的折腾,已经可以通过metaWeblog去getPost和getRecentPosts等,因此,也就可以获得帖子内容了。
其中blogId是参考:
去访问:
https://www.crifan.com/xmlrpc.php?rsd
而获得的:blogID=”1″
接下来,看看是否可以通过
Windows Live Writer Application API
去调用OpenPost,以启动WLW并且给对应的帖子设置各个参数,包括帖子内容,固定链接,标题,时间等等。
6.试了一下,用:
using WindowsLiveWriterApplicationLib; WindowsLiveWriterApplicationClass wlw = new WindowsLiveWriterApplicationClass(); wlw.OpenPost();
果然只是打开WLW中的那个“打开”的对话框:
而不是打开某个单独的帖子(很明显,因为该函数也没有参数可输入)。
所看起来,还是需要通过写WLW插件的形式,去实现对应的功能。
到目前为止,所能够想到的,为了实现通过帖子的固定链接而打开对应的帖子,在wlw中编辑后再发布的这个功能,
可以通过上面的办法,自己用C#写插件,然后自己调用XML-RPC,获得对应的帖子的内容,然后返回给WLW,但是对于其他相关的信息,包括帖子的分类,发布时间,是否允许评论,数据域等等信息,如何从插件中,赋值给WLW,还需要进一步探索。如果可以实现插件中将对应的帖子的所有相关信息都赋值给wlw中,那么就可以实现此处要的功能了。
有待以后有空继续折腾。
7.后来,已经实现了对应的,调用CookComputing.XmlRpc去获得对应帖子内容的,但是在添加了此功能后,由于未知原因,生成的dll插件却无法被wlw所识别了,搞得没办法编写对应wlw插件了。
即使可以编写wlw插件,结果也只是获得帖子相关信息,可以将帖子内容返回到wlw的编辑页面中,但是对于其他内容,比如标题,固定链接,分类等等内容,wlw中却没提供可以修改的接口,所以也无法修改,还是无法实现更新已有帖子的目的。
8.其他,也想过其他办法,比如在wlw中新建一个空的日志,然后在wordpress后台打开该贴,将帖子内容等信息全部复制过来,这样再重新发布一篇,内容就可以实现再次在wlw中编辑的效果了,但是后来才想起来,此种做法,会丢失帖子的已阅读次数和评论等数据,所以还是不可行的。
9.最后,突然想到另外一个妥协的办法,那就是,把原先帖子,在wordpress后台中改一下发布时间,改为最新的时间,新到wlw中打开最近的100个日志,可以找得到该贴,即可。
这样,就可以通过wlw打开该贴进行编辑了,并且保留了帖子的所有的相关数据,包括已读次数,评论等,唯一的一点小缺点是,更改了帖子的最原始发布时间。而对于此发布时间,其实也无所谓的,毕竟,当前最新更新该贴的话,发布时间更新为当前时间(或者其他更新时间)也是可以理解的。
另外,突然想到的,真的想要保留原先发布时间,那么也可以等wlw更新完了,把那个时间在wlw中重新设置为原先旧的发布时间,这样就完美了,就实现了,可以通过wlw更新帖子,而保留帖子的所有的信息。
转载请注明:在路上 » 【基本解决】用WLW(Windows Live Writer)通过帖子的固定链接,打开网站上某个已经存在的帖子