作者: James

  • 全自动购买绿帽子云特价机器 也可以自己改下抢其它WHMCS的机器

    全自动购买绿帽子云特价机器 也可以自己改下抢其它WHMCS的机器

    更新了使用空格来选择checkbox,避免一些报错。

    必要第三方库有 requests 和 undetected_chromedriver
    直接pip install x 安装,不会百度肯定有.
    再者!!!,抢购的时候可能网站很卡响应时间太长(会报错?)所以建议把timesleep时间拉长,以免网页没加载完成点击事件会出错。

    理论上Whcms的都可以买的,只要把两个URL,优惠码和最后付款界面的点击改一下,即可.前提不要验证码

    建议放在国外小鸡上网速更快更好抢,linux,windows都可以。

    使用方法直接保存代码为file.py,然后命令行python file.py 就可以了。

    记得修改用户名,密码为自己的。

    关于产品ID的获取

    在产品 订购 上面右键检查元素,

    <a href="/billing/store/10th-birthday-sale/1010-birthday-jp" class="btn btn-success btn-sm btn-order-now" id="product75-order-button">
    <i class="fas fa-shopping-cart"></i>
    Order Now
    </a>

    id=”product75-order-button” 这个 product 后面的数字就是 pid

    import undetected_chromedriver as uc
    import requests
    import time
    import random
    
    from selenium.webdriver import Keys
    from selenium.webdriver.common.by import By
    
    
    def buy_service():
        # 这里是生成随机Hostname,你可以改为你的Hostname
        hostname = str(random.randint(10000, 99999)) + '.baidu.com'
        # 这里是生成随机密码,你可以改为你的密码
        rootpw = ''.join(random.sample('zyxwvutsrqponmlkjihgfedcba!', 4)) + str(random.randint(100000, 999999))
        print('Your root password:' + rootpw)
        # 购买商品的链接 特价机的gid=60,演示中设置gid=25
        url = 'https://www.greencloudvps.com/cart.php?a=add&pid=648'
        uc_options = uc.ChromeOptions()
        # 是否显示界面,linux下面这一行False改为True
        uc_options.headless = False
        # Then tried this option
        driver = uc.Chrome(options=uc_options)
    
        driver.set_window_size(700, 900)  # 设置浏览器大小
        # 打开网页
        driver.get(url)
        driver.find_element(by=By.XPATH, value='//input[@name="hostname"]').send_keys(hostname)
        driver.find_element(by=By.XPATH, value='//input[@name="rootpw"]').send_keys(rootpw)
        driver.find_element(by=By.XPATH, value='//input[@name="ns1prefix"]').send_keys('www')
        driver.find_element(by=By.XPATH, value='//input[@name="ns2prefix"]').send_keys('www')
        driver.find_element(by=By.XPATH, value='//*[@id="btnCompleteProductConfig"]').click()
        time.sleep(2)
        try_time = 1
        # 有优惠码的时候使用
        # for try_time in range(1, 7):
        #     try:
        #         time.sleep(0.24)
        #         driver.find_element(by=By.XPATH, value='//input[@name="promocode"]').send_keys('')
        #     except Exception:
        #         try_time = try_time + 1
        #         pass
        #         if try_time == 6:
        #             print("得你手动了骚年!")
        #             break
        #     else:
        #         break
        # driver.find_element(by=By.XPATH, value='/html/body/section[2]/div/div/div/div[1]/div/div/div[3]/div[2]/div[1]/div/div/div[1]/form/button').click()
        # time.sleep(0.7)
        driver.find_element(by=By.XPATH, value='//*[@id = "checkout"]').click()
    
        time.sleep(2)
        driver.find_element(by=By.XPATH, value='//button[@id="btnAlreadyRegistered"]').click()
    
        # 购买者邮箱
        time.sleep(2)
        driver.find_element(by=By.XPATH, value='//input[@name="loginemail"]').send_keys("username@qq.com")
        # 账号密码
        driver.find_element(by=By.XPATH, value='//input[@name="loginpassword"]').send_keys("passwd")
        # 最后这一行是付款界面的"点击结算".如果你想要测试脚本是否正常运行,可以先把这一句去掉,以免购买了给你发账单(虽然可以不付款)+
    
        driver.find_element(by=By.XPATH, value='//input[@value="payssionalipaycn"]').send_keys(Keys.SPACE)
        driver.find_element(by=By.XPATH, value='//input[@id="accepttos"]').send_keys(Keys.SPACE)
        time.sleep(2)
        driver.find_element(by=By.XPATH, value='//button[@id="btnCompleteOrder"]').click()
        print("抢购成功!")
    
    
    if __name__ == '__main__':
        order = False
        header = {
            'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
        # 逻辑判断
        while not order:
            # 检测商品上货的链接 特价机的gid=60,演示中设置gid=25
            response = requests.get(url='https://www.greencloudvps.com/cart.php?a=add&pid=648', headers=header)
            if 'Out of Stock' in str(response.content):
                print('Mei Huo')
                print('时间:' + time.strftime('%H:%M:%S'))
                print("*" * 30)
                time.sleep(3)
            else:
                order = True
        if order:
            buy_service()
    
    
  • CloudCone抢购脚本Python,为即将到来的黑五预热一下吧

    CloudCone抢购脚本Python,为即将到来的黑五预热一下吧

    token获取:

    抢购成功:

    #!/usr/bin/python
    
    # coding=utf-8
    import time
    import random
    import requests
    import json
    
    def run():
        while True:
            url = 'https://app.cloudcone.com/blackfriday/offers'  # cc链接
            url2 = "https://app.cloudcone.com/ajax/vps"  # 返回结果链接
            try:
                req_header = {
                    "Host": "app.cloudcone.com",
                    "Sec-Fetch-Dest": "empty",
                    "Sec-Fetch-Mode": "cors",
                    "Sec-Fetch-Site": "same-origin",
                    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
                    "X-Requested-With": "XMLHttpRequest",
                    "Cookie": "tihuan"
                }
                response = requests.get(url, req_header)
                html1 = str(response.content, "utf-8")
                jsondata = json.loads(html1)['__data']['vps_data']
                for num in jsondata:
                    if jsondata[num]['usd_price'] < 12:  # 小于多少刀
                        payload = {'os': '1007',
                                'hostname': 'baidu.com',
                                'location': '2',
                                'plan': num,
                                'method': 'provision',
                                '_token': 'tihuan',
                                }
                        response = requests.post(
                            url2, headers=req_header, data=payload, timeout=3)
                        if response.status_code == 200:
                            print(response.text)
            except Exception as e:
                print(e.__str__())
                continue
            #time.sleep(2.5*random.randint(2, 10))
    
    
    if __name__ == '__main__':
        run()

    使用中注意一下,如果少依赖就 pip install一下。

    首先登录,登录后将获取的cookie值复制到python中替换 “tihuan” 里边的内容,然后直接 python this.py运行就可以了。

  • 2023年如何搭建干净的DNS服务

    因为一些众所周知的原因, 我们可以尝试自己搭建干净/安全的DNS服务,一切都只要掌握一些简单知识/技巧.

    ## 懒人提示

    对于绝大多数不愿意折腾的人而言, 223.5.5.5作为dns服务器就够了

    ## 搭建原理

    首先呢, 地球上除了少数地方以外, Google家的8.8.8.8的DNS是非常理想的选择, 我们要做的,就是自建DNS服务, 通过DoH转发Google的DNS服务, 但是呢, 直接转发肯定是不行的,我们可以通过cf的workers无服务函数进行中转, 中转的时候顺便把自己的IP地址打码后传给Google DNS, 这样就能获得一个支持EDNS的DNS服务了(如果不传EDNS IP的话, 很多域名解析出来就是海外链路了, 速度必然受到影响).

    ## 开始实操

    整个过程总共分为六步, 一切顺利的话, 30分钟内就能完成搭建:

    1. 使用Technitium DnsServer自建一台DNS服务器
    2. 建立一个cf的Workers(其它厂商无服务函数也可以), 具体代码见附录, 这里要注意把EDNS的IP设置成你当地的IP(记得打码噢)
    3. 因为Workers的顶级域名被XX了, 这里需要在触发器自定义域添加一个自己的二级域名, 比如dns.demo.com
    4. 在Technitium DnsServer里设置Forwarder, Forwarder Protocol选DNS-over-HTTPS (JSON), 转发地址就是https://dns.demo.com/, 保存设置. (这里需要注意的是, Technitium DnsServer从v11版本开始去除了DNS-over-HTTPS (JSON)这个协议, 所以目前需要把版本锁定至v10)
    5. (可选)在DnsServer的日志里检查Forwarder转发是否成功
    6. (可选) DnsServer开启DNS-over-TLS, 需要自行准备ssl证书,对外开放一个public.demo.com:853服务, 这样就可以将其在安卓手机里设置为”私人DNS”了

    ## 附录

    addEventListener('fetch', function(event) {
    
        const { request } = event
    
        const response = handleRequest(request)
    
        event.respondWith(response)
    
    })
    
    const doh = 'https://dns.google/dns-query'
    
    const dohjson = 'https://dns.google/resolve'
    
    const contype = 'application/dns-message'
    
    const jstontype = 'application/dns-json'
    
    async
    function handleRequest(request) {
    
        const { method, headers, url } = request
    
        const searchParams = new
    URL(url).searchParams
    
        if (method == 'GET' && searchParams.has('dns')) {
    
            return
    await fetch(doh + '?dns=' + searchParams.get('dns')+'&edns_client_subnet=6.6.6.0/24', {
    
                method: 'GET',
    
                headers: {
    
                    'Accept': contype,
    
                }
    
            });
    
        } else
    if (method == 'POST' && headers.get('content-type')==contype) {
    
            return
    await fetch(doh, {
    
                method: 'POST',
    
                headers: {
    
                    'Accept': contype,
    
                    'Content-Type': contype,
    
                },
    
                body: await request.arrayBuffer()
    
            });
    
        } else
    if (method== 'GET' && headers.get('Accept')==jstontype) {
    
            const search = new
    URL(url).search
    
            const result = await fetch(dohjson + search + '&edns_client_subnet=6.6.6.0/24', {
    
                method: 'GET',
    
                headers: {
    
                    'Accept': jstontype,
    
                }
    
            });
    
            const secondCheck = await result.clone().json();
    
            if (secondCheck['Status'] == 0) {
    
                return result
    
            } else {
    
                // Some request name can't work with edns
    
                // "Status": 5 /* REFUSED */,
    
                return
    await fetch(dohjson + search, {
    
                    method: 'GET',
    
                    headers: {
    
                        'Accept': jstontype,
    
                    }
    
                });
    
            }
    
        } else {
    
            return
    new
    Response("", {status: 404})
    
        }
    
    }

  • 苹果CMS(MacCMS)精仿西瓜影院模板

    苹果CMS(MacCMS)精仿西瓜影院模板

    截图应该是这个样子吧,具体我也没试过哈哈。只是好久没更新资源了,随便找点资源来更上来。

  • PHP的小说站群系统NovelCluster – 基于船说+牛犇的魔改版

    PHP的小说站群系统NovelCluster – 基于船说+牛犇的魔改版

    这套系统基于船说和牛犇的基础上,代码基本进行了重写,去除了原来船说和牛犇的大量的冗余操作,执行效率提高了500%以上。

    同时结合最新的chatgpt 3.5或4(取决于api版本)自动生成相关标题、关键字和简介。是第一款AI小说系统。

    搜索则采用了轻量级但效率极高的meilisearch进行全文检索,对于站群系统来说,如果采用传统的数据库搜索那肯定是一场灾难。

    小说ID则采用了字母混淆形式和ID形式并存,有效规避了互联网搜索引擎的低质采集站的判断。

    AI自动改错也结果了人工智能的判断,会根据AI来判断章节对比以决定是否改错。

    给几个截图吧

    下图是全文搜索的设定

    添加站群站点的设定

    AI自动修错的设定

    更多截图暂停不放出了。

    本系统只是出于研究目的与大家分享,不提供下载及使用。

    有兴趣交流的可以加tg群交流一些想法。

  • 近期发现有MJJ试图注入攻击本站

    近期发现有MJJ试图注入攻击本站,小站不易,何苦苦苦相逼。

    现调整为黑铁及以上等级方可发表回复,不便之处,请大家谅解。

    投稿有奖活动开始啦 , 无错源码 (wucuoym.com)

    以上是这个MJJ尝试攻击的链接,大家可以去围观一下这个丑态。

  • ProxyPool  一款好用的简易高效的代理池源码

    ProxyPool 一款好用的简易高效的代理池源码

    简易高效的代理池,提供如下功能:

    • 定时抓取免费代理网站,简易可扩展。
    • 使用 Redis 对代理进行存储并对代理可用性进行排序。
    • 定时测试和筛选,剔除不可用代理,留下可用代理。
    • 提供代理 API,随机取用测试通过的可用代理。

    代理池原理解析可见「如何搭建一个高效的代理池」,建议使用之前阅读。

    使用准备

    首先当然是克隆代码并进入 ProxyPool 文件夹:

    git clone https://github.com/Python3WebSpider/ProxyPool.git
    cd ProxyPool
    

    然后选用下面 Docker 和常规方式任意一个执行即可。

    使用要求

    可以通过两种方式来运行代理池,一种方式是使用 Docker(推荐),另一种方式是常规方式运行,要求如下:

    Docker

    如果使用 Docker,则需要安装如下环境:

    • Docker
    • Docker-Compose

    安装方法自行搜索即可。

    常规方式

    常规方式要求有 Python 环境、Redis 环境,具体要求如下:

    • Python>=3.6
    • Redis

    Docker 运行

    如果安装好了 Docker 和 Docker-Compose,只需要一条命令即可运行。docker-compose up

    运行结果类似如下:

    redis        | 1:M 19 Feb 2020 17:09:43.940 * DB loaded from disk: 0.000 seconds
    redis        | 1:M 19 Feb 2020 17:09:43.940 * Ready to accept connections
    proxypool    | 2020-02-19 17:09:44,200 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
    proxypool    | 2020-02-19 17:09:44,203 INFO supervisord started with pid 1
    proxypool    | 2020-02-19 17:09:45,209 INFO spawned: 'getter' with pid 10
    proxypool    | 2020-02-19 17:09:45,212 INFO spawned: 'server' with pid 11
    proxypool    | 2020-02-19 17:09:45,216 INFO spawned: 'tester' with pid 12
    proxypool    | 2020-02-19 17:09:46,596 INFO success: getter entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    proxypool    | 2020-02-19 17:09:46,596 INFO success: server entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    proxypool    | 2020-02-19 17:09:46,596 INFO success: tester entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
    

    可以看到 Redis、Getter、Server、Tester 都已经启动成功。

    这时候访问 http://localhost:5555/random 即可获取一个随机可用代理。

    当然你也可以选择自己 Build,直接运行如下命令即可:

    docker-compose -f build.yaml up
    

    如果下载速度特别慢,可以自行修改 Dockerfile,修改:- RUN pip install -r requirements.txt + RUN pip install -r requirements.txt -i https://pypi.douban.com/simple

    常规方式运行

    如果不使用 Docker 运行,配置好 Python、Redis 环境之后也可运行,步骤如下。

    安装和配置 Redis

    本地安装 Redis、Docker 启动 Redis、远程 Redis 都是可以的,只要能正常连接使用即可。

    首先可以需要一下环境变量,代理池会通过环境变量读取这些值。

    设置 Redis 的环境变量有两种方式,一种是分别设置 host、port、password,另一种是设置连接字符串,设置方法分别如下:

    设置 host、port、password,如果 password 为空可以设置为空字符串,示例如下:export PROXYPOOL_REDIS_HOST=’localhost’ export PROXYPOOL_REDIS_PORT=6379 export PROXYPOOL_REDIS_PASSWORD=” export PROXYPOOL_REDIS_DB=0

    或者只设置连接字符串:export PROXYPOOL_REDIS_CONNECTION_STRING=’redis://localhost’

    这里连接字符串的格式需要符合 redis://[:password@]host[:port][/database] 的格式, 中括号参数可以省略,port 默认是 6379,database 默认是 0,密码默认为空。

    以上两种设置任选其一即可。

    安装依赖包

    这里强烈推荐使用 Conda 或 virtualenv 创建虚拟环境,Python 版本不低于 3.6。

    然后 pip 安装依赖即可:pip3 install -r requirements.txt

    运行代理池

    两种方式运行代理池,一种是 Tester、Getter、Server 全部运行,另一种是按需分别运行。

    一般来说可以选择全部运行,命令如下:python3 run.py

    运行之后会启动 Tester、Getter、Server,这时访问 http://localhost:5555/random 即可获取一个随机可用代理。

    或者如果你弄清楚了代理池的架构,可以按需分别运行,命令如下:python3 run.py –processor getter python3 run.py –processor tester python3 run.py –processor server

    这里 processor 可以指定运行 Tester、Getter 还是 Server。

    使用

    成功运行之后可以通过 http://localhost:5555/random 获取一个随机可用代理。

    可以用程序对接实现,下面的示例展示了获取代理并爬取网页的过程:import requests proxypool_url = ‘http://127.0.0.1:5555/random’ target_url = ‘http://httpbin.org/get’ def get_random_proxy(): “”” get random proxy from proxypool :return: proxy “”” return requests.get(proxypool_url).text.strip() def crawl(url, proxy): “”” use proxy to crawl page :param url: page url :param proxy: proxy, such as 8.8.8.8:8888 :return: html “”” proxies = {‘http’: ‘http://’ + proxy} return requests.get(url, proxies=proxies).text def main(): “”” main method, entry point :return: none “”” proxy = get_random_proxy() print(‘get random proxy’, proxy) html = crawl(target_url, proxy) print(html) if __name__ == ‘__main__’: main()

    运行结果如下:

    get random proxy 116.196.115.209:8080
    {
      "args": {},
      "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate",
        "Host": "httpbin.org",
        "User-Agent": "python-requests/2.22.0",
        "X-Amzn-Trace-Id": "Root=1-5e4d7140-662d9053c0a2e513c7278364"
      },
      "origin": "116.196.115.209",
      "url": "https://httpbin.org/get"
    }
    

    可以看到成功获取了代理,并请求 httpbin.org 验证了代理的可用性。

    可配置项

    代理池可以通过设置环境变量来配置一些参数。

    开关

    • ENABLE_TESTER:允许 Tester 启动,默认 true
    • ENABLE_GETTER:允许 Getter 启动,默认 true
    • ENABLE_SERVER:运行 Server 启动,默认 true

    环境

    • APP_ENV:运行环境,可以设置 dev、test、prod,即开发、测试、生产环境,默认 dev
    • APP_DEBUG:调试模式,可以设置 true 或 false,默认 true
    • APP_PROD_METHOD: 正式环境启动应用方式,默认是gevent, 可选:tornadomeinheld(分别需要安装 tornado 或 meinheld 模块)

    Redis 连接

    • PROXYPOOL_REDIS_HOST / REDIS_HOST:Redis 的 Host,其中 PROXYPOOL_REDIS_HOST 会覆盖 REDIS_HOST 的值。
    • PROXYPOOL_REDIS_PORT / REDIS_PORT:Redis 的端口,其中 PROXYPOOL_REDIS_PORT 会覆盖 REDIS_PORT 的值。
    • PROXYPOOL_REDIS_PASSWORD / REDIS_PASSWORD:Redis 的密码,其中 PROXYPOOL_REDIS_PASSWORD 会覆盖 REDIS_PASSWORD 的值。
    • PROXYPOOL_REDIS_DB / REDIS_DB:Redis 的数据库索引,如 0、1,其中 PROXYPOOL_REDIS_DB 会覆盖 REDIS_DB 的值。
    • PROXYPOOL_REDIS_CONNECTION_STRING / REDIS_CONNECTION_STRING:Redis 连接字符串,其中 PROXYPOOL_REDIS_CONNECTION_STRING 会覆盖 REDIS_CONNECTION_STRING 的值。
    • PROXYPOOL_REDIS_KEY / REDIS_KEY:Redis 储存代理使用字典的名称,其中 PROXYPOOL_REDIS_KEY 会覆盖 REDIS_KEY 的值。

    处理器

    • CYCLE_TESTER:Tester 运行周期,即间隔多久运行一次测试,默认 20 秒
    • CYCLE_GETTER:Getter 运行周期,即间隔多久运行一次代理获取,默认 100 秒
    • TEST_URL:测试 URL,默认百度
    • TEST_TIMEOUT:测试超时时间,默认 10 秒
    • TEST_BATCH:批量测试数量,默认 20 个代理
    • TEST_VALID_STATUS:测试有效的状态码
    • API_HOST:代理 Server 运行 Host,默认 0.0.0.0
    • API_PORT:代理 Server 运行端口,默认 5555
    • API_THREADED:代理 Server 是否使用多线程,默认 true

    日志

    • LOG_DIR:日志相对路径
    • LOG_RUNTIME_FILE:运行日志文件名称
    • LOG_ERROR_FILE:错误日志文件名称
    • LOG_ROTATION: 日志记录周转周期或大小,默认 500MB,见 loguru – rotation
    • LOG_RETENTION: 日志保留日期,默认 7 天,见 loguru – retention
    • ENABLE_LOG_FILE:是否输出 log 文件,默认 true,如果设置为 false,那么 ENABLE_LOG_RUNTIME_FILE 和 ENABLE_LOG_ERROR_FILE 都不会生效
    • ENABLE_LOG_RUNTIME_FILE:是否输出 runtime log 文件,默认 true
    • ENABLE_LOG_ERROR_FILE:是否输出 error log 文件,默认 true

    以上内容均可使用环境变量配置,即在运行前设置对应环境变量值即可,如更改测试地址和 Redis 键名:export TEST_URL=http://weibo.cn export REDIS_KEY=proxies:weibo

    即可构建一个专属于微博的代理池,有效的代理都是可以爬取微博的。

    如果使用 Docker-Compose 启动代理池,则需要在 docker-compose.yml 文件里面指定环境变量,如:version: “3” services: redis: image: redis:alpine container_name: redis command: redis-server ports: – “6379:6379” restart: always proxypool: build: . image: “germey/proxypool” container_name: proxypool ports: – “5555:5555” restart: always environment: REDIS_HOST: redis TEST_URL: http://weibo.cn REDIS_KEY: proxies:weibo

    扩展代理爬虫

    代理的爬虫均放置在 proxypool/crawlers 文件夹下,目前对接了有限几个代理的爬虫。

    若扩展一个爬虫,只需要在 crawlers 文件夹下新建一个 Python 文件声明一个 Class 即可。

    写法规范如下:from pyquery import PyQuery as pq from proxypool.schemas.proxy import Proxy from proxypool.crawlers.base import BaseCrawler BASE_URL = ‘http://www.664ip.cn/{page}.html’ MAX_PAGE = 5 class Daili66Crawler(BaseCrawler): “”” daili66 crawler, http://www.66ip.cn/1.html “”” urls = [BASE_URL.format(page=page) for page in range(1, MAX_PAGE + 1)] def parse(self, html): “”” parse html file to get proxies :return: “”” doc = pq(html) trs = doc(‘.containerbox table tr:gt(0)’).items() for tr in trs: host = tr.find(‘td:nth-child(1)’).text() port = int(tr.find(‘td:nth-child(2)’).text()) yield Proxy(host=host, port=port)

    在这里只需要定义一个 Crawler 继承 BaseCrawler 即可,然后定义好 urls 变量和 parse 方法即可。

    • urls 变量即为爬取的代理网站网址列表,可以用程序定义也可写成固定内容。
    • parse 方法接收一个参数即 html,代理网址的 html,在 parse 方法里只需要写好 html 的解析,解析出 host 和 port,并构建 Proxy 对象 yield 返回即可。

    网页的爬取不需要实现,BaseCrawler 已经有了默认实现,如需更改爬取方式,重写 crawl 方法即可。

  • 我爱工具网源码优化版

    对以前的工具网源码进行了一些优化

    主要修改内容有:
    1、后台改为账号密码登录,上传即用,不需要再改源码配置。
    2、删除无用的文件,减少源码包体积
    3、修复了部分失效的工具,比如ICP查询等

    安装方法:
    1、伪静态规则使用ThinkPHP
    2、运行目录(绑定目录)改成public
    3、上传后直接可以使用
    4、后台地址/admin,默认后台账号密码:admin/123456

  • 小龟双端影视1.6壳+反编译视频教程

    小龟双端影视1.6壳+反编译视频教程

    小龟视频是一款基于苹果CMS系统的移动端在线视频播放软件,支持mp4flvm3u8rmvbmkv等主流视频格式的播放。

    • 小龟以标准化插件的形式接入了苹果CMS系统,提供一组JSON接口文件。
    • 小龟提供一个极简设计风格的移动端APP来读取接口数据进行展现,包含AndroidIOS双终端。
    • 小龟基于苹果CMS系统的数据库规范进行了扩展以满足移动端基础的配置信息以及社交需求,并且提供一个后台管理系统来维护这些数据。
  • 苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)

    至今为止最好用的安卓电视端原生APP源码。

    2023年9月2日更新:增加了去广告功能,结合本站的非凡,量子去广告结合,可以让电视端看片再也没有广告之烦恼。

    2023年10月19日更新:优化了直播源,云端自动拉取最新可用直播源,保证客户端直接可用。

    苹果CMS原生TV端影视直播APP源码,支持电视直播、M3U8资源、官解。

    苹果CMS电视端源码因原有程序的API接口不能满足数据对接,所以本源码后端对接苹果CMS V10程序和如意验证系统,本源码前身为Android Stuiod构建乐檬TV,后面经过全新重构,如今也只是保留乐檬的部分UI,功能已经是前者完全不可比拟的了,本源码十分完美,没有多余代码,可以正常运营使用,如需了解更多详情可查看演示截图!

    展示截图:

    首页(精选推荐页)

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图1
    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图2

    电视剧分类页、分类筛选页

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图3
    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图4

    搜索页

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图5

    会员充值页

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图6

    电视直播页

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图7

    内容详情页

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图8

    播放页

    苹果CMS原生TV钟特云TV源码(电视直播+切片+官解+UI美化)插图9

    特色功能:

    • 支持直播、点播,含切片资、官方资源
    • 完美解析,支持多个解析组,失效自动切换
    • 公告展示、系统升级、特权展示一应俱全
    • 会员功能完善,对接易支付,可实现完美运营
    • 支持卡密系统,低成本轻松运营管理
    • 界面优化,UI采用当下流行的主流配色
    • 支持二维码推广,可推广公众号实现轻松涨粉

    下载须知:

    本源码为原始乐檬TV更新修复版,本源码非网络上泛滥的只改了色系的源码(换个颜色要400-500左右),这款源码很多人喜欢,那我们就保持维护,记录下跟新记录,本源码仅售138,且支持更新,还有就是很多朋友不会搭建,本源码附带文字教程,如需代搭建,需另支付200费用,就是只买源码138,源码+带搭建338,我相信这绝对是良心价位,本源码购买后请勿泛滥,如发现有泛滥者,直接取消下载资格,望各位同行自重!

    后台APP视频推荐说明:

    • 首页幻灯推荐值:9
    • 分类幻灯推荐值:8

    解析说明:

    解析目前支持市场现有的解析都能使用,json解析就可以,解析速度跟自己的解析接口有一定关系,目前我们测试自己的解析接口,几乎都是3-4秒就出来了,可以说非常快了,直链M3U8不需要走解析,直接可以播放。