百度空間上的背景音樂時不時會更新下,每次都是通過FlashFXP上傳的。又是登錄,又是選擇目錄的,著實麻煩。于是寫了這個小工具。
  開發環境:Eclipse3.2+Pydev+Python2.4
  技術上,沒有太多的新意,幾乎就是ftplib的基礎應用。在開發方式上,通過寫“死”的測試Demo,抽取出“活”的部分。整個迭代過程,比較自然。思路會隨著寫的過程,逐漸清晰。一些在設計之初沒考慮到的細節部分,也會中途逐漸顯現。
  主要功能有三個。list,顯示ftp站點某目錄的內容;download,下載文件到指定目錄下;upload,上傳文件到指定目錄下。
  還是看代碼,比較簡單。一定程度上,考慮到了程序的可擴展性。
conf/config.xml:

1 <? xml version="1.0" encoding="UTF-8" ?>
2 < configuration >
3 < host > 10.0.0.1 </ host >
4 < user > username </ user >
5 < password > password </ password >
6 </ configuration >

modules/parseConf.py:

 1 #    Programmer:     qixiang
 2 #    E-mail:         mail2qixiang AT gmail DOT com
 3 #
 4 #    Copyleft 2006 qixiang

 5 #
 6 #    modules/parseConf.py 2006-11-19 03:56:15 qixiang

 7
 8 def  getNodeValue(filename, nodename):
 9      from  xml.dom  import
 minidom
10     xmldoc  =
 minidom.parse(filename)
11     nodeValue  =
 xmldoc.getElementsByTagName(nodename)[0].firstChild.data
12      return  nodeValue

modules/handleFTP.py:

 1 #    Programmer:     qixiang
 2 #    E-mail:         mail2qixiang AT gmail DOT com
 3 #
 4 #    Copyleft 2006 qixiang

 5 #
 6 #    modules/handleFTP.py 2006-11-19 04:04:25 qixiang

 7
 8 from  ftplib  import  FTP
 9 def
 login(host, user, password):
10      try
:
11         ftp  =
 FTP(host)
12          # print 'connect successfully'

13          try :
14             ftp.login(user = user, passwd =
password)
15              # print 'login successfully'

16              return  ftp
17          except
:
18              print   ' incorrect user or password '

19      except :
20          print   ' unconnected host '

21
22 def
 list(ftp, ftpDirectory):
23      try
:
24
        ftp.cwd(ftpDirectory)
25         ftp.retrlines( ' LIST '
)
26
        ftp.close()
27      except
:
28          print   ' incorrect directory '

29         
30 def
 upload(ftp, remoteFile, localFile):
31      try
:
32         ftp.storlines( ' STOR  ' +
remoteFile, open(localFile))
33          print   ' upload successfully '

34          print
35         ftp.retrlines( ' LIST ' )
36
        ftp.close()
37      except
:
38          print   ' incorrect remoteFile or localFile '

39
40 def
 download(ftp, remoteFile, localFile):
41      try
:
42         ftp.retrlines( ' RETR  ' + remoteFile, open(localFile,  " w "
).write)   
43          print   ' download successfully '
 
44          print

45         ftp.retrlines( ' LIST ' )
46
        ftp.close()
47      except
:
48          print   ' incorrect remoteFile or localFile '

ftp.py :

 1 #    Programmer:     qixiang
 2 #    E-mail:         mail2qixiang AT gmail DOT com
 3 #
 4 #    Copyleft 2006 qixiang

 5 #
 6 #    ftp.py 2006-11-19 04:04:54 qixiang

 7
 8 import  sys
 9 from  modules.parseConf  import
 getNodeValue
10 from  modules.handleFTP  import
 login, list, upload, download
11

12 configFile  =   ' conf/config.xml '

13 flag  =  sys.argv[ 1 ]
14 ftp  =  login(getNodeValue(configFile,  ' host ' ), getNodeValue(configFile,  ' user ' ), getNodeValue(configFile,  ' password '
))
15

16 if  flag  ==   ' list '
:
17     list(ftp, sys.argv[ 2
])
18 if  flag  ==   ' upload '
:
19     upload(ftp, sys.argv[ 2 ], sys.argv[ 3
])
20 if  flag  ==   ' download '
:
21     download(ftp, sys.argv[ 2 ], sys.argv[ 3 ])

  命令行下運行:
  1. list
  python ftp.py list ftp目錄名
  eg. python ftp.py list music

  2. upload
  python ftp.py upload 上傳所要保存的ftp目錄文件名 待上傳的本地文件
  eg. python ftp.py upload music\remote.xml c:\local.xml

  3. download
  python ftp.py download 待下載的遠程文件 下載所要保存的本地目錄文件名
  eg. python ftp.py download music\remote.xml c:\local.xml

  我個人是將實現upload功能的命令,保存成一個批處理文件。需要的時候,運行下就OK了。
upload.bat:

d:
cd java/eclipse/workspace/ftp
python ftp.py upload music\mp3player.xml f:\website\music\mp3player.xml

  功能比較單一,還有許多欠考慮的地方。例如對上傳文件類型的判斷,對上傳、下載文件所在目錄存在與否的判斷,等等。
  小的東西,如果深究,也蠻有意思。

  ps: 程序目錄及copyleft部分借鑒了limodouUlipad,在此表感謝。  
 



歡迎大家訪問我的個人網站 萌萌的IT人