• voddown.py v0.3 基本上就这样吧


    如果不影响使用的话,不打算改了。

    或许等过段时间学习图形界面的时候再改一下。

      1 # -*- coding: gbk -*-
      2 #0.1 实现下载、断点续传
      3 #0.2 自定义保存路径,添加处理命令行参数,用于实现批处理
      4 #0.3 修复了一个0.3的bug,增加下载速度显示,改进批量下载
      5 import httplib
      6 import string
      7 import os
      8 import os.path
      9 import time
     10 import sys
     11 import urllib2
     12 
     13 def getvodheaders(vod_num):
     14     vod_url="/webmedia/webmedia.tfs?cmd=1&clientver=4801&uuid=ef47ddd514e24e45-af0b-b9f9&"+\
     15              "prog_id="+vod_num+\
     16              "&server_id=1&customer_id=2&"+\
     17              "requesttype=1&Offset=0"
     18     vod_headers={"Host":"vod.ccsu.cn","Accept":" */*",\
     19                  "User-Agent":"Viewgood/1.0 (1; 1; 1)",\
     20                  "Connection":"Keep-Alive",\
     21                  "Pragma":"no-cache",\
     22                  "Accept-Encoding":"gzip, deflate"}
     23     return vod_url,vod_headers
     24 
     25 def formatsize(size):
     26     if size<1000:
     27         return str(size)+"Byte"
     28     else:
     29         if size<1000000:
     30             return "%.2fKB"%(size/1000.00)
     31         else:
     32             if size<1000000000:
     33                 return "%.2fMB"%(size/1000000.00)
     34             else:
     35                 return "%.2fGB"%(size/1000000000.00)
     36             
     37 
     38 def getfilename(vod_num):
     39     url="http://vod.ccsu.cn/webmedia/webmedia.das?"+\
     40          "cmd=1&clientver=4801&"\
     41          "prog_id="+vod_num+\
     42          "&customer_id=2&uuid=ef47ddd514e24e45-af0b-b9f9"+\
     43          "&useragent=9.0.8112.16421&requesttype=1&Offset=0"
     44     try:
     45         res=urllib2.urlopen(url)
     46         tmp=res.read()
     47     except:
     48         print "no file",vod_num
     49         os.system("pause")
     50         sys.exit(0)
     51     tmp=string.split(tmp,chr(0))
     52     stype=string.split(tmp[3],"=")
     53     sname=string.split(tmp[5],"=")
     54     return sname[1]+"."+stype[1]
     55 
     56 def getnetfilesize(firstblock):
     57     filesize=1000000
     58     headsize=1024
     59     headsize=string.find(firstblock,"\r\n\r\n")+4
     60     ss=string.split(firstblock,"\r\n",2)
     61     ss=string.split(ss[1],":")
     62     filesize=int(ss[1])
     63     return filesize,headsize
     64 
     65 def getfullfilesize(vod_num):
     66     vod_url,vod_headers=getvodheaders(vod_num)  
     67     nfsize=0
     68     hsize=0
     69     try:
     70         conn=httplib.HTTPConnection("vod.ccsu.cn")
     71         conn.request("GET",vod_url,"",vod_headers)
     72         res=conn.getresponse()
     73         nfsize,hsize=getnetfilesize(res.read(100))
     74     except:
     75         print "net connect error"
     76         os.system("pause")
     77         sys.exit(0)
     78     finally:
     79         conn.close()
     80     return nfsize
     81 
     82 def getsavepath():
     83     spath=os.path.dirname(sys.argv[0])
     84     pathfile=os.path.join(spath,"path.txt")
     85     try:
     86         sfp=open(pathfile,"r")
     87         spath=sfp.read()
     88     except:
     89         # "path.txt open error"
     90         sfp=open(pathfile,"w")
     91     finally:
     92         sfp.close()
     93     if os.path.isdir(spath) == False:
     94         spath=os.path.dirname(sys.argv[0])
     95         sfp=open(pathfile,"w")
     96         print "new path:",spath
     97         try:
     98             sfp.write(spath)
     99         except:
    100             print "path.txt write error"
    101         finally:
    102             sfp.close()
    103     return spath
    104     
    105 
    106 def downloadfile(vod_num,offset=0):
    107     vod_url,vod_headers=getvodheaders(vod_num)
    108     speed=0
    109     readsize_befor=0
    110     start_time=0
    111     end_time=0
    112     escap_time=0
    113     speed_c=True
    114     fp=file(savefilename,"ab+")
    115     try:
    116         conn=httplib.HTTPConnection("vod.ccsu.cn")
    117         conn.request("GET",vod_url,"",vod_headers)
    118         res=conn.getresponse()
    119         fp.seek(0,2)
    120         bs=1024*10 #block size
    121         readsize=offset #size of read
    122         filetoreadsize=0 #
    123         longyu=0
    124         baifenbi=""
    125         print "downloading..."
    126         while 1:
    127             if speed_c==True:
    128                 start_time=time.time()
    129                 #print "start_time:",start_time
    130                 speed_c=False
    131                 readsize_befor=readsize
    132             block=res.read(bs)
    133             if block == "":
    134                 baifenbi="%%%.2f"%(readsize*100.0/netfilesize)
    135                 os.system("title "+baifenbi+"  "+formatsize(readsize)+"  "+formatsize(speed)+"/s")
    136                 break    
    137             if readsize == offset: 
    138                 filetoreadsize,headsize=getnetfilesize(block)
    139                 block=block[headsize:]
    140                 readsize += len(block)
    141                 fp.write(block)
    142                
    143             else:
    144                 readsize += len(block)
    145                 if readsize>netfilesize:
    146                     longyu=readsize-netfilesize
    147                     block=block[:-longyu]
    148                     readsize=netfilesize
    149                     fp.write(block)
    150                     break
    151                 fp.write(block)
    152             end_time=time.time()
    153             #print "end_time:",end_time
    154             escap_time=end_time-start_time
    155             if escap_time>= 1:
    156                 speed=(readsize-readsize_befor)/escap_time
    157                 speed_c=True
    158                 baifenbi="%%%.2f"%(readsize*100.0/netfilesize)
    159                 os.system("title "+baifenbi+"  "+formatsize(readsize)+"  "+formatsize(speed)+"/s")
    160     except:
    161         print "download error"
    162     finally:
    163         conn.close()
    164         fp.close()
    165     print "-"*30
    166     print "download size:%dByte"%(readsize)
    167     if readsize<netfilesize:
    168         print "lost of size:%dByte"%(netfilesize-readsize)
    169         os.system("pause")
    170         sys.exit(0)
    171     else:
    172         print "OK!"
    173 
    174 def startdownload(vod_num):
    175     global savefilename
    176     global netfilesize
    177     global savepath
    178     print "connecting..."
    179     savefilename=vod_num+"_"+getfilename(vod_num)
    180     savefilename=os.path.join(savepath,savefilename)
    181     offset=0
    182     if os.path.isfile(savefilename):
    183         offset=os.path.getsize(savefilename)
    184         print "exist file size:"+formatsize(offset)
    185     netfilesize=getfullfilesize(vod_num)
    186     print "net file size:"+formatsize(netfilesize)
    187     logfp=open(os.path.join(os.path.dirname(sys.argv[0]),"voddown.log"),"a")
    188     logfp.writelines(time.strftime('%Y-%m-%d',time.localtime(time.time()))+"  "+vod_num+"  "+savefilename+"\n")
    189     logfp.close()
    190     print "saved in:",savefilename
    191     if offset<netfilesize:
    192         downloadfile(vod_num,offset)
    193     else:
    194         print "OK!"
    195     
    196 
    197 if __name__ == "__main__":
    198     #34778 is small
    199     print "****vod download****"
    200     print "v0.3"
    201     print "--code by gk"
    202     print "********************"
    203     global savepath
    204     savepath=getsavepath()
    205     if len(sys.argv) == 1:
    206         vod_num=raw_input("please input an id:")
    207         startdownload(vod_num)
    208         os.system("pause")
    209     else:
    210         if os.path.isfile(sys.argv[1]):
    211             tfp=open(sys.argv[1],"r")
    212             try:
    213                 while 1:
    214                     id=tfp.readline()
    215                     if len(id)<3:
    216                         break
    217                     else:
    218                         cmd="start cmd /k "+'''"'''+sys.argv[0]+'''"'''+" "+str(id)
    219                         os.system(cmd)
    220             finally:
    221                 tfp.close()
    222         else:
    223             for vod_num in sys.argv[1:]:
    224                startdownload(vod_num)

    没有装Python的同学可以使用这个导出的exe文件


    顺便做了一个导出视频列表的东西,前几天把现有的视频都导出来了。

      1 # -*- coding: gbk -*-
      2 #list all vod file
      3 import httplib
      4 import string
      5 import os
      6 import os.path
      7 import time
      8 import sys
      9 import urllib2
     10 
     11 def getvodheaders(vod_num):
     12     vod_url="/webmedia/webmedia.tfs?cmd=1&clientver=4801&uuid=ef47ddd514e24e45-af0b-b9f9&"+\
     13              "prog_id="+vod_num+\
     14              "&server_id=1&customer_id=2&"+\
     15              "requesttype=1&Offset=0"
     16     vod_headers={"Host":"vod.ccsu.cn","Accept":" */*",\
     17                  "User-Agent":"Viewgood/1.0 (1; 1; 1)",\
     18                  "Connection":"Keep-Alive",\
     19                  "Pragma":"no-cache",\
     20                  "Accept-Encoding":"gzip, deflate"}
     21     return vod_url,vod_headers
     22 
     23 def formatsize(size):
     24     if size<1000:
     25         return str(size)+"Byte"
     26     else:
     27         if size<1000000:
     28             return "%.2fKB"%(size/1000.00)
     29         else:
     30             if size<1000000000:
     31                 return "%.2fMB"%(size/1000000.00)
     32             else:
     33                 return "%.2fGB"%(size/1000000000.00)
     34             
     35 
     36 def getfilename(vod_num):
     37     url="http://vod.ccsu.cn/webmedia/webmedia.das?"+\
     38          "cmd=1&clientver=4801&"\
     39          "prog_id="+vod_num+\
     40          "&customer_id=2&uuid=ef47ddd514e24e45-af0b-b9f9"+\
     41          "&useragent=9.0.8112.16421&requesttype=1&Offset=0"
     42     try:
     43         res=urllib2.urlopen(url)
     44         tmp=res.read()
     45         tmp=string.split(tmp,chr(0))
     46         stype=string.split(tmp[3],"=")
     47         sname=string.split(tmp[5],"=")
     48     except:
     49         return ""
     50     return sname[1]+"."+stype[1]
     51 
     52 def getnetfilesize(firstblock):
     53     filesize=1000000
     54     headsize=1024
     55     headsize=string.find(firstblock,"\r\n\r\n")+4
     56     ss=string.split(firstblock,"\r\n",2)
     57     ss=string.split(ss[1],":")
     58     filesize=int(ss[1])
     59     return filesize,headsize
     60 
     61 def getfilesize(vod_num):
     62     vod_url,vod_headers=getvodheaders(vod_num)  
     63     nfsize=0
     64     hsize=0
     65     try:
     66         conn=httplib.HTTPConnection("vod.ccsu.cn")
     67         conn.request("GET",vod_url,"",vod_headers)
     68         res=conn.getresponse()
     69         nfsize,hsize=getnetfilesize(res.read(100))
     70     except:
     71         return 0
     72     finally:
     73         conn.close()
     74     return nfsize
     75     
     76 
     77 if __name__ == "__main__":
     78     #34778 is small
     79     print "****vod file list****"
     80     print "v0.1"
     81     print "--code by gk"
     82     print "********************"
     83     start_id=raw_input("start id:")
     84     end_id=raw_input("end id:")
     85     fp=open("vodlist"+"_"+start_id+"-"+end_id+".txt","a+")
     86     err_num=0
     87     fileid=0
     88     filename=""
     89     filesize=0
     90     filenum=0
     91     txt=""
     92     try:
     93         for fileid in range(int(start_id),int(end_id)+1,1):
     94             filename=getfilename(str(fileid))
     95             if filename == "":
     96                 os.system("title "+start_id+"-"+end_id+"  bad id"+str(fileid))
     97                 continue
     98             else:
     99                 filesize=getfilesize(str(fileid))
    100                 if filesize == 0:
    101                     os.system("title "+start_id+"-"+end_id+"  bad id"+str(fileid))
    102                     continue
    103                 else:
    104                     err_num=0
    105                     txt=str(fileid)+"  "+filename+"  "+str(filesize)
    106                     print txt
    107                     fp.write(txt+"\n")
    108                     filenum+=1
    109     finally:
    110         fp.close()
    111         print "list %d files"%(filenum)
    112                         
    113                              
    114     

    这个是倒出来的文件:猛击这里下载

  • 相关阅读:
    数据库与数据仓库的比较Hbase——Hive
    log4j 配置使用
    hadoop Datanode Uuid unassigned
    kafka相关文章引用
    kafka可靠性
    kafka基本原理
    html
    并发编程
    Python之系统交互(subprocess)
    网络编程
  • 原文地址:https://www.cnblogs.com/fwindpeak/p/2857862.html
Copyright © 2020-2023  润新知