十二 142010

主要是学习Python处理xml的方法
先上一个纯Python的,有问题,部分歌曲下载不到,返回404错误,待解决

2010-12-15
终于找到404的原因了,今天早上回来,又执行了一下脚本,发现能下载的文件名都是没有空格的,而404的则都有空格,对文件名进行了编码,解决了,另外,由于有首歌的歌名有个中文的单引号,故需要将它编码为gbk,才发现Python2.4.3不支持gbk,所以,最后的程序,开头用的是Python2.7.1 ,修改的程序见页面底部

#!/bin/env python
import os
import urllib
from xml.dom import minidom
import time
download_time=time.strftime('%Y%m%d',time.localtime())
download_path=os.getcwd()+"/"+"wxf"+download_time

if not os.path.isdir(download_path):
    os.mkdir(download_path)

usock = urllib.urlopen('http://www.wangxiaofeng.net/mp3player.xml')
xmldoc = minidom.parse(usock)
usock.close()
songlist = xmldoc.getElementsByTagName('song')
for i in range(0,len(songlist),1):
    url=songlist[i].attributes["path"].value.encode('utf-8')
    name=songlist[i].attributes["title"].value
    urllib.urlretrieve(url,download_path+"/"+name+".mp3")

改良下,结合bash处理

#!/bin/env python
import os
import urllib
from xml.dom import minidom
import time
download_time=time.strftime('%Y%m%d',time.localtime())
download_path=os.getcwd()+"/"+"wxf"+download_time

if not os.path.isdir(download_path):
    os.mkdir(download_path)

usock = urllib.urlopen('http://www.wangxiaofeng.net/mp3player.xml')
xmldoc = minidom.parse(usock)
usock.close()
songlist = xmldoc.getElementsByTagName('song')
f=open('mp3list.txt','w')
for i in range(0,len(songlist),1):
    url=songlist[i].attributes["path"].value.encode('utf-8')
    f.write(url+"\n")

f.close()
#!/bin/bash

mkdir /home/python_code/wxf20101214
cd !$
cat /home/python_code/mp3list.txt |while read line
do
	wget "${line}"
done

url编码后的程序

#!/usr/local/python271/bin/python
import os
import urllib
from xml.dom import minidom
import time
download_time=time.strftime('%Y%m%d',time.localtime())
download_path=os.getcwd()+"/"+"wxf"+download_time

if not os.path.isdir(download_path):
    os.mkdir(download_path)

usock = urllib.urlopen('http://www.wangxiaofeng.net/mp3player.xml')
xmldoc = minidom.parse(usock)
usock.close()
songlist = xmldoc.getElementsByTagName('song')
for i in range(0,len(songlist),1):
    url=urllib.quote(songlist[i].attributes["path"].value.encode('gbk'),safe=":/")
    name=songlist[i].attributes["title"].value
    urllib.urlretrieve(url,download_path+"/"+name+".mp3")
Posted by admin Tagged with:
242010

解答论坛一个朋友关于获取01、02...10,而非1、2....10。
因为需要用flashget下载这样一些列的文件。自己了解这个应用,但是以前也没有处理过。还是有需要的。经过g后,测试得到。

[root@kook tmp]# cat for.sh
for ((a=1; a<=10 ; a++))
do
printf "%02d\n" $a
done
[root@kook tmp]# ./for.sh
01
02
03
04
05
06
07
08
09
10

这么写,也可以。

[root@kook tmp]# cat for.sh
for ((a=1; a<=10 ; a++))
do
printf "%.2d\n" $a
done

继续测试。

[root@kook tmp]# printf "%04d\n" -3
-003
[root@kook tmp]# printf "%.4d\n" -3
-0003

转载自:http://cnc.52zhe.cn/read.php/165.htm

Posted by admin
132010

我们用“&”把进程放入后台以后,如果需要了解进程的执行情况,可以使用wait函数。默认情况下wait会等待任意子进程结束但是不会返回子进程的返回值。而以子进程的pid作为参数调用wait时,wait便能够返回该子进程的退出状态了。
具体操作如下:

#!/bin/bash
command1 &
command2 &
command3 &
for pid in $(jobs -p)
do
wait $pid
[ "x$?" == "x0" ] && ((count++))
done

这里我们借助了“jobs -p“来获得所有后台进程的pid。

Posted by admin Tagged with:
242010

这称得上是一个 Vim 的杀手级 Tip,利用该 Tip,你可以快速处理 '、"、()、[]、{}、<> 等配对标点符号中的文本内容,包括更改、删除、复制等。
ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di'、di"、di(、di[、di{、di< - 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容

对于经常用 Vim 写代码的朋友来说,善用此 Tip 将极大的提高编码效率。

转载自:http://linuxtoy.org/archives/killer-vim-tip.html

Posted by admin Tagged with:
262010

#mkdir /data/conf/openvpn

up is a file containing vpn username/password on 2 lines

#vi /data/conf/openvpn/up
username
password

#vi /data/sh/rsync_my_files.sh
#!/bin/bash

#start openvpn in background
cd /data/conf/openvpn
/usr/sbin/openvpn --config openvpn.ovpn --auth-user-pass up --daemon

/usr/bin/rsync -vazu --password-file=/data/conf/rsync.pass rsy_user@192.168.1.100::db_file /data/backup/db_file

#disconnect from vpn server after synchronization
pkill openvpn

make rsync_my_files.sh executable

#chmod 700 /data/sh/rsync_my_files.sh

Posted by admin Tagged with: