开源项目as3wordpresslib测试版发布
写在前面的话:
艾睿原创团队群的讨论时给我的灵 感,as3wordpresslib项目从7月份开始勾划,当中由于工作原因搁置了2个月,其实实际的开发时间也就只有短短2周左右,由于需要筹备婚事, 我感觉今后几个月之内不能全力support这个项目,但是不想让项目夭折,所以选择今天把这个完成度90%的项目发布出来,希望感兴趣的朋友能学习它, 使用它,完善它,推广它。
项目简介
什么是as3wordpresslib?
as3wordpresslib 是一套as3类库,这套类库实现了wordpress 2.8中基于xmlrpc的service接口。flex/flash开发人员利用这套类库就可以轻易的访问wordpress后台,而把注意力集中在打 造自己的个性化Blog UI。
使用as3wordpresslib你可以做些什么?
1. 使用Flex/Flash技术,实现blog的UI,打造个性化blog。
2. 使用Flex/AIR技术,实现blog离线撰写发布程序。
开发as3wordpresslib的目的?
1. 使得希望学习flex/flash开发而又缺少后台支持的初级程序员可以迅速方便的focus在自己感兴趣的领域。(其实这是本project的真正目 的,希望每个初学者都可以毫无后顾之忧的使用as3wordpresslib写出自己第一个真正意义上的Hello World )
2. 希望能带动其他的Flexers能和我一起做些虽然看似dirty work但是对于Flex应用推广和发展却有较大帮助的公益劳动。
为什么选择WordPress作为Blog后台
1. wordpress 目前非常火热,大部分技术人员都拥有自己的wordpress blog。(良好的群众基础)
2. wordpress 更新迅速,支持用户自定义插件皮肤,这正是Flex项目在开发中需要考虑的问题。
项目计划
* xmlrpc协议学习
* 开发环境搭建
* 开发架构搭建
* wordpress xmlrpc api接口定义
* wordpress xmlrpc api具体实现
* 接口测试
* 接口asdoc comments 撰写
* Demo编写
* Guide撰写
* 宣传与发布
* bug征集
* 升级维护
最新近况:
2009-08-04:API Reference Document及类包aswplib.swc已经发布(Download面板有下),邀请了艾睿原创团队的一些朋友先进行内测。
2009-08-03:接口的asdoc和api实现基本都已完成,除了少数几个only for AIR以及在测试过程中没有调通的接口。接下来就开始着手准备Demo,在实际开发中去解决上个阶段没有完成的一些遗留问题。
参考资料
项目地址:
http://code.google.com/p/as3wordpresslib/
SVN地址(含lib和FB4版最佳实践源码):
http://as3wordpresslib.googlecode.com/svn/trunk/
接口完成情况:
WordPress API
| No. | operation name | interface | implement | asdoc | assigner | remark |
| 1 | getUsersBlogs | / | / | / | momoko | 完成 |
| 2 | getTags | / | / | / | momoko | 完成 |
| 3 | getCommentCount | / | / | / | momoko | 完成 |
| 4 | getPostStatusList | / | / | / | momoko | 完成 |
| 5 | getPageStatusList | / | / | / | momoko | 完成 |
| 6 | getPageTemplates | / | / | / | momoko | 完成 |
| 7 | getOptions | / | / | / | momoko | 完成 |
| 8 | setOptions | / | / | / | momoko | 完成 |
| 9 | deleteComment | / | / | / | momoko | 完成 |
| 10 | editComment | / | / | / | momoko | 完成 |
| 11 | newComment | / | / | / | momoko | 完成 |
| 12 | getCommentStatusList | / | / | / | momoko | 完成 |
| 13 | getPage | / | / | / | momoko | 完成 |
| 14 | getPages | / | / | / | momoko | 完成 |
| 15 | getPageList | / | / | / | momoko | 完成 |
| 16 | newPage | / | / | / | momoko | 完成 |
| 17 | deletePage | / | / | / | momoko | 完成 |
| 18 | editPage | / | / | / | momoko | 完成 |
| 19 | getAuthors | / | / | / | momoko | 完成 |
| 20 | getCategories | / | / | / | momoko | 完成 |
| 21 | newCategory | / | / | / | momoko | 完成 |
| 22 | deleteCategory | / | / | / | momoko | 完成 |
| 23 | suggestCategories | / | / | / | momoko | 完成 |
| 24 | uploadFile | / | / | / | momoko | only for AIR 未测试 |
| 25 | getComment | / | / | / | momoko | 完成 |
| 26 | getComments | / | / | / | momoko | 完成 |
Blogger API
| No. | operation name | interface | implement | asdoc | assigner | remark |
| 1 | getUsersBlogs | / | / | / | momoko | 完成 |
| 2 | getUserInfo | / | / | / | momoko | 完成 |
| 3 | getPost | / | / | momoko | 完成 | |
| 4 | getRecentPosts | / | / | / | momoko | 完成 |
| 5 | getTemplate | / | / | momoko | 该接口不能正常工作 | |
| 6 | setTemplate | / | / | momoko | 该接口不能正常工作 | |
| 7 | newPost | / | / | / | momoko | 完成 |
| 8 | editPost | / | / | / | momoko | 完成 |
| 9 | deletePost | / | / | / | momoko | 完成 |
MetaWeblog? API
| No. | operation name | interface | implement | asdoc | assigner | remark |
| 1 | newPost | / | / | / | momoko | 完成 |
| 2 | editPost | / | / | / | momoko | 完成 |
| 3 | getPost | / | / | / | momoko | 完成 |
| 4 | getRecentPosts | / | / | / | momoko | 完成 |
| 5 | getCategories | / | / | / | momoko | 完成 |
| 6 | newMediaObject | / | / | / | momoko | only for AIR 未测试 |
| 7 | deletePost | / | / | / | momoko | 完成 |
| 8 | getTemplate | / | / | / | momoko | 底层实现调用了BloggerService?接口 不能工作 |
| 9 | setTemplate | / | / | / | momoko | 底层实现调用了BloggerService?接口 不能工作 |
| 10 | getUsersBlogs | / | / | / | momoko | 完成 |
MovableType? API
| No. | operation name | interface | implement | asdoc | assigner | remark |
| 1 | getCategoryList | / | / | / | momoko | 完成 |
| 2 | getRecentPostTitles | / | / | / | momoko | 完成 |
| 3 | getPostCategories | / | / | / | momoko | 完成 |
| 4 | setPostCategories | / | / | / | momoko | 完成 |
| 5 | supportedMethods | / | / | / | momoko | 完成 |
| 6 | supportedTextFilters | / | / | / | momoko | 测试时无返回结果,待进一步验证 |
| 7 | getTrackbackPings | / | / | / | momoko | 测试时无返回结果,待进一步验证 |
| 8 | publishPost | / | / | / | momoko | 完成 |
as3wordpresslib api用户指南
1 在本站“Downloads”下载as3wplib.swc(目前发布的1.0版本只支持Flex 4 SDK,以后会发布 SDK 3的版本)
2 在项目中导入swc类包
* 在FlashBuilder? 4中对新建的项目点击右键,选择“Properties”
* 在弹出面板左侧选择“Flex Build Path”一栏,在相应的右侧面板中选择“Library path” tab
* 点击“Add SWC”按钮导入之前下载的as3wplib.swc
3 为项目配置wordpress的xmlrpc地址(仅针对Flex 4 SDK,Flex3和flash的配置flashvars方法请自行google)
* 打开项目目录中的“html-template”文件夹下的“index.template.html”文件
* 对38行附近代码作如下修改,增加一个属性 flashvars.wp_xmlrpc,其指向的就是wordpress的xmlrpc地址。
var xiSwfUrlStr = “${expressInstallSwf}”;
var flashvars = {};
flashvars.wp_xmlrpc = “http://127.0.0.1/wordpress/xmlrpc.php”;
var params = {};
params.quality = “high”;
4 WordPress提供的API每一处调用都需要传递用户名密码,这么做对于我们使用Flex制作Blog UI来说非常不便,因为Flex不能load本地文件,这对于账号配置来说是非常不安全的,幸好WordPress提供个几种角色,我们只需配置一个只读 角色给API即可。
* 使用管理员账号登陆WordPress,在User管理处新增一个Subscriber(订阅者)账号,这个账号只有只读权限。
* 同样使用flashvars方式,将Subscriber用户名密码配置在这里
var xiSwfUrlStr = “${expressInstallSwf}”;
var flashvars = {};
flashvars.wp_xmlrpc = “http://127.0.0.1/wordpress/xmlrpc.php”;
flashvars.username = “Subscriber”;
flashvars.password= “123456″;
var params = {};
params.quality = “high”;
5 WordPress中的API有一点让我很费解,就是某些get操作也需要写权限,这样的话,我们配置的Subscriber账号就无法访问这些API, 我只好hack一些WordPress里xmlrpc.php中的代码了,将一些不合理接口的写权限验证给注释掉。(由于我现在无法统计出所有的不合情理 的借口,所以请使用尝鲜版的用户自行注释,以后我会给出我修改好的xmlrpc.php文件,用户只需替换即可)
* 注释方法以getCategories()方法为例注释 2786两行即可。
//if( !current_user_can( ‘edit_posts’ ) )
// return new IXR_Error( 401, ( ‘Sorry, you must be able to edit posts on this blog in order to view categories.’ ) );
6 在你的AS3代码第一次调用as3wplib之前,配置xmlrpc的路径
Flex4:Configuration.getInstance().xmlrpcUrl = FlexGlobals?.topLevelApplication.parameters["wp_xmlrpc"];
Flex3:Configuration.getInstance().xmlrpcUrl = Application.application.parameters["wp_xmlrpc"];
Flash:Configuration.getInstance().xmlrpcUrl = LoaderInfo?(this.root.loaderInfo).application.parameters["wp_xmlrpc"];
鸣谢:
艾睿原创群给予意见和帮助的朋友,特别是陆仕桑同学和kenshin
备注:
这是我修改的xmrpc.php,不过只修改了几个主要接口,同学们可以自行根据Guide上的提示自行修改
最佳实践测试截图

