python获取bt种子的详细信息

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 bdecode
class 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 Parser
import time

if __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()
    

结果:

python获取bt种子的详细信息


python获取bt种子的详细信息,布布扣,bubuko.com

python获取bt种子的详细信息

上一篇:[转]如何学好windows c++编程 学习精髓(收集,整理)


下一篇:C++ 11 笔记 (一) : lambda