Files
tv/get115list.py

100 lines
2.8 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
from p115 import P115Client, P115FileSystem
import time
import traceback
import os
import re
import sys
import traceback
count=0
failcount=0
fullscan=True
def walk_dir(fs,f,replaceroot):
dirlist=list()
try:
#print("try listdir")
file_list = fs.listdir_attr()
except KeyboardInterrupt:
print("get ctrl+c, exit")
sys.exit(1)
except:
traceback.print_exc()
time.sleep(1)
return
#filetype_re=re.compile(r'\.(png|jpg|jpeg|bmp|gif|doc|nfo|flac|mp3|wma|ape|cue|wav|dst|dff|dts|ac3|eac3|txt|db|pdf)$')
filetype_re=re.compile(r'\.(png|jpg|jpeg|bmp|gif|doc|nfo|txt|db|pdf)$')
for file_obj in file_list:
if not file_obj.is_directory:
path = file_obj.path
if filetype_re.search(path) != None or "BDMV" in path:
continue
size=int(file_obj.size)
if size>0 and size<4096:
continue
paths = path.split("/")
if replaceroot!="":
if len(paths)>=3:
path=os.path.join("/",replaceroot,*paths[2:])
print(f"{path}\t{file_obj.size}")
f.write(f"{path}\t{file_obj.size}\n")
f.flush()
else:
dirlist.append(file_obj.path)
for dirItem in dirlist:
fs.chdir(dirItem)
global count
count=count+1
if count%3==0:
time.sleep(1)
try:
walk_dir(fs,f,replaceroot)
except KeyboardInterrupt:
print("get ctrl+c, exit")
sys.exit(1)
except:
traceback.print_exc()
time.sleep(1)
return
def main():
parser = argparse.ArgumentParser(description='快速遍历115分享目录')
parser.add_argument('--cookie', type=str, required=True, help='115Cookie')
parser.add_argument('--url', type=str, required=True, help='115ShareUrl')
parser.add_argument('--output', type=str, required=True, help='outputfile')
parser.add_argument('--replaceroot', type=str, default="", required=False, help='替换根目录名称')
args = parser.parse_args()
cookie=args.cookie
shareUrl=args.url
client=P115Client(cookie)
if not shareUrl.startswith("http"):
shareUrl = "https://115.com/s/" + shareUrl
print("cookie:"+args.cookie+", shareurl:"+shareUrl)
cidre = re.compile(r'cid=([0-9]+)')
matches = cidre.findall(shareUrl)
cid = None
if len(matches)>0:
cid=int(matches[0])
shareUrl = cidre.sub("", shareUrl).replace("?&","?").replace("&&","&")
fs = client.get_share_fs(shareUrl)
#if cid != None:
# fs.chdir(cid)
count=0
f=open(args.output, mode="a", encoding="utf-8")
walk_dir(fs,f,args.replaceroot)
if __name__ == '__main__':
main()