技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能

简介: 技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能

代码:


#------------------------------------------------------------------------------------


# torrentParser1.04,用于解析torrent文件


# 增加了函数getMegnet,能将种子文件转磁力链


# 2018年5月13日


#------------------------------------------------------------------------------------


from bencode import bdecode,bencode


import time


import hashlib


import base64


#-------------------------------------


# torrentParser类


#-------------------------------------


class torrentParser(object):


# 构造函数


def init(self,filePathname):


self.filePathname=filePathname


with open(filePathname,'rb') as fObj:


self.fileDic=bdecode(fObj.read())


# 得到文件路径名


def getFilepathname(self):


return self.filePathname


# 得到所有键值


def getKeys(self):


return self.fileDic.keys()


# 得到全部内容


def getAllContent(self):


return self.fileDic;


# 得到文件结构


def getStructure(self):


retval=''


layer=0


for key in self.fileDic.keys():


value=self.fileDic【key】


retval=retval+self.getNextNode(key,value,layer)


return retval


# 向下递归查找文件结构,


def getNextNode(self,key,value,layer):


retval="";


layer+=1


if type(value)==type({}) and len(value.keys())>0:


for i in range(1,layer+1):


retval=retval+"\t"


retval=retval+str(key)+"\n"


for k in value.keys():


v=value【k】


retval=retval+ self.getNextNode(k,v,layer)


elif type(value)==type(【】) and len(value)>0:


for i in range(1,layer+1):


//代码效果参考:http://hnjlyzjd.com/xl/wz_24419.html

retval=retval+"\t"

retval=retval+str(key)+"\n"


arr=value


for it in arr:


if type(it)==type({}) and len(it.keys())>0:


for nk in it.keys():


nv=it【nk】


retval=retval+''+self.getNextNode(nk,nv,layer)


else:


for i in range(1,layer+1):


retval=retval+"\t"


showValue=str(value)【0:50】 # 显示的值


retval=retval+str(key)+":"+showValue+"\n"


return retval


# 获得tracker服务器的URL


def getAnnounce(self):


if 'announce' in self.fileDic:


return self.fileDic【'announce'】.decode('utf-8','ignore')


return ''


# 获得tracker服务器的URL列表


def getAnnounceList(self):


retval=【】


if 'announce-list' in self.fileDic:


arr=self.fileDic【'announce-list'】


for childArr in arr:


if type(childArr)==type(【】):


for item in childArr:


retval.append(item.decode('utf-8','ignore'))


else:


retval.append(childArr.decode('utf-8','ignore'))


return retval


# 得到制作日期


def getCreateTime(self):


if 'creation date' in self.fileDic:


unixTimestamp=self.fileDic【'creation date'】


firmalTime = time.localtime(unixTimestamp)


dt = time.strftime('%Y-%m-%d %H:%M:%S', firmalTime)


return dt


else:


return ''


# 获得编码方式


def getEncoding(self):


if 'encoding' in self.fileDic:


return self.fileDic【'encoding'】.decode('utf-8','ignore')


return ''


# 是否包含多个文件


def hasMultiFiles(self):


if 'files' in self.fileDic【'info'】:


return True


else:


return False


# 获得文件名


def getTitle(self):


arr=【】


info = self.fileDic【'info'】


if 'name.utf-8' in info:


arr=info【'name.utf-8'】


else:


arr = info【'name'】


#print(str(arr))


return arr.decode('utf-8','ignore')


# 获得备注(可选项)


def getComment(self):


if 'comment' in self.fileDic:


return self.fileDic【'comment'】.decode('utf-8','ignore')


return ''


# 获得创建者(可选项)


def getCreatedBy(self):


if 'created by' in self.fileDic:


return self.fileDic【'created by'】.decode('utf-8','ignore')


return ''


# 多文件的情况下,得到多个文件的个数


def getFileCount(self):


return len(self.fileDic【'info'】【'files'】)


# 多文件的情况下,获得所有文件


def getFiles(self):


files=【】


for item in self.fileDic【'info'】【'files'】:


file={}


for key in item.keys():


value=item.get(key)


if key=='path':


#print('1.'+str(value))


#print('10.'+str(value【0】))


path=value【0】.decode('utf8','ignore')


value=path


if key=='path.utf-8':


#print('2.'+str(value))


#print('20.'+str(value【0】))


path=value【0】.decode('utf8','ignore')


value=path


file【key】=value


files.append(file)


return files


# 单文件情况下,取文件名


def getSingleFileName(self):


return self.getTitle();


# 单文件情况下,取文件长度


def getSingleFileLength(self):


return self.fileDic【'info'】【'length'】


# 单文件情况下,取文件md5sum


def getSingleFileMd5sum(self):


if 'md5sum' in self.fileDic【'info'】:


return self.fileDic【'info'】【'md5sum'】.decode('utf-8','ignore')


else:


return ''


# 单文件情况下,取文件长度


def getSingleFilePieceLength(self):


return self.fileDic【'info'】【'piece length'】


# 单文件情况下,取文件pieces


def getSingleFilePieces(self):


return self.fileDic【'info'】【'pieces'】


# 得到文件简报


def getBrief(self):


retval=""


retval=retval+"File:"+self.filePathname+"\n"


retval=retval+"announce:"+self.getAnnounce()+"\n"


arr=self.getAnnounceList()


if(len(arr)>0):


retval=retval+"announce list:"+"\n"


for it in arr:


retval=retval+"\t"+it+"\n"


retval=retval+"Create time:"+self.getCreateTime()+"\n"


retval=retval+"Ecoding:"+self.getEncoding()+"\n"


retval=retval+"Title:"+self.getTitle()+"\n"


retval=retval+"Comment:"+self.getComment()+"\n"


retval=retval+"Created by:

相关文章
|
3天前
|
API Python
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
【02】优雅草央央逆向技术篇之逆向接口协议篇-以小红书为例-python逆向小红书将用户名转换获得为uid-优雅草央千澈
|
8天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
1月前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
42 6
|
2月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
41 7
|
3天前
|
安全 数据挖掘 编译器
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
【01】优雅草央央逆向技术篇之逆向接口协议篇-如何用python逆向接口协议?python逆向接口协议的原理和步骤-优雅草央千澈
|
15天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
23天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
60 2
|
1月前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
44 11
|
1月前
|
Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器就像是给函数穿上了一件神奇的外套,让它们拥有了超能力。本文将通过浅显易懂的语言和生动的比喻,带你了解装饰器的基本概念、使用方法以及它们如何让你的代码变得更加简洁高效。让我们一起揭开装饰器的神秘面纱,看看它是如何在不改变函数核心逻辑的情况下,为函数增添新功能的吧!
|
2月前
|
设计模式 监控 程序员
Python中的装饰器:功能增强与代码复用的利器####
本文深入探讨了Python中装饰器的工作原理、应用场景及其在提升代码可读性、减少重复劳动方面的优势。不同于传统方法的冗长和复杂,装饰器提供了一种优雅且高效的方式来增强函数或方法的功能。通过具体实例,我们将揭示装饰器如何简化错误处理、日志记录及性能监控等常见任务,使开发者能够专注于核心业务逻辑的实现。 ####