python获取bt种子的详细信息

来源:互联网 发布:小班美工纸球反思 编辑:程序博客网 时间:2024/04/28 02:46
bt种子具体文件结构如下: 
全部内容必须都为bencoding编码类型。 
整个文件为一个字典结构,包含如下关键字 
announce:tracker服务器的URL(字符串) 
announce-list(可选):备用tracker服务器列表(列表) 
creation date(可选):种子创建的时间,Unix标准时间格式,从1970 1月1日 00:00:00到创建时间的秒数(整数) 
comment(可选):备注(字符串) 
created by(可选):创建人或创建程序的信息(字符串) 
info:一个字典结构,包含文件的主要信息,为分二种情况:单文件结构或多文件结构 
1.单文件结构如下: 
  length:文件长度,单位字节(整数) 
  md5sum(可选):长32个字符的文件的MD5校验和,BT不使用这个值,只是为了兼容一些程序所保留!(字符串) 
  name:文件名(字符串) 
  piece length:每个块的大小,单位字节(整数) 
  pieces:每个块的20个字节的SHA1 Hash的值(二进制格式) 
2.多文件结构如下: 
  files:一个字典结构 
length:文件长度,单位字节(整数) 
md5sum(可选):同单文件结构中相同 
  path:文件的路径和名字,是一个列表结构,如\test\test.txt 列表为l4:test8test.txte 
  name:最上层的目录名字(字符串) 
  piece length:同单文件结构中相同 

  pieces:同单文件结构中相同 

知道了这些就很好解析了

Parser.py

# -*- coding: utf-8 -*-from bencode import bdecodeclass Parser(object):        def __init__(self,filePath):        self.path = filePath        metainfo_file = open(str(self.path), 'rb')        self.metainfo = bdecode(metainfo_file.read())               metainfo_file.close()    def getStruct(self):        print self.metainfo.keys()    #如果是单文件就返回:0    #如果是多文件就返回:1    def checkType(self):        if 'files' in self.metainfo['info']:            return 1        else:            return 0            def getCreationDate(self):        if 'creation date' in self.metainfo:            return self.metainfo['creation date']        else:            return ''        def getInfo(self):        return self.metainfo['info'].keys()     #获得文件名    def getName(self):              info = self.metainfo['info']        if 'name.utf-8' in info:            filename=info['name.utf-8']        else:            filename = info['name']        for c in filename:            if c=="'":                filename=filename.replace(c,"\\\'")        return filename        #多文件的情况下,获得所有文件,返回为:dic     def getInfoFiles(self):        return self.metainfo['info']['files']        #返回创建时间    def getCreatedBy(self):        if 'created by' in self.metainfo:            return self.metainfo['created by']        else:            return ''        #获得编码方式    def getEncoding(self):        if 'encoding' in self.metainfo:            return self.metainfo['encoding']        return ""        def getComments(self):        info = self.metainfo['info']        if 'comment.utf-8' in self.metainfo:            comment=self.metainfo['comment.utf-8']            return comment        else:            return ''
test.py

#-*- coding:utf-8 -*-import Parserimport timeif __name__ == "__main__":    parser=Parser.Parser('test1.torrent')    print parser.getStruct()    print parser.getCreationDate()    print 'creation date:'+time.strftime('%Y-%m-%d',time.localtime(parser.getCreationDate()))    print 'comments:'+parser.getComments()    print 'name:'+parser.getName()    print 'encoding:'+parser.getEncoding()    print 'created by:'+parser.getCreatedBy()    print parser.getInfo()    print parser.getInfoFiles()    print parser.checkType()    print parser.getSize()    

结果:



0 0