Org2Blog使用排错

发布时间 2023-04-27 21:42:50作者: lywon

image

Org2Blog使用排错

登录过程的排错

一个典型的排错过程: 不使用密码而是access token访问令牌、发布文章无论如何失败的。

尝试发布文章的排错

Error (org2blog/wp): I’m sorry I ran into a problem trying to load tags inside of ‘org2blog-user-login’.
Error (org2blog/wp): 2023-04-24T16:35:24+08:00
Please report that along with the following details:
(error XML-RPC fault ‘Exception during XmlRpcService call: Specified method is not supported.’)
Org2Blog Runtime: Org2Blog 1.1.12, Emacs 27.2, Org Mode 9.4.4, MetaWeblog 1.1.1, XML-RPC 1.6.15
-—
Error (org2blog/wp): I’m sorry I ran into a problem on post: “Hello, Buffer” (ID “nil”) inside of ‘org2blog-entry-save’.
Error (org2blog/wp): 2023-04-24T16:35:26+08:00
Please report that along with the following details:
(error XML-RPC fault ‘Failed to parse parameters’)
Org2Blog Runtime: Org2Blog 1.1.12, Emacs 27.2, Org Mode 9.4.4, MetaWeblog 1.1.1, XML-RPC 1.6.15


Error (org2blog/wp): I’m sorry I ran into a problem on post: “Hello, Buffer” (ID “nil”) inside of ‘org2blog-entry-save’.
Error (org2blog/wp): 2023-04-24T16:35:40+08:00
Please report that along with the following details:
(error XML-RPC fault ‘Failed to parse parameters’)
Org2Blog Runtime: Org2Blog 1.1.12, Emacs 27.2, Org Mode 9.4.4, MetaWeblog 1.1.1, XML-RPC 1.6.15

程序是按照先后顺序执行的并且有分支结构。
如果遇到了错误就会弹出在minibuffer或者*warnings**messages*等进行一个显示。
分类和标签:
加载分类和标签后,如果发现文章使用的分类和标签被包含在里面了那么就是用它。
如果没有包含这些个分类和标签、那么尝试创建分类和标签、如果创建成功了那么
报告成功或者没有任何异常、如果创建失败了那么立即报告错误但不会停止程序的执行。
然后利用生成的构造参数调用metaweblog生成xmlrpc识别输入。
将xmlrpc输入调用xmlrpc库中的某函数生成请求报文并将请求报文传递给远程主机并处理得到的响应。
远程主机得到请求信息后将响应传递给xmlrpc后台调用进程、当然可能包含错误信息的响应或者成功内容的响应。
本机获得响应后处理响应、如果成功有可能不予输出也可能显示成功消息、如果失败一定会显示错误消息。
如前文所述、错误消息会以醒目的形式、比如minibuffer/message/warnings等缓冲区、一般是在屏幕上可见的不会被隐藏的。

先后询问是否创建两个分类名称、确认创建一个分类后是会弹出下一个、否认上一个分类后也会弹出下一个。
两个分类都确认创建了后发现添加了Org2Blog、WordPress这两个分类也就是分类成功了。

而且再次提交后发现仍然继续提示是否创建这两个分类。说明根本没有加载出分类、按理说加载出分类后就不应当继续提示创建分类因为这个过程只是确保分类是存在的前提。而且根据load tag的错误出现的时机在
要求从minibuffer输入新建分类的名称大概率推测、加载分类和标签都是在同一个位置即org2blog-user-login、根据名称推测
这应当是org2blog包下的执行一个用户登录的函数、此函数应当在真正实现登录后根据获取的登录凭证立即获取基本信息包括
标签和分类、如果没有标签和分类都没有的话就会进入创建标签和分类的流程、如果创建成功了那么确认标签和分类都是存在的
然后才算作登录成功了;然后其他操作比如这里的save post buffer会先检测登录状态和登录凭证, 如果已经登录那么直接调用响应的函数、如果没有登录凭证那么首先调用org2blog-user-login、如果整个登录过程是成功的那么继续执行本函数的其余部分、如果登录过程是失败的那么就是异常中断。


手动添加Emacs, Lisp这两个标签后、仍然继续再出现加载标签的错误了。
这也可以用上面的基本假设即org2blog-user-login里面同时获取了标签和分类、只是没有分别确切地显示不同的错误消息而已、也有可能是先后执行获取标签和分类的流程、只是获取标签后出现错误导致整个函数执行异常中断后续不再继续了。
所以检测标签和分类均为失败、但会尝试创建分类并且可以成功创建分类、没有创建标签可能是尝试常见但创建失败了也可能压根没有创建标签的代码而是远端自己自动关联数据库。
检测分类和标签失败后、org2blog-user-interface/save post buffer的尝试也就失败了、所以是中断性质的异常检测。


至于最终爆出的解析参数失败那么其实是应当是org2blog/metaweblog/xmlrpc/cnblogs这三个组件之间的某一个或两个接口之间产生的问题。
因为org2blog调用metaweblog和xmlrpc的过程肯定没有问题、因为我可以确定我使用的是包管理系统中的org2blog、这个版本已经解决了包之间的依赖和兼容问题、这些代码包都有兼容性有声明而且声明是没有问题的。而xml-rpc协议应当是很简单不存在变种的、不太可能出现差异性。那么只能是metaweblog和cnblogs之间的接口是不兼容的。metaweblog发送给cnblogs的rpc参数,不被cnblogs正确解析到、应当是org2blog-user-login登录之后不论成功加载标签和分类是否存org2blog-entry-save在都将ORG缓冲区构造请求用户数据并发送、只是构造的请求的用户数据不被理解、按理说标签和分类都不存在就不应该继续执行后续。


检测出她俩的不兼容性也是很容易的。打开metaweblog的核心源码和cnblogs接口文档对比就可以了.
所有功能: 新建博文、新建附件、获取博文、编辑博文、删除博文、获取全部博文、获取最近博文、获取某篇博文、获取博文分类、新建分类
metaweblog 所有功能中除了blogger和wp前缀功能
blogger删除博文、获取所有博文, wp 下的有 新建分类


接口、测试、质量
功能限制收费、商业技术咨询、版权许可收费

  1. 手动安装的org2blog中的一个版本、可能与使用包管理工具安装产生了误差、过程中出现了错误。
  2. 加上之前用包管理工具安装的所以有两个版本共存、较新的是现在的版本。
  3. org2blog有三段配置: customize段、package管理段、org2blog段
  4. cnblogs网站和wordpress程序使用的API是不一样的而且都有版本的更新。

应用编程接口比较

比较签名

(defun metaweblog-delete-post (blog-xmlrpc user-name password post-id)
"metaWeblog.deletePost"
(defun metaweblog-edit-post (blog-xmlrpc user-name password post-id content publish)
"metaWeblog.editPost"
(defun metaweblog-get-categories (blog-xmlrpc user-name password blog-id)
"metaWeblog.getCategories"
(defun metaweblog-get-post (blog-xmlrpc user-name password post-id)
"metaWeblog.getPost"
(defun metaweblog-get-recent-posts(blog-xmlrpc blog-id user-name password number-of-posts)
"metaWeblog.getRecentPosts"
(defun metaweblog-upload-file (blog-xmlrpc user-name password blog-id file)
"metaWeblog.newMediaObject"
(defun metaweblog-new-post (blog-xmlrpc user-name password blog-id content publish)
"metaWeblog.newPost"
(defun metaweblog-wp-delete-page (blog-xmlrpc blog-id user-name password page-id)
"wp.deletePage"
(defun metaweblog-wp-edit-page (blog-xmlrpc user-name password blog-id page-id content publish)
"wp.editPage"
(defun metaweblog-wp-get-pages (blog-xmlrpc user-name password blog-id)
"wp.getPages"
(defun metaweblog-wp-get-pagelist (blog-xmlrpc user-name password blog-id)
"wp.getPageList"
(defun metaweblog-wp-get-tags (blog-xmlrpc user-name password blog-id)
"wp.getTags"
(defun metaweblog-wp-new-category (blog-xmlrpc user-name password blog-id category)
"wp.newCategory"
(defun metaweblog-wp-new-page (blog-xmlrpc user-name password blog-id content publish)
"wp.newPage"
(defun metaweblog-get-file-properties (file)

"metaWeblog.deletePost"
"metaWeblog.editPost"
"metaWeblog.getCategories"
"metaWeblog.getPost"
"metaWeblog.getRecentPosts"
"metaWeblog.newMediaObject"
"metaWeblog.newPost"
"wp.deletePage"
"wp.editPage"
"wp.getPages"
"wp.getPageList"
"wp.getTags"
"wp.newCategory"
"wp.newPage"

blogger.deletePost
blogger.getUsersBlogs
metaWeblog.editPost
metaWeblog.getCategories
metaWeblog.getPost
metaWeblog.getRecentPosts
metaWeblog.newMediaObject
metaWeblog.newPost
wp.newCategory

-metaWeblog.deletePost
+blogger.deletePost
+blogger.getUsersBlogs
metaWeblog.editPost
metaWeblog.getCategories
metaWeblog.getPost
metaWeblog.getRecentPosts
metaWeblog.newMediaObject
metaWeblog.newPost
-wp.deletePage
-wp.editPage
-wp.getPages
-wp.getPageList
-wp.getTags
wp.newCategory
-wp.newPage

提取所有函数及其签名
获取metaweblog使用的方法
获取metaweblog仅包含使用的方法
冒泡自然排序metaweblog使用的方法
冒泡自然排序metaweblog仅包含使用的方法
获取cnblogs使用的方法
冒泡字母排序cnblogs使用的方法
比较得出两个版本修改过的地方

综合比较

包描述: describe-package/C-h P metaweblog
列出包后有基本信息: package-list-packages
检查包安装目录下的文本说明文件: 不区分大小写
{readme, user*, manual*, doc*, docs*, documentation*}.{md,markdown,org,txt}
包的主入口文件: 通常和包名相同
metablog-VERSION/目录下就找: metaweb.log.el
org2blog.el/metaweblog.el/xml-rpc.el

阅读源代码理解过程

cnblogs gettags没有这个方法
getcategories 这个方法在cnblogs和metaweblog不一样
cnblogs的是title->而metaweblog下的是categoryName