作者: James

  • 将闲置源码在无错源码发布获取收益

    将闲置源码在无错源码发布获取收益

    无错源码具有高成交性。

    如果你也有源码想变卖获取收益,可以提交到无错源码,并设定好价格,一旦用户付款,款项的80%将会返还给你。

    所有的源码请严格测试,务必保证无错可运行。

  • 一键设置IIS只允许cloudflare访问

    使用IIS套上cloudflare后,很多人不知道禁止非cloudflare ip访问,今天给个一键代码,在ps里边执行即可。

    # Cloudflare IP 地址列表
    $cloudflareIPs = @(
        "173.245.48.0/20",
        "103.21.244.0/22",
        "103.22.200.0/22",
        "103.31.4.0/22",
        "141.101.64.0/18",
        "108.162.192.0/18",
        "190.93.240.0/20",
        "188.114.96.0/20",
        "197.234.240.0/22",
        "198.41.128.0/17",
        "162.158.0.0/15",
        "104.16.0.0/13",
        "104.24.0.0/14",
        "172.64.0.0/13",
        "131.0.72.0/22"
    )
    
    # 获取所有 IIS 网站的配置
    $sites = Get-Website
    
    # 循环遍历所有 IIS 网站并添加 Cloudflare IP 地址到允许列表
    foreach ($site in $sites) {
        $siteName = $site.Name
        $siteConfig = Get-WebConfiguration -PSPath "IIS:\Sites\$siteName"
        
        foreach ($ipRange in $cloudflareIPs) {
            $ruleName = "AllowCloudflareIP_$([System.Guid]::NewGuid())"
            $addRuleScript = @"
    ipconfig /flushdns
    New-WebConfigurationProperty -PSPath 'IIS:\Sites\$siteName' -Filter "system.webServer/security/ipSecurity" -Name "." -Value @{
        "ipAddress" = "$ipRange";
        "subnetMask" = "255.255.255.255";
        "allowed" = $true;
        "domainName" = '';
        "byPass" = $false;
        "matchOnly" = $true;
        "negate" = $false;
        "ruleName" = "$ruleName";
        "enableReverseDns" = $false;
    }
    "@
            Invoke-Expression $addRuleScript
        }
        
        # 应用更改
        $siteConfig | Set-WebConfiguration -Verbose
    }
    
  • Elementor Pro v3.15.1 + Elementor v3.15.1 已激活汉化版 含PRO模板

    Elementor 可视化页面编辑器简介

    任何人都可以使用其实时前端编辑器来构建令人惊叹的网站,无需任何编码知识。插件还提供一些预制的精美模板和块,只需单击几下就可以从Elementor库中导入它们。

    它与诸如MailChimp,ConvertKit,Zapier,GetResponse等流行的营销工具的集成使您的营销更加容易。

    总体而言,Elementor Pro 是WordPress最先进,功能最强大的页面生成器,活跃安装量超过500万。

    越来越的开发者或网页设计者使用 Elementor Pro。

    Elementor Pro 的核心功能

    • 拖放编辑器
    • 前端编辑器
    • 实时预览
    • 对站点性能无有害影响
    • 允许导入和导出模板
    • 支持35多种类型的预建模板
    • 多种营销工具和插件支持
    • 多种排版选项
    • 可以放置内联元素
    • 字体真棒图标支持
    • 允许建立移动响应页面
    • 着陆页生成器
    • 弹出窗口生成器
    • 评级系统的架构标记支持
    • 拖放主题构建器
    • 允许创建自定义帖子模板
    • 可以制作广告素材404并搜索页面
    • 滑块支持
    • 第三方小部件支持
    • 轻量级插件
    • 与流行的SEO插件集成– Yoast SEO
    • 集成AI功能

    Elementor Pro v3.15.1 更新日志

    • 修复:改进了目录小部件中的代码安全实施
    • 新功能:引入分类过滤器小部件 – 使访问者能够根据分类无缝过滤循环网格中的列表
    • 调整:在轮播和循环轮播小部件中添加了“偏移边”功能
    • 调整:修改了编辑器顶栏功能中“发布”按钮的大小
    • 调整:改进了 Ajax 权限功能,以实现更好的安全执行
    • 调整:在轮播和循环轮播小部件中添加分页自定义位置选项
    • 调整:在轮播和循环轮播小部件中添加了导航自定义位置的选项
    • 调整:为轮播和循环轮播小部件中的导航添加了额外的样式选项
    • 调整:在 WordPress 管理中的短代码列中添加标签
    • 调整:统一菜单小部件中“stretch”和“center”按钮的外观
    • 调整:统一“我的帐户”小部件中“拉伸”和“居中”按钮的外观
    • 调整:改进了视频播放列表小部件中的面板 UI
    • 调整:在 Elementor 编辑器中实现 CSS 逻辑属性
    • 调整:在价目表小部件中添加了“标题 HTML 标签”和“描述 HTML 标签”
    • 调整:在幻灯片小部件中添加了“标题 HTML 标签”和“描述 HTML 标签”
    • 调整:在翻转框小部件中添加了“标题 HTML 标签”和“描述 HTML 标签”
    • 调整:在号召性用语小部件中添加了“描述 HTML 标签”

    Elementor v3.15.2 更新日志

    • 修复:热门应用程序通知未按预期在 RTL 网站中显示
    • 修复:热门应用程序通知中的拼写错误
    • 修复:在 Accordion 小部件中使用 Safari 浏览器时出现多余的手风琴图标
    • 修复:方案代码弃用后,错误通知出现在前面
    • 新增功能:推出 Accordion 小部件 – 通过嵌套功能和布局灵活性释放您的设计创造力
    • 新功能:Elementor AI 图像增强功能 – 无缝删除和替换背景
    • 新增功能:应用程序页面简介 – 探索一系列专为增强 Elementor 支持的网站而定制的工具
    • 调整:在 Lottie 小部件的“悬停区域”下拉列表中添加了“容器”选项
    • 调整:将多个 URL 从 http: 更新为 https,以增强合规性
    • 调整:在作者框小部件中为 Gravatar 图像添加了图像大小控制
    • 调整:删除已弃用的方案区域
    • 调整:辅助功能改进功能合并到版本中
    • 调整:从 SASS 文件中删除纵横比
    • 调整:添加了中继器控制的键盘辅助功能
    • 调整:统一选项卡小部件中拉伸按钮和中心按钮的外观
    • 调整:将 eicons 库更新至 v5.21.0
    • 调整:将图标框小部件中的位置控件分组在一起
    • 调整:将图像框小部件中的位置控件分组在一起
    • 调整:为灯箱控件添加了额外的单元
    • 调整:在 Elementor App 中实现 CSS 逻辑属性
    • 调整:在 Elementor 编辑器中实现 CSS 逻辑属性
    • 调整:通过实现 CSS 逻辑属性来增强文本对齐属性
    • 调整:改进了视频小部件中的面板 UI
    • 调整:替换显示百分比选择控件以在进度栏小部件中切换控制
    • 调整:将“标题 HTML 标签”添加到进度栏小部件的标题中
    • 调整:更新了推荐的 PHP 版本
    • 调整:添加了对编辑器控件的classes_dictionary支持
    • 调整:扩展 AI 调整大小选项,将分辨率限制提升至 2048 像素
    • 调整:登陆页面功能降级为测试版状态
    • 调整:将“全局样式预览”功能提升至测试版状态
    • 修复:当附加断点功能处于活动状态时,部分模板的响应设置不会完全保存
    • 修复:在同一页面上使用多个视频小部件时,视频灯箱的宽高比不正确
    • 修复:禁用弹出覆盖不会在编辑器中禁用它
  • WordPress 6.3+ 火车头/高铁采集器发布插件 免登录发布接口

    WordPress 6.3+ 火车头/高铁采集器发布插件 免登录发布接口

    最近发现博客突然不更新了,有点诧异,难道一直用的采集器接口有问题了。其实自动更新到WordPress 6.3已经有一段时间了,今天才有时间来看下是什么原因。

    直接接口测试,提示发布成功。。。。。 但是后台看不到,无语子。

    打开代码调试下看看,发现了一个Fatal Error,有个php8开始弃用的函数

    get_magic_quotes_gpc 

    直接把这个删除,自己采集其实判断这个没有太大用处,是防注入的。

    再跑下,还是不行,继续调试代码。

    居然看到一段代码是有Bug的,不知道是哪个新手实习生写的代码了。

    找到错误修改起来自然就简单了。

    代码放到附件了,有需要的下载吧。

  • Nginx实现计算目录的父目录

    Nginx实现计算目录的父目录

    小说站的rewrite经常会遇到这样的一个问题,实际保存路径是

    /file/article/html/1/1245/32343.html

    这个时候想要rewrite成

    /book/1245/32343.html


    这样的路径时,在nginx里边不会实现,只能通过php来实现,但使用php实现会大量耗费服务器的资源。

    这里教大家一个nginx规则来实现这样的伪静态

    http {
        # ... 其他 http 配置 ...
    
        map $1 $subaid {
            ~^(\d+)\d{3}$   $1;
            default         0;
        }
    
        server {
            listen 80;
            server_name yourdomain.com;
    
            # ... 其他配置 ...
    
            location /cover/ {
                if ($request_uri ~* ^/cover/(\d+)\.jpg$) {
                    rewrite ^/cover/(\d+)\.jpg$ /files/article/image/$subaid/$1/$1s.jpg last;
                }
            }
    
            # ... 其他配置 ...
        }
    
        # ... 其他 http 配置 ...
    }

    我这里使用的是Cover封面来做的示范,主要就是添加一个map做对应关系。相信通过这个示范你也学废了吧。

  • 小白闯江湖之常用一键脚本

    小白闯江湖之常用一键脚本

    网络测试类脚本
    =================
    三网测速
    —————–

    bash <(curl -Lso- https://www.infski.com/files/superspeed.sh)


    用途:三网多线程测速

    Hyperspeed
    —————–

    bash <(curl -Lso- https://bench.im/hyperspeed)


    用途:测试三网单线程测速,比方说油管速度就是单线程

    硬件测试类脚本
    =================

    geekbench和yabs
    —————–
    geekbench5


    curl -sL yabs.sh|bash -s -- -if -fdi5


    yabs


    curl -sL yabs.sh | bash

    用途:geekbench5只测试小鸡的cpu的geekbench5的跑分,去掉了网络和硬盘测试
    现在的yabs默认是6,yabs同时还提供小鸡的硬盘和网络测试,具体详细的参数看作者github的readme

    bench.sh
    —————–


    wget -qO- bench.sh | bash


    用途:秋水大佬的脚本,可以显示linux小鸡的详细信息,以及硬盘和网络的测试
    如果要测试小鸡国外的速度的话,用这个

    硬盘测试
    —————–


    dd bs=64k count=4k if=/dev/zero of=test oflag=dsync


    用途:用dd命令测试小鸡的硬盘性能

    超售检测
    —————–

    curl https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh | bash
    wget --no-check-certificate -O memoryCheck.sh https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh && chmod +x memoryCheck.sh && bash memoryCheck.sh


    用途:检测小鸡是否超售,不过其实自己买小鸡那价格超没超售,都应该心知肚明了
    有钱还是上杜甫

    ip检测
    =================

    流媒体检测
    —————–


    bash <(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)


    用途:测试小鸡ip的流媒体以及chatgpt解锁,同时这个脚本在安卓的temux,ios上ish,mac的终端上也是能用的,可以用来判断机场的节点是否支持解锁
    windows的话可以用linux子系统

    四网回程测试
    —————–

    wget -O jcnf.sh https://raw.githubusercontent.com/Netflixxp/jcnfbesttrace/main/jcnf.sh && chmod +x jcnf.sh && clear &&./jcnf.sh

    用途:测试小鸡的四网回程路由,三大运营商和教育网的路由

    综合脚本
    =================

    融合怪

    bash <(wget -qO- --no-check-certificate https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh)

    lemonbench

    wget -qO- https://raw.githubusercontent.com/LemonBench/LemonBench/main/LemonBench.sh | bash -s -- --fast

    用途:上面两个都是综合测试小鸡的各项性能,怎么用看作者的readme

    魔法类
    =================

    xui
    —————–

    bash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh)

    v2ray-agent
    —————–

    wget -P /root -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh" && chmod 700 /root/install.sh && /root/install.sh

    warp
    —————–
    wgcf

    wget -N https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh && bash menu.sh [option] [lisence]

    Warp-go

    wget -N https://raw.githubusercontent.com/fscarmen/warp/main/warp-go.sh && bash warp-go.sh

  • 大前端DUX 8.2 全功能开心版无错源码版|DUX主题破解版

    大前端DUX 8.2 全功能开心版无错源码版|DUX主题破解版

    主题亮点

    DUX主题支持专题功能、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、自动缩略图等等。

    DUX8.2开心版

    • 解除了域名限制无需授权,全功能无错源码开心版!

    DUX主题8.0来了,有史以来最强大的主题更新。

    DUX 8.0 带来了很多全新的展示和功能,这得益于我们对DUX主题做了一次大手术。42+的主题更新,毫不客气的说,一个全新等于10项新增。作为themebetter的C位一哥,DUX主题一直是我们重点关注和更新的对象,8.0是一个新的开始,未来更会有更多可能。


    超级更新:全站UI重做,前端加载速度提升2倍

    全站UI配色几乎重做,在保留DUX的基调之上强大的优化了前端加载效率,去除了原有的 Bootstrap框架、Fontawesome字体库、删除了十分鸡肋的JS文件托管、压缩了前端输出的CSS和JS代码,在极大程度上让主题更加快速的呈现在用户面前。与之前版本的DUX主题对比,前端加载速度提升至少2倍有余。

    一键换色功能重写,全新提供的14种优质配色可选,更高质量更高展现的配色方案,让网站更高格调。


    超级更新:日/夜间模式 自动/手动切换

    夜间模式的呼声很高,但此前的DUX主题架构并不能很好的提供这一功能,如今UI重做,CSS代码几乎重写,也就有了即点即换的日/夜间模式,毫无卡顿,瞬间切换。目前夜间模式时间为晚7点至早7点,后面更新会提供让站长自定义夜间时间。


    DUX主题8.0版本更新内容:

    • 全新:全站UI重做,前端加载速度提升2倍
    • 全新:全站图标重构,各种图标更加直观、细节更好
    • 全新:一键换色功能重写,全新提供的14种优质配色可选
    • 新增:夜间模式,包含手动/自动切换
    • 新增:横幅缩略图
    • 新增:文章页长文自动隐藏,点击阅读余下全文展开,支持电脑端和手机端分别设置
    • 新增:文章页 meta og 代码,让分享更丰富
    • 新增:手机端主列表文字模式时显示文章摘要
    • 新增:文章页文章发布时间可选不显示
    • 新增:首页轮换图上显示标题
    • 新增:全站底部推广区描述文字,让版面更丰富
    • 新增:网址导航可以显示图片
    • 新增:网址导航页面模版提交网址的功能
    • 新增:主列表文章小部件显示标签的开关
    • 新增:搜索小工具
    • 调整:手机端左侧菜单为白色底,并重新设计菜单的动画效果
    • 调整:网址导航页面模版锚点为链接分类的别名
    • 调整:全站主列表中置顶文章内不显示广告位
    • 调整:友情链接页面的设计
    • 调整:筛选分类的“全部”改为“不限”
    • 调整:文章页打赏默认显示文字
    • 优化:网址导航页面模版始终不显示评论跳转功能
    • 优化:手机端LOGO高度上限为24px
    • 优化:手机端首页焦点图的展示效果更加协调
    • 优化:与插件 WooCommerce 的兼容性
    • 优化:手机端右上角登录入口兼容TB-Member插件
    • 优化:分类和专题列表的文章置顶显示“置顶”标识
    • 优化:缩略图显示尺寸比例统一且不变形
    • 优化:搜索表单的可重复使用性
    • 优化:菜单的代码输出更简洁,最大程度减少无用class的出现
    • 修复:多个轮换图出现在同一个页面时的相互影响问题
    • 修复:图片页显示面包屑导航错乱的问题
    • 修复:搜索页输入框可能发生的显示错乱
    • 修复:主列表广告位可能在置顶文章中显示的问题
    • 修复:快讯列表图片变形的问题
    • 修复:专题开启置顶文章后可能发生的文章调取混乱问题
    • 删除:主题设置中的图片圆角选项,默认已支持
    • 删除:bootstrap框架的css和js代码,提升主题加载速度
    • 删除:fontawesome字体图标库和相关css代码,提升主题加载速度
    • 删除:JS文件托管功能,因已无用
    • 取消:评论内容高度限制
    • 其他各种细节优化调整
  • Python批量反编译脚本 破解源码脚本 PYC逆向

    Python批量反编译脚本 破解源码脚本 PYC逆向

    Python程序编译后是pyc文件,使用本文件放于任意目录下,修改directory值,然后使用python运行即可批量破解反编译pyc文件 。

    import uncompyle6
    import os
    
    def decompile_pyc_files(directory):
        for root, dirs, files in os.walk(directory):
            for file in files:
                if file.endswith('.pyc'):
                    pyc_file = os.path.join(root, file)
                    py_file = os.path.splitext(pyc_file)[0] + '.py'  # 使用同名的.py文件名
    
                    # 反编译.pyc文件为.py文件
                    with open(py_file, 'w', encoding='utf-8') as f:  # 指定编码方式为utf-8
                        uncompyle6.decompile_file(pyc_file, f)
    
                    print(f"Decompiled: {pyc_file} -> {py_file}")
    
    # 指定包含.pyc文件的目录
    directory = r"D:\source\"
    
    # 执行批量反编译
    decompile_pyc_files(directory)
    
  • 94采集器破解线程限制 – 解线程源码

    __init__.py

    新建文件 ,内容如下

    import os
    from flask import Flask
    from config import Config
    from datetime import timedelta
    from app.logs import log
    from app.helper import filehelper, taskhelper
    from app.helper.schehelper import scheduler
    
    
    def app():
        try:
            path = os.getcwd()
            tpath = '{0}//templates'.format(path.replace("\\", "//"))
            spath = '{0}//static'.format(path.replace("\\", "//"))
            appflask = Flask(__name__)  # , template_folder=tpath, static_folder=spath
            appflask.config.from_object(Config())
            # 自动重载模板文件
            appflask.jinja_env.auto_reload = True
            appflask.config['TEMPLATES_AUTO_RELOAD'] = True
            # 设置静态文件缓存过期时间
            appflask.config['SEND_FILE_MAX_AGE_DEFAULT'] = timedelta(seconds=1)
            appflask.config['JSON_AS_ASCII'] = False  # 这个配置可以确保http请求返回的json数据中正常显示中文
            读取基础配置()
            #scheduler.init_app(appflask)
            scheduler.start()
            return appflask
        except Exception as e:
            msg = 'app-{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                        e.__traceback__.tb_lineno)
            log.错误日志(msg)
    
    def 读取基础配置():
        try:
            系统设置 = filehelper.读INI("系统设置.ini", "系统设置", "系统设置")
            Config.系统设置 = eval(系统设置)
            大类设置 = filehelper.读INI("大类设置.ini", "大类设置", "大类设置")
            Config.一级分类 = 大类设置.strip('\n').split('\n')
            小类设置 = filehelper.读INI("小类设置.ini", "小类设置", "小类设置")
            Config.二级分类 = 小类设置.strip('\n').split('\n')
            频道设置 = filehelper.读INI("频道设置.ini", "频道设置", "频道设置")
            Config.频道 = 频道设置.strip('\n').split('\n')
            连载设置 = filehelper.读INI("连载设置.ini", "连载设置", "连载设置")
            Config.连载 = 连载设置.strip('\n').split('\n')
            标识设置 = filehelper.读INI("标识设置.ini", "标识设置", "标识设置")
            Config.标识 = 标识设置.strip('\n').split('\n')
            自定内容 = filehelper.读INI("自定内容.ini", "自定内容", "自定内容")
            Config.自定内容 = 自定内容
            UA设置 = filehelper.读INI("UA设置.ini", "UA设置", "UA设置")
            Config.UA = UA设置.split('\n')
            代理设置 = filehelper.读INI("代理设置.ini", "代理设置", "代理设置")
            Config.代理 = 代理设置.strip('\n').split('\n')
            邮件设置 = filehelper.读INI("邮件设置.ini", "邮件设置", "邮件设置")
            Config.邮件 = eval(邮件设置)
            规则列表 = filehelper.读取任务列表()
            for item in 规则列表:
                if item.startswith('任务'):
                    任务ID = item.replace('任务', '').replace('.ini', '')
                    任务字符串 = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'taskinfo')
                    任务信息 = eval(任务字符串)
                    taskhelper.添加任务(任务信息)
        except Exception as e:
            msg = '读取基础配置-{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                        e.__traceback__.tb_lineno)
            log.错误日志(msg)
    

    新建 task.py文件,内容如下

    # -*- coding: UTF-8 -*-
    import json
    import base64
    import datetime
    from config import Config
    from app.helper import filehelper, commonhelper, taskhelper
    from flask import request, render_template
    
    
    def 查询任务列表():
        try:
            规则列表 = filehelper.读取任务列表()
            返回值 = []
            for item in 规则列表:
                if item.startswith('任务'):
                    任务ID = item.replace('任务', '').replace('.ini', '')
                    规则ID = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'taskname')
                    任务名称 = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'taskname')
                    任务类型 = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'taskType')
                    任务状态 = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'taskstatus')
                    任务时间间隔 = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'tasktime')
                    采集内容 = commonhelper.获取当前采集信息(任务ID)
                    最后运行时间 = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'gxsj')
                    返回值.append({
                        "任务ID": 任务ID,
                        "规则ID": 规则ID,
                        "任务名称": 任务名称,
                        "任务类型": 任务类型,
                        "任务状态": 任务状态,
                        "任务时间间隔": 任务时间间隔,
                        "采集内容": 采集内容,
                        "最后运行时间": 最后运行时间
                    })
            return '{"code":0,"msg":"", "count":' + str(len(返回值)) + ', "data": ' + json.dumps(返回值) + '}'
        except Exception as e:
            return '{"code":0,"msg":"' + e + '","count":0,"data":[]}'
    
    
    def 添加任务():
        try:
            taskid = str(request.form['taskid'])
            ruleid = str(request.form['ruleid'])
            taskname = str(request.form['taskname'])
            tasktime = str(request.form['tasktime'])
            taksmode = str(request.form['taksmode'])
            taskType = str(request.form['taskType'])
            bookid = str(request.form['bookid'])
            startid = str(request.form['startid'])
            endid = str(request.form['endid'])
            startpage = str(request.form['startpage'])
            endpage = str(request.form['endpage'])
            pagelist = str(request.form['pagelist'])
            isimg = str(request.form['isimg'])
            isinfo = str(request.form['isinfo'])
            ismark = str(request.form['ismark'])
            sizerestoration = str(request.form['sizerestoration'])
            colletime = str(request.form['colletime'])
            retrynum = str(request.form['retrynum'])
            retrytime = str(request.form['retrytime'])
            useragent = str(request.form['useragent'])
            contrastmethod = str(request.form['contrastmethod'])
            an = str(request.form['an'])
            cn = str(request.form['cn'])
            yj = str(request.form['yj'])
            dl = str(request.form['dl'])
            dlinfo = str(request.form['dlinfo'])
            cookies = str(request.form['cookies'])
            bcjbt = str(request.form['bcjbt'])
            minichapter = str(request.form['minichapter'])
            bookurl = str(request.form['bookurl'])
            booklisturl = str(request.form['booklisturl'])
            maxchapter = str(request.form['maxchapter'])
            iscf5 = str(request.form['iscf5'])
            是否添加 = False
            if (taskid == None) | (taskid == 'None') | (taskid == ''):
                taskid = datetime.datetime.now().strftime("%Y%m%d%H%m%f")
                是否添加 = True
            任务信息 = {
                "taskid": taskid,
                "ruleid": ruleid,
                "taskname": taskname,
                "tasktime": tasktime,
                "taksmode": taksmode,
                "taskType": taskType,
                "bookid": bookid,
                "bookurl": bookurl,
                "startid": startid,
                "endid": endid,
                "booklisturl": booklisturl,
                "startpage": startpage,
                "endpage": endpage,
                "pagelist": pagelist,
                "isimg": isimg,
                "isinfo": isinfo,
                "ismark": ismark,
                "sizerestoration": sizerestoration,
                "colletime": colletime,
                "retrynum": retrynum,
                "retrytime": retrytime,
                "useragent": useragent,
                "contrastmethod": contrastmethod,
                "an": an,
                "cn": cn,
                "yj": yj,
                "dl": dl,
                "dlinfo": dlinfo,
                "cookies": cookies,
                "bcjbt": bcjbt,
                "minichapter": minichapter,
                "maxchapter": maxchapter,
                "iscf5":iscf5
            }
            if filehelper.写入任务INI(taskid, taskid, 任务信息):
                if 是否添加:
                    taskhelper.添加任务(任务信息)
                else:
                    taskhelper.修改任务(任务信息)
                    taskhelper.获取任务信息(taskid)
                return '保存成功!'
            else:
                return '保存失败!'
        except Exception as e:
            msg = '{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                 e.__traceback__.tb_lineno)
            return msg
    
    
    def 查询任务信息():
        try:
            类型 = str(request.args.get('type'))
            任务信息 = {}
            规则信息 = []
            if 类型 == 'add':
                pass
            elif 类型 == 'up':
                任务ID = str(request.args.get('taskid'))
                任务字符串 = filehelper.读INI('任务{0}.ini'.format(任务ID), 任务ID, 'taskinfo')
                任务信息 = eval(任务字符串)
            规则列表 = filehelper.读取规则列表()
            for item in 规则列表:
                规则ID = filehelper.读INI('规则.ini', item, 'ruleid')
                规则名称 = filehelper.读INI('规则.ini', item, 'rulename')
                规则信息.append({"v": 规则ID, "t": 规则名称})
            return render_template("task.html", info=任务信息, 规则=规则信息, UserAgent=Config.UA)
        except Exception as e:
            msg = '{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                 e.__traceback__.tb_lineno)
            return render_template("msg.html", info=msg)
    
    
    def 启动任务():
        try:
            任务ID = str(request.args.get('taskid'))
            if filehelper.修改INI('任务{0}.ini'.format(任务ID), 任务ID, "taskstatus", "开启"):
                return '启动成功!'
            else:
                return '启动失败!'
        except Exception as e:
            msg = '{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                 e.__traceback__.tb_lineno)
            return msg
    
    
    def 暂停任务():
        try:
            任务ID = str(request.args.get('taskid'))
            if filehelper.修改INI('任务{0}.ini'.format(任务ID), 任务ID, "taskstatus", "暂停"):
                return '暂停成功!'
            else:
                return '暂停失败!'
        except Exception as e:
            msg = '{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                 e.__traceback__.tb_lineno)
            return msg
    
    
    def 删除任务信息():
        try:
            任务ID = str(request.args.get('taskid'))
            if filehelper.删除任务INI(任务ID):
                taskhelper.删除任务(任务ID)
                return '删除成功!'
            else:
                return '删除失败!'
        except Exception as e:
            msg = '{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                 e.__traceback__.tb_lineno)
            return msg
    
    
    def 批量删除任务信息():
        try:
            任务ID = str(request.form['taskId'])
            任务列表 = 任务ID.split('|')
            成功数量 = 0
            失败数量 = 0
            for item in 任务列表:
                if filehelper.删除任务INI(任务ID):
                    taskhelper.删除任务(任务ID)
                    成功数量 = 成功数量 + 1
                else:
                    失败数量 = 失败数量 + 1
            return '成功删除{0}条,失败{1}条!'.format(成功数量, 失败数量)
        except Exception as e:
            msg = '{0},文件地址:{1},错误行号:{2}'.format(e, e.__traceback__.tb_frame.f_globals["__file__"],
                                                 e.__traceback__.tb_lineno)
            return msg
    

    task.py文件放入app/view文件夹

    原来对应的pyc文件可以删除。

    替换完成后重启应用服务器即可。

  • 宝塔8.01离线版 本地版 全功能版 下载

    基于https://github.com/flucont/btcloud/releases/tag/1.9

    只有运行环境本地化,收费插件本地化自己弄,而且只有编译安装本地化,极速安装本地化也没弄,自己去public/install/1和public/install/4弄

    public/install/0和public/install/4 已经好了

    收费插件怎么下载直接看https://github.com/flucont/btcloud/releases/tag/1.9,只能提示到这里了,然后自己本地化

    ,解压到public ,全部替换public文件下的文件,再替换966333.xyz为你自己的域名,包括压缩包panel6.zip。

    Centos安装脚本:yum install -y wget && wget -O install.sh https://域名/install/install_6.0.sh && sh install.sh

    Ubuntu/Deepin安装脚本 wget -O install.sh https://域名/install/install-ubuntu_6.0.sh && sudo bash install.sh

    万能安装脚本 if [ -f /usr/bin/curl ];then curl -sSO https://域名/install/install_panel.sh;else wget -O install_panel.sh https://域名/install/install_panel.sh;fi;bash install_panel.sh