mirror of
https://github.com/Jerryplusy/rc-plugin.git
synced 2025-10-14 08:09:19 +00:00
✨ feat: 新增哔哩哔哩官方AI总结、哔哩哔哩音乐提取
1. 新增哔哩哔哩音乐提取,使用“bili音乐+链接”即可提取视频中的音乐 2. 重构部分代码 3. 更换tiktok API 4. 更换视频总结方式GPT为官方的视频摘要(免费使用) 5. 删除GPT相关内容
This commit is contained in:
parent
d0e6e6e5bd
commit
061002f24d
20
constants/bili.js
Normal file
20
constants/bili.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* AI总结API
|
||||||
|
* https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/wbi.md
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
export const BILI_SUMMARY = "https://api.bilibili.com/x/web-interface/view/conclusion/get"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 视频基本信息API
|
||||||
|
* https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/video/info.md
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
export const BILI_VIDEO_INFO = "http://api.bilibili.com/x/web-interface/view"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 登录基本信息
|
||||||
|
* https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/login/login_info.md#%E5%AF%BC%E8%88%AA%E6%A0%8F%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
export const BILI_NAV = "https://api.bilibili.com/x/web-interface/nav"
|
43
constants/constant.js
Normal file
43
constants/constant.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* 用于百度翻译的常量控制
|
||||||
|
*
|
||||||
|
* @type {{英: string, 日: string, 文: string, 中: string}}
|
||||||
|
*/
|
||||||
|
export const transMap = { 中: "zh", 日: "jp", 文: "wyw", 英: "en", 俄: "ru", 韩: "kr" };
|
||||||
|
/**
|
||||||
|
* 用于腾讯交互式翻译的常量控制
|
||||||
|
*
|
||||||
|
* @type {{英: string, 俄: string, 日: string, 韩: string, 中: string}}
|
||||||
|
*/
|
||||||
|
export const tencentTransMap = { 中: "zh", 日: "ja", 韩: "ko", 英: "en", 俄: "ru" };
|
||||||
|
/**
|
||||||
|
* 用于腾讯交互式翻译的常量控制
|
||||||
|
*
|
||||||
|
* @type {{英: string, 俄: string, 日: string, 韩: string, 中: string}}
|
||||||
|
*/
|
||||||
|
export const googleTransMap = { 中: "zh-CN", 日: "jp", 韩: "ko", 英: "en", 俄: "ru" };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 以下为抖音/TikTok类型代码
|
||||||
|
*
|
||||||
|
* @type {{"0": string, "55": string, "2": string, "68": string, "58": string, "4": string, "61": string, "51": string, "150": string}}
|
||||||
|
*/
|
||||||
|
export const douyinTypeMap = {
|
||||||
|
2: "image",
|
||||||
|
4: "video",
|
||||||
|
68: "image",
|
||||||
|
0: "video",
|
||||||
|
51: "video",
|
||||||
|
55: "video",
|
||||||
|
58: "video",
|
||||||
|
61: "video",
|
||||||
|
150: "image",
|
||||||
|
};
|
||||||
|
|
||||||
|
export const TEN_THOUSAND = 10000;
|
||||||
|
|
||||||
|
export const CAT_LIMIT = 10;
|
||||||
|
|
||||||
|
export const XHS_CK = 'eGhzVHJhY2tlcklkPTczODhhYmY2LTI0MDgtNGU5YS04MTUyLTE0MGVhOGY1MTQ5ZjsgeGhzVHJhY2tlcklkLnNpZz1UcGUxTkNaX3B3UkFYdG01SVJmVEs0SWUxM0xBaGZuNmNZU2N4Vi1JYWxFOyBhMT0xODY2ZDkwMDM0NmI2NmppcjMzcGpxZ2MwM3JvcG1mczAydXMxdWNoeDEwMDAwMTM1MDUzOyB3ZWJJZD1mMTNkOGJkYjhiZGM3ZGE0MzY0NjA4NWJjYzQ1MDQ1YTsgZ2lkPXlZS0tmajg4SzA4MnlZS0tmajg4cUo3UzRLREtLVjNGcXFVVjd4Q0FrUzhxRk15OGxVNmlNeTg4OHlxMjgycThmMlk0UzAySjsgZ2lkLnNpZ249YlpzcFFzSUxEUmN5akZLQmN2L1FMWVhkU3lvPTsgd2ViX3Nlc3Npb249MDMwMDM3YTRjMDQyYjE1ZTVjMTg4OTUwOGIyNDRhZDExM2UwNTM7IHhoc1RyYWNrZXI9dXJsPW5vdGVEZXRhaWwmeGhzc2hhcmU9V2VpeGluU2Vzc2lvbjsgeGhzVHJhY2tlci5zaWc9YzdmcDVRclk2SGNvVERhUzluX2N3Z2RCRHh2MFZmWnpSU1NTcnlzbG5lQTsgZXh0cmFfZXhwX2lkcz1oNV8yMzAyMDExX29yaWdpbixoNV8xMjA4X2NsdCxoNV8xMTMwX2NsdCxpb3Nfd3hfbGF1bmNoX29wZW5fYXBwX2V4cCxoNV92aWRlb191aV9leHAzLHd4X2xhdW5jaF9vcGVuX2FwcF9kdXJhdGlvbl9vcmlnaW4scXVlc19jbHQyOyBleHRyYV9leHBfaWRzLnNpZz1DVUdrR3NYT3lBZmpVSXkyVGo3SjN4YmRNakFfSnpoR1JkYWd6cVlkbmJnOyB3ZWJCdWlsZD0xLjEuMjE7IHhzZWNhcHBpZD14aHMtcGMtd2ViOyB3ZWJzZWN0aWdhPTU5ZDNlZjFlNjBjNGFhMzdhN2RmM2MyMzQ2N2JkNDZkN2YxZGEwYjE5MThjZjMzNWVlN2YyZTllNTJhYzA0Y2Y7IHNlY19wb2lzb25faWQ9MTI0OTE1NWQtOWU5ZS00MzkyLTg2NTgtNTA1Yzc0YTUzMTM1'
|
||||||
|
|
||||||
|
export const RESTRICTION_DESCRIPTION = "\n-----------------------限制说明-----------------------"
|
BIN
resources/img/icon/bilimusic.png
Normal file
BIN
resources/img/icon/bilimusic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
71
utils/biliWbi.js
Normal file
71
utils/biliWbi.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
import md5 from 'md5'
|
||||||
|
import { BILI_NAV } from "../constants/bili.js";
|
||||||
|
|
||||||
|
const mixinKeyEncTab = [
|
||||||
|
46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49,
|
||||||
|
33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40,
|
||||||
|
61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11,
|
||||||
|
36, 20, 34, 44, 52
|
||||||
|
]
|
||||||
|
|
||||||
|
// 对 imgKey 和 subKey 进行字符顺序打乱编码
|
||||||
|
const getMixinKey = (orig) => mixinKeyEncTab.map(n => orig[n]).join('').slice(0, 32)
|
||||||
|
|
||||||
|
// 为请求参数进行 wbi 签名
|
||||||
|
function encWbi(params, img_key, sub_key) {
|
||||||
|
const mixin_key = getMixinKey(img_key + sub_key),
|
||||||
|
curr_time = Math.round(Date.now() / 1000),
|
||||||
|
chr_filter = /[!'()*]/g
|
||||||
|
|
||||||
|
Object.assign(params, { wts: curr_time }) // 添加 wts 字段
|
||||||
|
// 按照 key 重排参数
|
||||||
|
const query = Object
|
||||||
|
.keys(params)
|
||||||
|
.sort()
|
||||||
|
.map(key => {
|
||||||
|
// 过滤 value 中的 "!'()*" 字符
|
||||||
|
const value = params[key].toString().replace(chr_filter, '')
|
||||||
|
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
|
||||||
|
})
|
||||||
|
.join('&')
|
||||||
|
|
||||||
|
const wbi_sign = md5(query + mixin_key) // 计算 w_rid
|
||||||
|
|
||||||
|
return query + '&w_rid=' + wbi_sign
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取最新的 img_key 和 sub_key
|
||||||
|
async function getWbiKeys(SESSDATA) {
|
||||||
|
const res = await fetch(BILI_NAV, {
|
||||||
|
headers: {
|
||||||
|
// SESSDATA 字段
|
||||||
|
Cookie: `SESSDATA=${SESSDATA}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const { data: { wbi_img: { img_url, sub_url } } } = await res.json()
|
||||||
|
|
||||||
|
return {
|
||||||
|
img_key: img_url.slice(
|
||||||
|
img_url.lastIndexOf('/') + 1,
|
||||||
|
img_url.lastIndexOf('.')
|
||||||
|
),
|
||||||
|
sub_key: sub_url.slice(
|
||||||
|
sub_url.lastIndexOf('/') + 1,
|
||||||
|
sub_url.lastIndexOf('.')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 算法来自:https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/docs/misc/sign/wbi.md
|
||||||
|
* 参考了算法来源:https://github.com/SocialSisterYi/bilibili-API-collect/issues/631
|
||||||
|
* @return {Promise<string>}
|
||||||
|
*/
|
||||||
|
export async function getWbi(videoData, SESSDATA) {
|
||||||
|
const web_keys = await getWbiKeys(SESSDATA)
|
||||||
|
const params = { ...videoData },
|
||||||
|
img_key_res = web_keys.img_key,
|
||||||
|
sub_key_res = web_keys.sub_key
|
||||||
|
// eg. bar=514&baz=1919810&foo=114&wts=1684805578&w_rid=bb97e15f28edf445a0e4420d36f0157e
|
||||||
|
return encWbi(params, img_key_res, sub_key_res);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user