← 返回 TimeAmber
logo NodeSeekbeta

【开源】别让小鸡吃灰 - TG机器人,下载Youtube、X等网站视频转存到115\阿里云盘等网盘

不知道为啥Github账号404了 直接上传到网盘了 有需要自取
https://gofile.io/d/KAKat9

最近X总是封号,一封号点赞的小视频就找不到了,正好618买了115网盘的8年会员,于是想用telegram的机器人把Youtube、X、tiktok视频下载到VPS上并转存到网盘里,翻了一圈没有能满足我需求的,于是花了点时间手撸了一个,实现很简单,理论上yt-dlp支持的网站这个脚本都支持
求鸡腿 xhj006

预览图:
215e7637e15b5c83d945ee103621bf52.png

项目地址:https://github.com/Srainc/TBot-DSSC
项目说明:

TBot-DSSC

简介:
通过给Telegram机器发送URL,让服务器下载对应的视频并同步到网盘中
该脚本通过Telegram机器人接收、创建、反馈任务,通过yt-dlp下载视频,通过CloudDrive2添加网盘,通过Rclone对本地数据与网盘进行数据同步

环境需求:
Python >= 3.9
Rclone
CloudDrive2
ffmpeg

环境部署:
Python组件安装

pip install python-telegram-bot tqdm yt-dlp

ffmprg安装

apt install ffmpeg

Rclone安装

curl https://rclone.org/install.sh | sudo bash

CloudDrive2安装

curl -fsSL "https://raw.githubusercontent.com/lonelylose/clouddrive2/main/cd2.sh" | bash -s install

使用说明:
1、使用CloudDrive2添加对应网盘
2、使用Rclone添加CloudDrive2对应的WebDav服务
3、申请Telegram机器人
4、修改Python脚本中的API_TOKEN、DOWNLOAD_DIR、ALLOWED_USER_ID、MOUNT_PATH、RCLONE_NAME字段为对应的值
5、启动脚本

其他信息:
1、API_TOKEN字段需要通过官方机器人https://t.me/BotFather申请API后获得
2、ALLOWED_USER_ID字段可以通过https://t.me/userinfobot获得
3、可以使用nohup命令或者screen工具进行Python脚本的持久化运行
4、在debian11下正常运行,其它系统请自测
5、CloudDrive2、Rclone的使用方法请自行互联网搜索

免责声明:
1、使用该脚本则默认同意该声明
2、该脚本为个人测试用途,数据无价,请谨慎使用,使用该脚本导致的一切后果开发者不承担责任

  • 保存为 xxx.py

    import os
    import shlex
    import subprocess
    import logging
    from tqdm import tqdm
    from telegram import Update
    from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, CallbackContext
    from telegram.ext.filters import TEXT
    from urllib.parse import urlparse
    from datetime import datetime
    
    # 替换为你的 Telegram 机器人 API Token 
    API_TOKEN = '1234567890:beTK1P4NtjnVnLs-gtLHgCQJXyoI0gWgRWg'
    # 下载目录
    DOWNLOAD_DIR = '/Down'
    # 允许使用的用户 ID 
    ALLOWED_USER_ID = 1234567890  # 替换为你想允许的用户 ID 
    # 网盘挂载路径
    MOUNT_PATH = '/115/Server'
    # Rclone 配置的项目名称 rclone config 可以查看
    RCLONE_NAME = '115'
    
    # 确保下载目录存在
    os.makedirs(DOWNLOAD_DIR, exist_ok=True)
    
    # 配置日志记录
    LOGGING_ENABLED = os.getenv('LOGGING_ENABLED', 'true').lower() == 'true'
    if LOGGING_ENABLED:
        logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    else:
        logging.basicConfig(level=logging.CRITICAL)  # 只记录严重错误
    
    logger = logging.getLogger(__name__)
    
    # /start 命令的处理函数
    async def start(update: Update, context: CallbackContext):
        if update.message.from_user.id != ALLOWED_USER_ID:
            await update.message.reply_text('您无权使用此机器人。')
            return
        await update.message.reply_text('你好!向我发送视频 URL,我将为您下载该视频。')
    
    # 处理收到的 URL
    async def handle_message(update: Update, context: CallbackContext):
        if update.message.from_user.id != ALLOWED_USER_ID:
            await update.message.reply_text('您无权使用此机器人。')
            return
    
        url = update.message.text
        chat_id = update.message.chat_id
    
        # 解析 URL 中的域名
        domain = urlparse(url).netloc
        domain_dir = os.path.join(DOWNLOAD_DIR, domain)
    
        # 确保域名对应的目录存在
        os.makedirs(domain_dir, exist_ok=True)
        current_date = datetime.now().strftime('%Y-%m-%d')
    
        download_command = f'yt-dlp -o {shlex.quote(domain_dir + "/%(title).30s_" + current_date + ".%(ext)s")} {shlex.quote(url)}'
    
        # 发送下载开始消息
        await update.message.reply_text(f'开始下载:{url}')
    
        try:
            # 运行 yt-dlp 命令并捕获输出
            process = subprocess.Popen(shlex.split(download_command), stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, encoding='utf-8')
    
            progress_message = await update.message.reply_text('下载进度:0%')
            last_progress = 0
    
            while True:
                output = process.stdout.readline()
                if output == '' and process.poll() is not None:
                    break
                if output:
                    logger.info(output.strip())
                    # 解析进度信息
                    if '[download]' in output and '%' in output:
                        progress = output.split('%')[0].split()[-1].strip()
                        try:
                            progress = float(progress)
                            if progress >= last_progress + 10:
                                last_progress = progress
                                await progress_message.edit_text(f'下载进度:{progress}%')
                        except ValueError:
                            pass
    
            # 捕获下载过程中的错误信息
            stderr_output = process.stderr.read()
            if process.returncode == 0:
                await update.message.reply_text('下载完成!')
                logger.info(f'Download complete for {url}')
                 # 同步文件到115:/115/Server
                sync_command = f'rclone move {shlex.quote(DOWNLOAD_DIR)} {RCLONE_NAME}:{shlex.quote(MOUNT_PATH)}'
                sync_process = subprocess.run(shlex.split(sync_command), capture_output=True, text=True)
                
                if sync_process.returncode == 0:
                    await update.message.reply_text('文件同步完成!')
                    logger.info('File sync complete')
                else:
                    await update.message.reply_text(f'文件同步错误:{sync_process.stderr.strip()}')
                    logger.error(f'File sync error: {sync_process.stderr.strip()}')
    
            else:
                await update.message.reply_text(f'Error: {stderr_output.strip()}')
                logger.error(f'Error: {stderr_output.strip()}')
        except Exception as e:
            await update.message.reply_text(f'Error: {str(e)}')
            logger.error(f'Exception occurred: {str(e)}')
    
    def main():
        application = ApplicationBuilder().token(API_TOKEN).build()
        application.add_handler(CommandHandler("start", start))
        application.add_handler(MessageHandler(TEXT, handle_message))  # 更正后的过滤器
    
        # 运行机器人
        application.run_polling()
    
    if __name__ == '__main__':
        main()
    
  • 支持

    无欲无求,清心寡欲!收想收的小鸡鸡,玩好玩的小鸡鸡!

  • 点个star xhj003

  • bd

  • 不错👍

  • 绑定

  • bd

  • 前排支持 xhj003

  • bd

  • 支持

  • 给大佬点赞👍

内容
预览
对照
AC娘
洋葱头
小黄鸡