示例#1
0
 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
示例#2
0
 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)
示例#3
0
 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
示例#4
0
 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 = ""
示例#5
0
 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
     ]
示例#6
0
 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]+)?"
示例#7
0
 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)
示例#8
0
 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
示例#9
0
 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")
示例#10
0
 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
示例#11
0
 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()
示例#12
0
 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)
示例#13
0
 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__)
示例#14
0
 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
示例#16
0
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
示例#17
0
 def __init__(self):
     self.lzy = LanZouCloud()
     self.login_ok = False
示例#18
0
def test_is_file_url():
    # 确保每个备案的域名都能正确判定
    for domain in LanZouCloud().available_domains:
        assert is_file_url(f"https://pan.{domain}/i1234abcd")
示例#19
0
 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)