技术经验解读:【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:

相关文章
|
7天前
|
Web App开发 Python Windows
经验大分享:PYTHON爬取66影视的电影下载链接,有搜索功能
经验大分享:PYTHON爬取66影视的电影下载链接,有搜索功能
10 2
|
9天前
|
JSON 数据可视化 API
技术心得:如何用Python和API收集与分析网络数据?
技术心得:如何用Python和API收集与分析网络数据?
17 2
|
3天前
|
语音技术 开发者 Python
语音识别,python运行H ~W~,要使用英符,执行Python的流程是输入Python,回车,解释器的两大功能,翻译代码,提交计算机运算,多行代码运行,写一个py文件,pycharm安
语音识别,python运行H ~W~,要使用英符,执行Python的流程是输入Python,回车,解释器的两大功能,翻译代码,提交计算机运算,多行代码运行,写一个py文件,pycharm安
|
5天前
|
数据采集 Python
揭秘淘宝商品信息:Python爬虫技术入门与实战指南
Python爬虫用于获取淘宝商品详情,依赖`requests`和`beautifulsoup4`库。安装这两个库后,定义函数`get_taobao_product_details`,发送GET请求模拟浏览器,解析HTML获取标题和价格。注意选择器需随页面结构更新,遵守爬虫政策,控制请求频率,处理异常,且数据只能用于合法目的。
|
7天前
|
数据采集 Web App开发 iOS开发
经验大分享:Python抓取糗事百科成人版图片
经验大分享:Python抓取糗事百科成人版图片
|
7天前
|
存储 索引 Python
经验大分享:python中字典详解
经验大分享:python中字典详解
|
7天前
|
存储 索引 Python
经验大分享:python中字典详解
经验大分享:python中字典详解
|
9天前
|
存储 缓存 网络协议
技术笔记:python使用memcached
技术笔记:python使用memcached
|
10天前
|
Python
技术心得记录:分分钟学会一门语言之Python3篇【转载】
技术心得记录:分分钟学会一门语言之Python3篇【转载】
|
10天前
|
文字识别 API C++
技术好文共享:编写Tesseract的Python扩展
技术好文共享:编写Tesseract的Python扩展