2010.3.6 更新
由于最近的学习充电计划,这个东西暂时搁置了,现在已经可以自动保存了~
———————————
linux平台上一直没有这样一个所见即所得的blog离线编辑器,昨天试着用pyqt4写了一个小脚本,发现原来python做客户端软件是如此容易.然后下定决心要利用n个周末的时间自己写一个.
开始打算用纯qt的ui控件实现,但是感觉没有wordpress的编辑器这么亲切,于是想到一个界面亲切,实现也方便的方案: ui部分直接用web,框在一个pyqt的webkit组件里,逻辑部分用python的cgihttpserver在本地开一个cgi.
这个东西搞到今天雏形已经有了,可以实现跟wordress完全相同的书写体验.

顺带发那个pyqt的练手之作 : emlreader.py 一个可以查看eml附件的脚本
由于半路出家,设计模式几乎没有接触,一直为产品代码的耦合头疼,前两天忽然想到,wordpress区区数行代码便实现了强大的插件接口,何不借鉴一下呢,于是便有了下面的假想代码(不了解wordpress插件机制的同学可以先了解一下):
/*
* 以一个相册浏览的产品为例
* 该应用可以实现无刷新的图片浏览,附加功能:新用户引导,图片评论,对图片处理的第三方应用,圈人
*/
//产品引导开始
addAction('photo_browser_init',function()
{
guideManager.init();
});
addAction('photo_load_sucess',function(photo)
{
guideManager.step(3, photo);
});
addAction('photo_change',function(photo)
{
guideManager.step(4);
});
//产品引导结束
//管理员ui开始
addAction('photo_browser_init',function()
{
if ( !currentUser.isAdmin ) return;
......
});
//管理员ui结束
//相册圈人开始
addAction('photo_browser_init', function()
{
photo_tag.init();
});
addAction('photo_load|photo_change', function(photo)
{
photo_tag.update(photo);
});
//相册圈人结束
//相片app
addAction('photo_browser_init',function(photo)
{
photo_apps.init(photo);
});
addAction('photo_load|photo_change',function(photo)
{
photo_apps.update(photo);
});
//相片app结束
//相片评论开始
addAction('photo_browser_init',function(photo)
{
photo_comment.init(photo);
});
addAction('photo_load|photo_change',function(photo)
{
photo_comment.update(photo);
});
//相片评论结束
//相片浏览核心功能开始
var photo_browser = {...};
photo_browser.init();
//相片浏览核心功能结束 Copy Code
其实跟自定义事件有点类似,但是比自定义事件更强大:
- 自定义依赖于对象,对脚本的加载顺序会有要求,而wordpress里的addFilter和addAction可以完美解决这个缺点。
- filter可以实现数据过滤,而自定义事件不能
经过解耦之后的产品更方便多人协作开发,代码块清晰,有效避免svn冲突,还有种种其他好处。。
仅仅是个想法,未经实践,实践ing~
上次发过一个增强版本,但是使用的复制脚本在flash升级到10版之后就失效了.
这次同样也是修改的0.9版的wp-syntax,跟上一个修改版本不同的就是
- 删除了存在漏洞的test目录
- 使用wp内置函数判断是否输出工具栏,使用url rewrite不会出问题
- 代码复制使用ZeroClipboard,可以兼容所有主流浏览器
效果:
使用方法跟上一个版本一样
<pre lang=”javascript” line=”1″ run=”1″>
把第三个参数设为1即可显示run Code的按钮.
下载点这里:wp-syntax-plus.zip
留言里有个叫whisperer 的同学问我用的啥插件,俺才想起来发一下,一大早起来发我也真不容易
下载地址更新 2009.11.8
http://wordpress.org/extend/plugins/keywords-highlight-tool/
———-
由于blog的访客多来自搜索引擎,所以关键词高亮会大大的增强访客的浏览体验,帮助访客快速定位感兴趣的内容.
类似插件已有很多,但俺绝不是再造普通的轮子,一定要用浏览器兼容性最好的插件,没有就自己搞..
现存插件的实现方式有两种,一种用php在后端实现,另一种用js在前端实现.
php实现高亮,浏览器兼容性最好,但是有两个问题:
1.效率问题,不如用js实现,将压力分到前端; 2.不支持cache类插件,当然这个问题可以通过hack cache插件解决,但是不可取.
js实现高亮:
比较理想的实现方法,搜到一篇文章叫也谈Wordpress关键词高亮 里面讲到用js高亮关键词,但是中文gb转码使用了vbscript,所以仅支持ie浏览器
于是用自己的想法简单实现了一下这个功能, 点击搜索测试 第一个结果就应该是了
screenshot:

跟上面提到插件的主要不同点:
- 改进了高亮的实现方法,仅替换元素的text节点,防止造成元素事件失效
- 判断如果不是外链过来的访客将不加载高亮的js脚本
- 百度链接过来,中文gb转码时使用php后台转码,兼容所有主流浏览器
目前仅添加了对google,yahoo,baidu三个搜索引擎的支持,如果想支持更多,自行修改highlight.js即可
插件下载点这里
个人比较习惯用email更新博客,写日记用的blogger一直是手机写邮件更新,于是打算这个工作blog也要这么搞
wordpress自身有个通过邮件更新的功能,但是很弱,不支持附件.所以俺再次拿python做练习
实现方式:
发布blog时只要写信给somebody+xxoo@gmail.com
脚本会定时检查somebody@gmail邮箱,
实现特性:
- 可以通过添加"[[tag:t1,t2,t3]]"设定文章的标签
- 可以通过添加"[[cat:c1,c2]]"设定文章分类
- 可以添加"[[end]]"标记文章结尾,标记后面的字符将被忽略
- 可以添加[[html]][[/html]]块发布纯html代码块
- 可以将邮件中的图片提取,并上传到picasa或者wp
(备注:"[["实际使用用时要用三个,即"[[[xxxx]]]"这里用两个是因为本文也是通过这个脚本发布的)
运行环境:
python2.6(ubuntu)(其他版本未测),gdata库
部分代码:
def after_publish( self, mid ):
self.mail.read( mid )
#实例化一个Gmail2Blog,参数依次为:gmail帐号,gmail密码,wp帐号,wp密码,blog的xmlrpc地址
myG2B = Gmail2Blog( 'somebody@gmail.com', 'xxxx', 'admin', 'xxxx', 'http://xxoo.com/xmlrpc.php' )
#将处理完的邮件标记为已读
myG2B.publish_callback = after_publish
#设置图片的上传方式,'picasa':上传到账户的picasa相册,'wp':上传到blog
myG2B.upload2 = 'picasa'
while True:
#将收件箱中发送给'somebody+blog@gmail.com'的未读邮件发送到blog
myG2B.publish_mail( 'INBOX' , '(UNSEEN) (TO \"somebody+blog@gmail.com\")' )
#每隔十分钟检查一次
time.sleep( 60 * 10 )
Copy Code
源码下载:
非常不靠谱版本(等靠谱了就放到vps上长期运行
)
gmail2blog-sbeta.tar.gz
Gmail撰写截图:
