def 网盘检查(self): try: lzy = LanZouCloud() fileURL = '' folder_info = lzy.get_folder_info_by_url( 'https://pan.lanzous.com/b01bfj76f') if folder_info.code != LanZouCloud.SUCCESS: self.网盘链接 = '' self.网盘报错 = 1 return # resp = urllib.request.urlopen('http://dnf.17173.com/jsq/instructions.html?j') for file in folder_info.files: if file.name.startswith("DNF计算器"): self.云端版本 = file.name.replace(".zip", " 17173DNF.exe") fileURL = file.url if file.name.replace("DNF计算器", "").replace(".zip", "").replace( "-", ".") == self.计算器版本[5:]: self.网盘链接 = '' return self.网盘链接 = fileURL except Exception as error: self.网盘链接 = '' self.网盘报错 = 1 return
def 自动更新(self, fileURL): path = os.getcwd() + "/download" lzy = LanZouCloud() lzy.down_file_by_url(fileURL, '', path, callback=self.show_progress, downloaded_handler=self.after_downloaded)
def __init__(self, parent=None): super(GetMoreInfoWorker, self).__init__(parent) self._disk = LanZouCloud() self.emit_infos = None self._url = '' self._pwd = '' self._mutex = QMutex() self._is_work = False
def __init__(self, parent=None): super(Downloader, self).__init__(parent) self._stopped = True self._mutex = QMutex() self._disk = LanZouCloud() self.name = "" self.url = "" self.pwd = "" self.save_path = ""
def __init__(self): self.lzy = LanZouCloud() self.lzy._host_url = 'https://pan.lanzouo.com' self.lzy.available_domains = [ 'lanzouo.com', # 2021-09-15 鲁ICP备15001327号-8 'lanzouw.com', # 2021-09-02 鲁ICP备15001327号-7 'lanzoui.com', # 2020-06-09 鲁ICP备15001327号-6 'lanzoux.com', # 2020-06-09 鲁ICP备15001327号-5 ]
def __init__(self, parent=None): super(GetSharedInfo, self).__init__(parent) self._disk = LanZouCloud() self.share_url = "" self.pwd = "" self.is_file = "" self.is_folder = "" self._mutex = QMutex() self._is_work = False self._pat = r"(https?://(www\.)?lanzous.com/[bi][a-z0-9]+)[^0-9a-z]*([a-z0-9]+)?"
def run(self): path = os.getcwd() + "/download" try: lzy = LanZouCloud() lzy.down_file_by_url(self.fileURL, '', path, callback=self.show_progress, downloaded_handler=self.after_downloaded) except Exception as error: self.sinOut.emit(100)
def 网盘检查(self): lzy = LanZouCloud() fileURL = '' folder_info = lzy.get_folder_info_by_url('https://wws.lanzous.com/b01bfj76f') for file in folder_info.files: if file.name.startswith("DNF计算器"): self.云端版本 = file.name.replace(".zip",".exe") fileURL = file.url if file.name.replace("DNF计算器","").replace(".zip","").replace("-",".") == self.计算器版本[5:]: return '' return fileURL
def __init__(self, parent=None): super(Downloader, self).__init__(parent) self._stopped = True self._mutex = QMutex() self._disk = LanZouCloud() self.name = "" self.url = "" self.pwd = "" self.save_path = "" if os.name == 'nt': self._disk.set_rar_tool("./rar.exe") else: self._disk.set_rar_tool("/usr/bin/rar")
def login(self): lzy = LanZouCloud() if self.get_cookie(): cookie = {'ylogin': self.ylogin, 'phpdisk_info': self.phpdisk_info} if lzy.login_by_cookie(cookie) == LanZouCloud.SUCCESS: print('与云服务器连接成功...') return lzy else: print('你可能输入了错误的cookie地址') return False else: print(登录失败) return False
def init_variables(self): self._disk = LanZouCloud() self._config_file = "./config.pkl" self._folder_list = {} self._file_list = {} self._path_list = {} self._path_list_old = {} self._locs = {} self._parent_id = -1 # --> .. self._work_name = "" # share disk rec, not use now self._work_id = -1 # disk folder id self._old_work_id = self._work_id # 用于上传完成后判断是否需要更新disk界面 self.load_settings()
def download(self): start = time.time() # 下载文件名 # print(os.path.split(self.api_file_url)) # print(os.path.basename(self.api_file_url)) # 获取文件名 e6a59548da20bcf3.mp4?sign=05e6532286c697b10dbcac6761dcac83&t=5bee2e2d # basename = self.getFile(self.api_file_url) # 获取?号的位置 # pos = basename.find('?') # 获取文件名 # file_name = basename[0:pos] # print('='*30 +'正在下载:'+file_name + '='*30) # file_name = os.getcwd() + '/' + basename # print(file_name) temp_size = 0 # 已经下载文件大小 res = requests.get(self.api_file_url, headers=self.headers) base_name = self.get_file_name(self.api_file_url, res) file_name = os.getcwd() + "/" + base_name chunk_size = 1024 # 每次下载数据大小 # total_size = int(res.headers.get("Content-Length")) print(file_name) if res.status_code == 200: # print('[文件大小]:%0.2f MB' %(total_size / chunk_size /1024)) #换算单位并打印 # 保存下载文件 with open(file_name, 'wb') as f: for chunk in res.iter_content(chunk_size=chunk_size): if chunk: temp_size += len(chunk) f.write(chunk) f.flush() # ############花哨的下载进度部分############## # # done = int(50 * temp_size / total_size) # 调用标准输出刷新命令行,看到\r 回车符了吧 # 相当于把每一行重新刷新 print() # 避免上面\r 回车符,执行完后需要换行了,不然都在一行显示 end = time.time() # 结束时间 print('全部下载完成!用时%.2f 秒' % (end - start)) print("文件大小:%.2f MB" % (temp_size / 1024 / 1024)) lzy = LanZouCloud() cookie2 = eval(self.cookie) print(lzy.login_by_cookie(cookie2)) lzy.ignore_limits() code = lzy.upload_file(file_name, -1, callback=None, uploaded_handler=None) print("上传状态:") print(code) # self.upload2lanzous(file_name,file_name,self.cookie) else: print(res.status_code)
def init_variable(self): self._disk = LanZouCloud() self._config = "./config.pkl" self._folder_list = {} self._file_list = {} self._path_list = {} self._path_list_old = {} self._locs = {} self._parent_id = -1 # --> .. self._work_name = "" # share disk rec, not use now self._work_id = -1 # disk folder id self._old_work_id = self._work_id # 用于上传完成后判断是否需要更新disk界面 self.load_settings() if os.name == 'nt': self._disk.set_rar_tool("./rar.exe") else: self._disk.set_rar_tool("/usr/bin/rar") # 登录器 self.login_luncher = LoginLuncher(self._disk) self.login_luncher.code.connect(self.login_update_ui) # 下载器 self.download_manager = DownloadManager(self._disk) self.download_manager.downloaders_msg.connect(self.show_status) self.download_manager.download_mgr_msg.connect(self.show_status) self.download_manager.finished.connect( lambda: self.show_status("所有下载任务已完成!", 7000)) # 上传器,信号在登录更新界面设置 self.upload_dialog = UploadDialog() self.upload_dialog.new_infos.connect(self.call_upload) # 文件描述更新器 self.desc_fetcher = DescFetcher(self._disk) self.desc_fetcher.desc.connect(self.call_update_desc) # 设置 tab self.tabWidget.setCurrentIndex(0) self.tabWidget.removeTab(2) self.tabWidget.removeTab(1) self.disk_tab.setEnabled(False) self.rec_tab.setEnabled(False) # 状态栏 self._msg_label = QLabel() self._msg_label.setObjectName("msg_label") self.statusbar.addWidget(self._msg_label) # 重命名、修改简介与新建文件夹对话框 self.rename_dialog = RenameDialog() self.rename_dialog.out.connect(self.rename_set_desc_and_mkdir) # 菜单栏关于 self.about_dialog = AboutDialog() self.about_dialog.set_values(self.__version__)
def init_variable(self): self._disk = LanZouCloud() self._config = "./config.pkl" self._folder_list = {} self._file_list = {} self._path_list = {} self._path_list_old = {} self._locs = {} self._parent_id = -1 # --> .. self._work_name = "" # share disk rec, not use now self._work_id = -1 # disk folder id self._old_work_id = self._work_id # 用于上传完成后判断是否需要更新disk界面 self.download_threads = 3 # 同时三个下载任务 self.load_settings() if os.name == 'nt': self._disk.set_rar_tool("./rar.exe") else: self._disk.set_rar_tool("/usr/bin/rar")
def __init__(self, cookie): self.lzy = LanZouCloud() self.login_ok = self.lzy.login_by_cookie(cookie) == LanZouCloud.SUCCESS
class Uploader: lzy = LanZouCloud() name = '' file_list: ItemList = ItemList() dir_list: ItemList = ItemList() upload_dir = os.path.abspath(path.frozen_path('caches/zips')) cookies = {} upload_folder_id = -1 max_thread_count = 5 update_share_url = False set_share_url = False upload_use_copy = True upload_index = 0 upload_total = 0 need_catch_all = True need_cloud_clear = True def __init__(self, setting): self.name = setting['name'] self.cookies = setting['cookies'] self.set_share_url = setting['set_share_url'] self.update_share_url = setting['update_share_url'] def start(self): while 1: try: if not self.init(): self.log('初始化失败!') else: self.catch_all() self.cloud_clear() self.upload_all() except: import traceback self.log(traceback.format_exc()) time.sleep(1) def init(self): self.log('初始化...') self.clear() self.lzy.ignore_limits() if not self.login(): self.log('登陆错误') return False dirs = self.lzy.get_dir_list() self.upload_folder_id = dirs.find_by_name('psyduck').id return True def clear(self): self.log('清除临时文件...') def cloud_clear(self): if not self.need_cloud_clear: return self.log('整理云文件...') for d in self.file_list: for dd in self.file_list: if d != dd and d.name == dd.name: self.log(f'删除重复文件:{dd.name}') self.lzy.delete(dd.id, True) self.file_list.pop_by_id(dd.id) for d in self.dir_list: for dd in self.dir_list: if d != dd and d.name == dd.name: self.log(f'删除重复文件夹:{dd.name}') self.lzy.delete(dd.id, False) self.dir_list.pop_by_id(dd.id) self.log('云文件整理完毕') self.log(f'文件数量:{len(self.file_list)}') self.log(f'文件夹数量:{len(self.dir_list)}') self.log(f'总数量:{len(self.file_list) + len(self.dir_list)}') self.need_cloud_clear = False def login(self): self.log('登陆账号...') code = self.lzy.login_by_cookie(self.cookies) if code == LanZouCloud.SUCCESS: return True return False def log(self, _str): _time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f'{_time} > [{self.name}] {_str}') def catch_all(self): if not self.need_catch_all: return self.log('拉取数据中...') self.file_list = self.lzy.get_file_list(self.upload_folder_id) self.dir_list = self.lzy.get_dir_list(self.upload_folder_id) self.log(f'文件数量:{len(self.file_list)}') self.log(f'文件夹数量:{len(self.dir_list)}') self.log(f'总数量:{len(self.file_list) + len(self.dir_list)}') def upload_all(self): self.log('开始上传...') self.need_catch_all = False self.upload_index = 0 self.upload_total = len(os.listdir(self.upload_dir)) for fi in os.listdir(self.upload_dir): if not fi.endswith('.zip'): continue # self.log(f'进度:{cur}/{total}') _file_path = os.path.join(self.upload_dir, fi) self.upload_file(_file_path) self.upload_index += 1 self.log('全部上传完成!') def save_share_url(self, _id, file_id, is_file): if not self.set_share_url: return info = self.lzy.get_share_info(file_id, is_file) if info.code != LanZouCloud.SUCCESS: self.log(f'获取分享链接失败!({info.code})') return self.log( f'更新分享链接({self.upload_index}/{self.upload_total}):{_id} {info.url}' ) db.download_set_share_url(_id, info.url) def upload_file(self, file_path, uploading_callback=None): # id file_name = os.path.basename(file_path) _id = file_name[:-4] data = db.download_get(_id) # 数据校验 if data is None: self.log(f'数据库中未找到文件:{os.path.basename(file_path)}') return _id = data['id'] # 文件校验 if self.file_list.find_by_name(f'{_id}.zip') is not None: if self.update_share_url: self.save_share_url( _id, self.file_list.find_by_name(f'{_id}.zip').id, True) # self.log(f'已上传文件:{_id}') return if self.dir_list.find_by_name(f'{_id}.zip') is not None: _merge_dir = self.dir_list.find_by_name(f'{_id}.zip') _merge_files = self.lzy.get_file_list(_merge_dir.id) _temp_uploaded = False for _merge_item in _merge_files: if _merge_item.name.endswith('.txt'): _temp_uploaded = True if _temp_uploaded: if self.update_share_url: self.save_share_url(_id, _merge_dir.id, False) # self.log(f'已上传大文件:{_id}') return else: self.log(f'已损坏的大文件:{_id}') # 文件拷贝 temp_copy_dir = os.path.join(os.path.dirname(file_path), f'_temp_{_id}') if not os.path.exists(temp_copy_dir): os.mkdir(temp_copy_dir) _copy_path = os.path.join(temp_copy_dir, os.path.basename(file_path)) shutil.copy(file_path, _copy_path) def _uploading_callback(_f_name, total_size, now_size): # self.log(f'{_f_name}:上传中[{now_size}/{total_size}]...') if uploading_callback is not None: uploading_callback(now_size, total_size) def _uploaded_callback(fid, is_file): self.save_share_url(_id, fid, is_file) self.lzy.set_passwd(fid, '', is_file) desc = f'{data["info"]["title"]}\n{data["info"]["description"]}' self.lzy.set_desc(fid, desc, is_file) # 文件上传 self.log( f'开始上传({self.upload_index}/{self.upload_total}):{data["id"]} {data["info"]["size"]}' ) code = self.lzy.upload_file(_copy_path, self.upload_folder_id, callback=_uploading_callback, uploaded_handler=_uploaded_callback) if code != LanZouCloud.SUCCESS: self.log(f'上传失败({code}):{_id}') else: self.log(f'上传完成:{_id}') # 文件清理 if os.path.exists(temp_copy_dir): self.log(f'清理临时文件夹:{os.path.basename(temp_copy_dir)}') shutil.rmtree(temp_copy_dir) # catch all self.need_catch_all = True return code == LanZouCloud.SUCCESS def dispose(self): pass
def __init__(self): self.lzy = LanZouCloud() self.login_ok = False
def test_is_file_url(): # 确保每个备案的域名都能正确判定 for domain in LanZouCloud().available_domains: assert is_file_url(f"https://pan.{domain}/i1234abcd")
def __init__(self, cookie): self.lzy = LanZouCloud() self.login_ok = self.lzy.login_by_cookie(cookie) == LanZouCloud.SUCCESS if self.login_ok: self._folder_dnf_calc_code = self.lzy.get_folder_info_by_id(self._folder_id_dnf_calc_code).folder self._folder_dnf_calc_publish = self.lzy.get_folder_info_by_id(self._folder_id_dnf_calc_publish).folder
import os import sys from lanzou.api import LanZouCloud if __name__ == '__main__': lzy = LanZouCloud() cookie = {'ylogin': os.getenv('LZ_YLOGIN'), 'phpdisk_info': os.getenv('LZ_PHPDISK_INFO')} lzy.login_by_cookie(cookie) bilibili_hd_dir_id = lzy.get_dir_list().find_by_name('BilibiliHD2').id bilibili_hd_v01_dir_id = lzy.get_dir_list(bilibili_hd_dir_id).find_by_name('0.1').id def handler(fid, is_file): lzy.set_passwd(fid, '233', is_file) code = lzy.upload_file(sys.argv[1], bilibili_hd_v01_dir_id, uploaded_handler=handler) if code == 0: print('success') else: print(f'::warning :: upload to lanzou fail with code ${code}') exit(code)