[ Content | Sidebar ]

Posts tagged python

准备做一个wordpress的离线编辑器

2010.3.6 更新
由于最近的学习充电计划,这个东西暂时搁置了,现在已经可以自动保存了~
———————————
linux平台上一直没有这样一个所见即所得的blog离线编辑器,昨天试着用pyqt4写了一个小脚本,发现原来python做客户端软件是如此容易.然后下定决心要利用n个周末的时间自己写一个.

开始打算用纯qt的ui控件实现,但是感觉没有wordpress的编辑器这么亲切,于是想到一个界面亲切,实现也方便的方案: ui部分直接用web,框在一个pyqt的webkit组件里,逻辑部分用python的cgihttpserver在本地开一个cgi.

这个东西搞到今天雏形已经有了,可以实现跟wordress完全相同的书写体验.

顺带发那个pyqt的练手之作 : emlreader.py 一个可以查看eml附件的脚本

替换js中的字符串常量为变量

最近需要把整站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 

Gmail to wordpress:通过mail更新wordpress

个人比较习惯用email更新博客,写日记用的blogger一直是手机写邮件更新,于是打算这个工作blog也要这么搞

wordpress自身有个通过邮件更新的功能,但是很弱,不支持附件.所以俺再次拿python做练习

实现方式:

发布blog时只要写信给somebody+xxoo@gmail.com

脚本会定时检查somebody@gmail邮箱,

取出收信人是somebody+xxoo@gmail.com的未读邮件(加xxoo为了防止垃圾邮件),然后将邮件正文中引用的图片取出,上传到blog或着picasa,将返回的地址作为图片的新地址,然后通过wordpress的metaWeblog api 发布到wordpress

实现特性:

  • 可以通过添加"[[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撰写截图:

screenshot_016.png

利用data-uri合并样式表和图片

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脚本下载