mirror of
https://github.com/Jerryplusy/rc-plugin.git
synced 2025-10-14 08:09:19 +00:00
✨ feat: 添加dy直播解析 [beta]
This commit is contained in:
parent
5b1c59dfab
commit
c5b6b4a21a
@ -34,7 +34,7 @@ import {
|
|||||||
BILI_STREAM_INFO,
|
BILI_STREAM_INFO,
|
||||||
BILI_SUMMARY,
|
BILI_SUMMARY,
|
||||||
DY_COMMENT,
|
DY_COMMENT,
|
||||||
DY_INFO,
|
DY_INFO, DY_LIVE_INFO,
|
||||||
DY_TOUTIAO_INFO,
|
DY_TOUTIAO_INFO,
|
||||||
GENERAL_REQ_LINK,
|
GENERAL_REQ_LINK,
|
||||||
HIBI_API_SERVICE,
|
HIBI_API_SERVICE,
|
||||||
@ -128,7 +128,7 @@ export class tools extends plugin {
|
|||||||
fnc: "trans",
|
fnc: "trans",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
reg: "(v.douyin.com)",
|
reg: "(v.douyin.com|live.douyin.com)",
|
||||||
fnc: "douyin",
|
fnc: "douyin",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -305,16 +305,27 @@ export class tools extends plugin {
|
|||||||
|
|
||||||
// 抖音解析
|
// 抖音解析
|
||||||
async douyin(e) {
|
async douyin(e) {
|
||||||
const urlRex = /(http:|https:)\/\/v.douyin.com\/[A-Za-z\d._?%&+\-=\/#]*/g;
|
const urlRex = /(http:\/\/|https:\/\/)(v|live).douyin.com\/[A-Za-z\d._?%&+\-=\/#]*/;
|
||||||
const douUrl = urlRex.exec(e.msg.trim())[0];
|
// 检测无效链接,例如:v.douyin.com
|
||||||
|
if (!urlRex.test(e.msg)) {
|
||||||
const res = await this.douyinRequest(douUrl);
|
e.reply(`检测到这是一个无效链接,无法解析抖音${HELP_DOC}`);
|
||||||
// 当前版本需要填入cookie
|
return;
|
||||||
if (_.isEmpty(this.douyinCookie)) {
|
}
|
||||||
e.reply(`检测到没有Cookie,无法解析抖音${HELP_DOC}`);
|
// 获取链接
|
||||||
|
let douUrl = urlRex.exec(e.msg.trim())[0];
|
||||||
|
if (douUrl.includes("v.douyin.com")) {
|
||||||
|
douUrl = await this.douyinRequest(douUrl)
|
||||||
|
}
|
||||||
|
// 获取 ID
|
||||||
|
const douId = /note\/(\d+)/g.exec(douUrl)?.[1] ||
|
||||||
|
/video\/(\d+)/g.exec(douUrl)?.[1] ||
|
||||||
|
/live.douyin.com\/(\d+)/.exec(douUrl)?.[1] ||
|
||||||
|
/live\/(\d+)/.exec(douUrl)?.[1];
|
||||||
|
// 当前版本需要填入cookie
|
||||||
|
if (_.isEmpty(this.douyinCookie) || _.isEmpty(douId)) {
|
||||||
|
e.reply(`检测到没有Cookie 或者 这是一个无效链接,无法解析抖音${HELP_DOC}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const douId = /note\/(\d+)/g.exec(res)?.[1] || /video\/(\d+)/g.exec(res)?.[1];
|
|
||||||
// 以下是更新了很多次的抖音API历史,且用且珍惜
|
// 以下是更新了很多次的抖音API历史,且用且珍惜
|
||||||
// const url = `https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${ douId }`;
|
// const url = `https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${ douId }`;
|
||||||
// const url = `https://www.iesdouyin.com/aweme/v1/web/aweme/detail/?aweme_id=${ douId }&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333`;
|
// const url = `https://www.iesdouyin.com/aweme/v1/web/aweme/detail/?aweme_id=${ douId }&aid=1128&version_name=23.5.0&device_platform=android&os_version=2333`;
|
||||||
@ -325,7 +336,7 @@ export class tools extends plugin {
|
|||||||
Referer: "https://www.douyin.com/",
|
Referer: "https://www.douyin.com/",
|
||||||
cookie: this.douyinCookie,
|
cookie: this.douyinCookie,
|
||||||
};
|
};
|
||||||
const dyApi = DY_INFO.replace("{}", douId);
|
const dyApi = douUrl.includes("live") ? DY_LIVE_INFO.replaceAll("{}", douId) : DY_INFO.replace("{}", douId);
|
||||||
// a-bogus参数
|
// a-bogus参数
|
||||||
const abParam = aBogus.generate_a_bogus(
|
const abParam = aBogus.generate_a_bogus(
|
||||||
new URLSearchParams(new URL(dyApi).search).toString(),
|
new URLSearchParams(new URL(dyApi).search).toString(),
|
||||||
@ -333,7 +344,7 @@ export class tools extends plugin {
|
|||||||
);
|
);
|
||||||
// const param = resp.data.result[0].paramsencode;
|
// const param = resp.data.result[0].paramsencode;
|
||||||
const resDyApi = `${dyApi}&a_bogus=${abParam}`;
|
const resDyApi = `${dyApi}&a_bogus=${abParam}`;
|
||||||
headers['Referer'] = `https://www.douyin.com/video/${douId}`
|
headers['Referer'] = `https://www.douyin.com/`
|
||||||
// 定义一个dy请求
|
// 定义一个dy请求
|
||||||
const dyResponse = () => axios.get(resDyApi, {
|
const dyResponse = () => axios.get(resDyApi, {
|
||||||
headers,
|
headers,
|
||||||
@ -341,7 +352,15 @@ export class tools extends plugin {
|
|||||||
// 如果失败进行3次重试
|
// 如果失败进行3次重试
|
||||||
try {
|
try {
|
||||||
const data = await retryAxiosReq(dyResponse)
|
const data = await retryAxiosReq(dyResponse)
|
||||||
// logger.info(data)
|
// saveJsonToFile(data);
|
||||||
|
// 直播数据逻辑
|
||||||
|
if (douUrl.includes("live")) {
|
||||||
|
const item = await data.data.data?.[0];
|
||||||
|
const { title, cover, user_count_str } = item;
|
||||||
|
const dySendContent = `${this.identifyPrefix}识别:抖音直播,${title}`
|
||||||
|
e.reply([segment.image(cover?.url_list?.[0]), dySendContent, `\n🏄♂️在线人数:${user_count_str}人正在观看`]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
const item = await data.aweme_detail;
|
const item = await data.aweme_detail;
|
||||||
// await saveJsonToFile(item);
|
// await saveJsonToFile(item);
|
||||||
// 如果为null则退出
|
// 如果为null则退出
|
||||||
|
@ -113,6 +113,13 @@ export const DY_COMMENT = "https://www.douyin.com/aweme/v1/web/comment/list/?dev
|
|||||||
*/
|
*/
|
||||||
export const DY_TOUTIAO_INFO = "https://aweme.snssdk.com/aweme/v1/play/?video_id={}&ratio=1080p&line=0"
|
export const DY_TOUTIAO_INFO = "https://aweme.snssdk.com/aweme/v1/play/?video_id={}&ratio=1080p&line=0"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DY 直播信息
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
export const DY_LIVE_INFO = "https://live.douyin.com/webcast/room/web/enter/?device_platform=webapp&aid=6383&channel=channel_pc_web&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Firefox&browser_version=124.0&browser_online=true&engine_name=Gecko&engine_version=122.0.0.0&os_name=Windows&os_version=10&cpu_core_num=12&device_memory=8&platform=PC&web_rid={}&room_id_str={}";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* X API
|
* X API
|
||||||
* @type {string}
|
* @type {string}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user