From 9e813a271140a65686d73bb22cad579b35b9eb01 Mon Sep 17 00:00:00 2001 From: zhiyu1998 <542716863@qq.com> Date: Fri, 12 Jul 2024 13:00:01 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix:=20=E4=BF=AE=E5=A4=8D=20TikT?= =?UTF-8?q?ok=20=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 +++++++++++++++ apps/tools.js | 78 ++++++++++++++++++++++----------------------------- 2 files changed, 56 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 8f97c6e..5e09ecb 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,29 @@ chmod a+rx ~/.local/bin/yt-dlp sudo pacman -Syu yt-dlp ``` +`Tiktok解析`需要将`yt-dlp`升级到`最新版本`,如果不会可以按照下面的教程(Linux),Windows换个文件应该就可以: +```shell +# 1. 去官方下载最新版本:https://github.com/yt-dlp/yt-dlp/releases +# 2. 把yt-dlp放在Linux某个位置,比如/home/YtDlpHome/yt-dlp +# 3. 删除之前的yt-dlp,删除之前可以看看是不是最新版本 + +# 查看最新版本 +yt-dlp --version +# 如果你是 apt 安装需要卸载 +apt remove yt-dlp + +# 4. 将/home/YtDlpHome/yt-dlp添加到环境变量(下面二选一) +vim ~/.bashrc # 如果你使用 bash +vim ~/.zshrc # 如果你使用 zsh + +# 5. 添加到最后一行 +export PATH="/home/YtDlpHome:$PATH" + +# 6. 刷新环境变量即可 +source ~/.bashrc # 如果你使用 bash +source ~/.zshrc # 如果你使用 zsh +``` + `AM解析`需要使用两个依赖`freyr`、`atomicparsley`,现在只以Debian系统为例: ```shell diff --git a/apps/tools.js b/apps/tools.js index dec7ac8..2d833af 100644 --- a/apps/tools.js +++ b/apps/tools.js @@ -343,54 +343,42 @@ export class tools extends plugin { } // 处理链接 let url = await processTikTokUrl(e.msg.trim(), isOversea); - // 处理ID - let tiktokVideoId = await getIdVideo(url); - tiktokVideoId = tiktokVideoId.replace(/\//g, ""); - - const config = { - headers: { - "User-Agent": - "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36", - }, - // redirect: "follow", - follow: 10, - timeout: 10000, - } - // 如果不是海外,则使用代理 - if (!isOversea) { - config.httpsAgent = tunnel.httpsOverHttp({ - proxy: new HttpProxyAgent(this.myProxy), - }); - } - - const params = new URLSearchParams({ - "iid": "7318518857994389254", - "device_id": "7318517321748022790", - "channel": "googleplay", - "app_name": "musical_ly", - "version_code": "300904", - "device_platform": "android", - "device_type": "ASUS_Z01QD", - "os_version": "9", - "aweme_id": tiktokVideoId - }) - // console.log(`${TIKTOK_INFO}?${params.toString()}`) - await fetch(`${ TIKTOK_INFO }?${ params.toString() }`, config) - .then(async resp => { - const respJson = await resp.json(); - const data = respJson.aweme_list[0]; - e.reply(`识别:tiktok, ${ data.desc }`); - this.downloadVideo(data.video.play_addr.url_list[0], !isOversea).then(video => { - e.reply( - segment.video( - `${ this.getCurDownloadPath(e) }/temp.mp4`, - ), - ); - }); - }); + // 去除多余参数 + const parsedUrl = new URL(url); + parsedUrl.search = ''; + const cleanedTiktokUrl = parsedUrl.toString(); + // 下载逻辑 + const path = this.getCurDownloadPath(e); + const title = execSync(`yt-dlp --get-title ${ cleanedTiktokUrl } ${ isOversea ? "" : `--proxy ${ this.myProxy }` }`) + e.reply(`识别:TikTok,视频下载中请耐心等待 \n${ title }`); + await this.tiktokHelper(path, cleanedTiktokUrl, isOversea); + await this.sendVideoToUpload(e, `${ path }/temp.mp4`); return true; } + + /** + * yt-dlp for tiktok 工具 + * @returns {Promise} + * @param path 下载路径 + * @param url 下载链接 + * @param isOversea 是否是海外用户 + */ + async tiktokHelper(path, url, isOversea) { + return new Promise((resolve, reject) => { + const command = `yt-dlp ${ isOversea ? "" : `--proxy ${ this.myProxy }` } -P ${ path } -o "temp.%(ext)s" ${ url }`; + exec(command, (error, stdout) => { + if (error) { + console.error(`Error executing command: ${ error }`); + reject(error); + } else { + console.log(`Command output: ${ stdout }`); + resolve(stdout); + } + }); + }); + } + async biliScan(e) { e.reply('R插件开源免责声明:\n您将通过扫码完成获取哔哩哔哩refresh_token以及ck。\n本Bot将不会保存您的登录状态。\n我方仅提供视频解析及相关B站内容服务,若您的账号封禁、被盗等处罚与我方无关。\n害怕风险请勿扫码 ~', { recallMsg: 180 }); // 图片发送钩子