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

顺带发那个pyqt的练手之作 : emlreader.py 一个可以查看eml附件的脚本
最近需要把整站js中的域名替成变量,awk查资料写了大半天也没整出个啥,话说我的正则还是太初级,话说我买的正则书也不知跑到哪去了,话说好书还是要放到家里
…
于是还是用python,没有用正则,但是好像跑起来真的比awk快~
脚本下载:replace_keyword.zip
效果:
//替换之前
var s = '<a href="http://blog.abc.com/show">';
//替换之后
var s = '<a href="http://blog.' + siteDomain + '/show">';
Copy Code
使用方法:
首要要修改脚本里要替换的关键词
config['keyword'] = 'abc.com'
config['vname'] = 'siteDomain'
Copy Code
然后
python replace_keyword.py ./myscript.js > /tmp/ooxx
mv /tmp/ooxx ./myscript.js
Copy Code
批量替换的话就需要写个简单的shell:replace_keyword.sh
#!/bin/sh
python replace_keyword.py $1 > /tmp/ooxx
mv /tmp/ooxx $1
Copy Code
批量替换整个目录
find ./ -name "*.js" | xargs -i sh replace_keyword.sh {} Copy Code
最后任务远没有结束,这个脚本还不够强大,它只会替换字符串中的关键字,作为对象属性名称的字符串不会替换,正则中的关键字无法替换,像下面:
var config = {
'blog.abc.com' : 1,
'game.abc.com' : 2
}
//需要手工替换为
var config = {};
config['blog' + siteDomain] = 1;
config['game' + siteDomain] = 2;
if ( /abc\.com/.test(str) ){}
//需要手工替换为
if ( new RegExp( siteDomain.replace('.','\.') ).test(str) ){} Copy Code
所以运行完脚本之后还需要检查未替换的地方,手工完成
find ./ -name "*.js" | xargs grep 'abc\\\?\.com'
Copy Code
个人比较习惯用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撰写截图:

data-URI是一种允许将图片直接嵌入页面或者样式表中的标准,新版本的firefox,safari,chrome,ie8均已支持,所以可以利用data-URI将样式表中的背景图片合并到文件,以减少连接数,加快网页的载入速度.
但是由于低于ie8的ie版本均不支持data-URI,所以要通过mhtml对ie6,7版本特殊照顾(ie中将网页保存为单个.mht文件时使用了该标准)
通过data-URI编码的图片要比原图大1/3,而且如果图片在样式表中反复出现,转换后的体积将比原文件加图片的体积不只大1/3,但是由于传输一般走gzip,客户端也有缓存,所以可以无视吧….
恩,技术就是这么点,本来要用这个搞一下优化,但是老大没有点头,白写了脚本,不过学了会python也没用过,算练练手
下面这个就是通过脚本转换的曾经风靡全球的css garden的页面
http://bluehua.org/demo/data_uri/cssgarden/
页面加载完毕只有两个请求,一个html,一个css
转换文件使用的参数
python /home/hualu/bin/data-uri.py -l /media/we/share/cssgarden/ -r http://bluehua.org/demo/data_uri/cssgarden/ /media/we/share/cssgarden/001
Copy Code
既然用不着,脚本也就一直beta下去了,啊….
python脚本下载