koishi-plugin-video-parser-all 1.4.3 → 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -30,6 +30,7 @@ export declare const Config: Schema<{
30
30
  twitter?: boolean | null | undefined;
31
31
  instagram?: boolean | null | undefined;
32
32
  doubao?: boolean | null | undefined;
33
+ doubao_image?: boolean | null | undefined;
33
34
  oasis?: boolean | null | undefined;
34
35
  wechat_channel?: boolean | null | undefined;
35
36
  lishi?: boolean | null | undefined;
@@ -111,6 +112,7 @@ export declare const Config: Schema<{
111
112
  twitter?: boolean | null | undefined;
112
113
  instagram?: boolean | null | undefined;
113
114
  doubao?: boolean | null | undefined;
115
+ doubao_image?: boolean | null | undefined;
114
116
  oasis?: boolean | null | undefined;
115
117
  wechat_channel?: boolean | null | undefined;
116
118
  lishi?: boolean | null | undefined;
@@ -177,6 +179,7 @@ export declare const Config: Schema<{
177
179
  twitter: Schema<boolean, boolean>;
178
180
  instagram: Schema<boolean, boolean>;
179
181
  doubao: Schema<boolean, boolean>;
182
+ doubao_image: Schema<boolean, boolean>;
180
183
  oasis: Schema<boolean, boolean>;
181
184
  wechat_channel: Schema<boolean, boolean>;
182
185
  lishi: Schema<boolean, boolean>;
@@ -261,6 +264,7 @@ export declare const Config: Schema<{
261
264
  twitter: Schema<boolean, boolean>;
262
265
  instagram: Schema<boolean, boolean>;
263
266
  doubao: Schema<boolean, boolean>;
267
+ doubao_image: Schema<boolean, boolean>;
264
268
  oasis: Schema<boolean, boolean>;
265
269
  wechat_channel: Schema<boolean, boolean>;
266
270
  lishi: Schema<boolean, boolean>;
package/lib/index.js CHANGED
@@ -92,6 +92,7 @@ exports.Config = koishi_1.Schema.intersect([
92
92
  twitter: koishi_1.Schema.boolean().default(true).description('Twitter/X'),
93
93
  instagram: koishi_1.Schema.boolean().default(true).description('Instagram'),
94
94
  doubao: koishi_1.Schema.boolean().default(true).description('豆包'),
95
+ doubao_image: koishi_1.Schema.boolean().default(true).description('豆包图片'),
95
96
  oasis: koishi_1.Schema.boolean().default(true).description('绿洲'),
96
97
  wechat_channel: koishi_1.Schema.boolean().default(true).description('视频号'),
97
98
  lishi: koishi_1.Schema.boolean().default(true).description('梨视频'),
@@ -188,6 +189,7 @@ exports.Config = koishi_1.Schema.intersect([
188
189
  twitter: koishi_1.Schema.boolean().default(false).description('Twitter/X'),
189
190
  instagram: koishi_1.Schema.boolean().default(false).description('Instagram'),
190
191
  doubao: koishi_1.Schema.boolean().default(false).description('豆包'),
192
+ doubao_image: koishi_1.Schema.boolean().default(false).description('豆包图片'),
191
193
  oasis: koishi_1.Schema.boolean().default(false).description('绿洲'),
192
194
  wechat_channel: koishi_1.Schema.boolean().default(false).description('视频号'),
193
195
  lishi: koishi_1.Schema.boolean().default(false).description('梨视频'),
@@ -296,44 +298,64 @@ function debugLog(level, ...args) {
296
298
  }
297
299
  const BUILTIN_LINK_RULES = [
298
300
  { pattern: /https?:\/\/(?:www\.)?bilibili\.com\/video\/([ab]v[0-9a-zA-Z_-]+)[^\s]*/gi, type: 'bilibili' },
299
- { pattern: /https?:\/\/b23\.tv\/[0-9a-zA-Z_-]{5,}[^\s]*/gi, type: 'bilibili' },
300
- { pattern: /https?:\/\/bili\d+\.cn\/[0-9a-zA-Z_-]{5,}[^\s]*/gi, type: 'bilibili' },
301
+ { pattern: /https?:\/\/b23\.tv\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'bilibili' },
302
+ { pattern: /https?:\/\/bili\d+\.cn\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'bilibili' },
303
+ { pattern: /https?:\/\/b23\.wtf\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'bilibili' },
304
+ { pattern: /https?:\/\/bili2233\.cn\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'bilibili' },
301
305
  { pattern: /https?:\/\/(?:www\.)?douyin\.com\/video\/\d{10,}[^\s]*/gi, type: 'douyin' },
302
- { pattern: /https?:\/\/v\.douyin\.com\/[0-9a-zA-Z_-]{8,}[^\s]*/gi, type: 'douyin' },
303
- { pattern: /https?:\/\/(?:www\.)?kuaishou\.com\/short-video\/[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'kuaishou' },
304
- { pattern: /https?:\/\/v\.kuaishou\.com\/[0-9a-zA-Z_-]{8,}[^\s]*/gi, type: 'kuaishou' },
305
- { pattern: /https?:\/\/(?:www\.)?xiaohongshu\.com\/discovery\/item\/[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'xiaohongshu' },
306
- { pattern: /https?:\/\/xhslink\.com\/[0-9a-zA-Z_-]{8,}[^\s]*/gi, type: 'xiaohongshu' },
307
- { pattern: /https?:\/\/weibo\.com\/\d+\/[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'weibo' },
308
- { pattern: /https?:\/\/video\.weibo\.com\/show\?fid=[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'weibo' },
306
+ { pattern: /https?:\/\/v\.douyin\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'douyin' },
307
+ { pattern: /https?:\/\/(?:www\.)?kuaishou\.com\/short-video\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'kuaishou' },
308
+ { pattern: /https?:\/\/v\.kuaishou\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'kuaishou' },
309
+ { pattern: /https?:\/\/(?:www\.)?kuaishou\.com\/f\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'kuaishou' },
310
+ { pattern: /https?:\/\/(?:www\.)?xiaohongshu\.com\/discovery\/item\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'xiaohongshu' },
311
+ { pattern: /https?:\/\/xhslink\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'xiaohongshu' },
312
+ { pattern: /https?:\/\/(?:www\.)?xiaohongshu\.com\/explore\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'xiaohongshu' },
313
+ { pattern: /https?:\/\/(?:www\.)?xiaohongshu\.com\/board\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'xiaohongshu' },
314
+ { pattern: /https?:\/\/weibo\.com\/\d+\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'weibo' },
315
+ { pattern: /https?:\/\/video\.weibo\.com\/show\?fid=[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'weibo' },
316
+ { pattern: /https?:\/\/t\.cn\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'weibo' },
317
+ { pattern: /https?:\/\/m\.weibo\.cn\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'weibo' },
309
318
  { pattern: /https?:\/\/(?:www\.)?ixigua\.com\/\d{10,}[^\s]*/gi, type: 'xigua' },
310
319
  { pattern: /https?:\/\/(?:www\.)?youtube\.com\/watch\?v=[a-zA-Z0-9_-]{11}[^\s]*/gi, type: 'youtube' },
311
- { pattern: /https?:\/\/youtu\.be\/[a-zA-Z0-9_-]{11}[^\s]*/gi, type: 'youtube' },
320
+ { pattern: /https?:\/\/youtu\.be\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'youtube' },
321
+ { pattern: /https?:\/\/(?:www\.)?youtube\.com\/shorts\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'youtube' },
312
322
  { pattern: /https?:\/\/(?:www\.)?tiktok\.com\/@[\w.]+\/video\/\d{10,}[^\s]*/gi, type: 'tiktok' },
313
- { pattern: /https?:\/\/vm\.tiktok\.com\/[0-9a-zA-Z_-]{8,}[^\s]*/gi, type: 'tiktok' },
323
+ { pattern: /https?:\/\/vm\.tiktok\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'tiktok' },
324
+ { pattern: /https?:\/\/vt\.tiktok\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'tiktok' },
314
325
  { pattern: /https?:\/\/(?:www\.)?acfun\.cn\/v\/ac\d{10,}[^\s]*/gi, type: 'acfun' },
315
326
  { pattern: /https?:\/\/(?:www\.)?zhihu\.com\/video\/\d{10,}[^\s]*/gi, type: 'zhihu' },
316
- { pattern: /https?:\/\/weishi\.qq\.com\/weishi\/feed\/[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'weishi' },
317
- { pattern: /https?:\/\/(?:www\.)?huya\.com\/video\/[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'huya' },
318
- { pattern: /https?:\/\/haokan\.baidu\.com\/v\?vid=[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'haokan' },
327
+ { pattern: /https?:\/\/(?:www\.|m\.)?zhihu\.com\/question\/\d+\/answer\/\d+[^\s]*/gi, type: 'zhihu' },
328
+ { pattern: /https?:\/\/zhuanlan\.zhihu\.com\/p\/\d+[^\s]*/gi, type: 'zhihu' },
329
+ { pattern: /https?:\/\/(?:www\.|m\.)?zhihu\.com\/zvideo\/\d+[^\s]*/gi, type: 'zhihu' },
330
+ { pattern: /https?:\/\/weishi\.qq\.com\/weishi\/feed\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'weishi' },
331
+ { pattern: /https?:\/\/(?:www\.)?huya\.com\/video\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'huya' },
332
+ { pattern: /https?:\/\/haokan\.baidu\.com\/v\?vid=[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'haokan' },
319
333
  { pattern: /https?:\/\/(?:www\.)?meipai\.com\/media\/\d{10,}[^\s]*/gi, type: 'meipai' },
320
334
  { pattern: /https?:\/\/twitter\.com\/\w+\/status\/\d{10,}[^\s]*/gi, type: 'twitter' },
321
335
  { pattern: /https?:\/\/x\.com\/\w+\/status\/\d{10,}[^\s]*/gi, type: 'twitter' },
322
- { pattern: /https?:\/\/(?:www\.)?instagram\.com\/p\/[0-9a-zA-Z_-]{10,}[^\s]*/gi, type: 'instagram' },
336
+ { pattern: /https?:\/\/(?:www\.)?instagram\.com\/p\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'instagram' },
337
+ { pattern: /https?:\/\/(?:www\.)?instagram\.com\/reel\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'instagram' },
338
+ { pattern: /https?:\/\/(?:www\.)?instagram\.com\/share\/(?:reel|p)\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'instagram' },
323
339
  { pattern: /https?:\/\/(?:www\.)?doubao\.com\/video\/\d{10,}[^\s]*/gi, type: 'doubao' },
324
- { pattern: /https?:\/\/(?:www\.)?oasis\.weibo\.com\/v\/[0-9a-zA-Z_-]+[^\s]*/gi, type: 'oasis' },
325
- { pattern: /https?:\/\/channels\.weixin\.qq\.com\/[0-9a-zA-Z_-]+[^\s]*/gi, type: 'wechat_channel' },
326
- { pattern: /https?:\/\/weixin\.qq\.com\/sph\/[0-9a-zA-Z_-]+[^\s]*/gi, type: 'wechat_channel' },
340
+ { pattern: /https?:\/\/(?:www\.)?doubao\.com\/video-sharing\?[^\s]*/gi, type: 'doubao' },
341
+ { pattern: /https?:\/\/(?:www\.)?doubao\.com\/thread\/[^\s]+/gi, type: 'doubao_image' },
342
+ { pattern: /https?:\/\/(?:www\.)?jimeng\.jianying\.com\/[^\s]*/gi, type: 'jimeng' },
343
+ { pattern: /https?:\/\/(?:www\.)?jimeng\.cn\/[^\s]*/gi, type: 'jimeng' },
344
+ { pattern: /https?:\/\/(?:www\.)?dreamina\.jianying\.com\/[^\s]*/gi, type: 'jimeng' },
345
+ { pattern: /https?:\/\/(?:www\.)?dreamina\.capcut\.com\/[^\s]*/gi, type: 'jimeng' },
346
+ { pattern: /https?:\/\/(?:www\.)?oasis\.weibo\.com\/v\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'oasis' },
347
+ { pattern: /https?:\/\/channels\.weixin\.qq\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'wechat_channel' },
348
+ { pattern: /https?:\/\/weixin\.qq\.com\/sph\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'wechat_channel' },
327
349
  { pattern: /https?:\/\/(?:www\.)?pearvideo\.com\/video_\d+[^\s]*/gi, type: 'lishi' },
328
- { pattern: /https?:\/\/video\.li\/[0-9a-zA-Z_-]{3,}[^\s]*/gi, type: 'lishi' },
329
- { pattern: /https?:\/\/(?:www\.)?quanmin\.tv\/\w+[^\s]*/gi, type: 'quanmin' },
330
- { pattern: /https?:\/\/(?:www\.)?quanmintv\.cn\/\w+[^\s]*/gi, type: 'quanmin' },
350
+ { pattern: /https?:\/\/video\.li\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'lishi' },
351
+ { pattern: /https?:\/\/(?:www\.)?quanmin\.tv\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'quanmin' },
352
+ { pattern: /https?:\/\/(?:www\.)?quanmintv\.cn\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'quanmin' },
331
353
  { pattern: /https?:\/\/h5\.pipigx\.com\/pp\/post\/\d+[^\s]*/gi, type: 'pipigx' },
332
- { pattern: /https?:\/\/(?:www\.)?ippzone\.com\/\w+[^\s]*/gi, type: 'pipigx' },
333
- { pattern: /https?:\/\/(?:h5|www)\.pipix\.com\/\w+[^\s]*/gi, type: 'pipixia' },
334
- { pattern: /https?:\/\/(?:www\.)?pipixia\.com\/\w+[^\s]*/gi, type: 'pipixia' },
354
+ { pattern: /https?:\/\/(?:www\.)?ippzone\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'pipigx' },
355
+ { pattern: /https?:\/\/(?:h5|www)\.pipix\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'pipixia' },
356
+ { pattern: /https?:\/\/(?:www\.)?pipixia\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'pipixia' },
335
357
  { pattern: /https?:\/\/share\.xiaochuankeji\.cn\/hybrid\/share\/post\?pid=\d+[^\s]*/gi, type: 'zuiyou' },
336
- { pattern: /https?:\/\/(?:h5|www)\.izuiyou\.com\/\w+[^\s]*/gi, type: 'zuiyou' },
358
+ { pattern: /https?:\/\/(?:h5|www)\.izuiyou\.com\/[0-9a-zA-Z_\/-]+[^\s]*/gi, type: 'zuiyou' },
337
359
  ];
338
360
  function buildCustomLinkRules(customPlatforms) {
339
361
  if (!Array.isArray(customPlatforms) || customPlatforms.length === 0)
@@ -691,6 +713,11 @@ function apply(ctx, config) {
691
713
  const dedupCache = new SimpleLRUCache(1000, config.deduplicationInterval * 1000);
692
714
  const cacheTTL = (config.cacheTTL || 600) * 1000;
693
715
  const urlCacheLocal = new SimpleLRUCache(500, cacheTTL);
716
+ const contentDedupCache = new SimpleLRUCache(1000, config.deduplicationInterval * 1000);
717
+ function contentFingerprint(p) {
718
+ const imgSig = p.images?.length ? p.images.slice(0, 3).join('|') : (p.live_photo?.slice(0, 3).map(lp => lp.image).join('|') || '');
719
+ return [p.type, p.title, p.author, p.uid, p.video, imgSig].map(v => String(v ?? '')).join('::');
720
+ }
694
721
  const texts = {
695
722
  waitingTipText: config.waitingTipText || '正在解析视频,请稍候...',
696
723
  unsupportedPlatformText: config.unsupportedPlatformText || '不支持该平台链接',
@@ -753,6 +780,7 @@ function apply(ctx, config) {
753
780
  bilibili: 'https://api.bugpk.com/api/bilibili',
754
781
  douyin: 'https://api.bugpk.com/api/douyin',
755
782
  doubao: 'https://api.bugpk.com/api/dbvideos',
783
+ doubao_image: 'https://api.bugpk.com/api/dbduihua',
756
784
  kuaishou: 'https://api.bugpk.com/api/kuaishou',
757
785
  xiaohongshu: 'https://api.bugpk.com/api/xhs',
758
786
  jimeng: 'https://api.bugpk.com/api/jimengai',
@@ -989,9 +1017,17 @@ function apply(ctx, config) {
989
1017
  const fieldMapping = platformConf.fieldMapping;
990
1018
  const result = await processSingleUrl(match.url, match.type, fieldMapping, platformConf);
991
1019
  if (result.success) {
992
- items.push(result.data);
993
- if (config.deduplicationInterval > 0)
1020
+ if (config.deduplicationInterval > 0) {
1021
+ const fp = contentFingerprint(result.data.parsed);
1022
+ const lastDedup = contentDedupCache.get(fp);
1023
+ if (lastDedup && (Date.now() - lastDedup < config.deduplicationInterval * 1000)) {
1024
+ debugLog('INFO', `跳过重复内容: ${match.url}`);
1025
+ return;
1026
+ }
1027
+ contentDedupCache.set(fp, Date.now());
994
1028
  dedupCache.set(match.url, Date.now());
1029
+ }
1030
+ items.push(result.data);
995
1031
  }
996
1032
  else {
997
1033
  const item = texts.parseErrorItemFormat.replace(/\$\{url\}/g, match.url.length > 50 ? match.url.slice(0, 50) + '...' : match.url).replace(/\$\{msg\}/g, result.msg);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-video-parser-all",
3
3
  "description": "Koishi 全平台视频/图集解析插件,支持抖音/快手/B站/微博/小红书/剪映/YouTube/TikTok等20+平台",
4
- "version": "1.4.3",
4
+ "version": "1.4.5",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [
package/readme.md CHANGED
@@ -3,10 +3,10 @@
3
3
  ## 项目介绍 (Project Introduction)
4
4
 
5
5
  ### 中文
6
- 这是一个为 Koishi 机器人框架开发的**全平台视频/图集解析插件**,使用统一API接口,支持自动识别并解析抖音、快手、B站、小红书、微博、YouTube、TikTok、剪映、AcFun、知乎、虎牙、绿洲、视频号等20+主流平台的短视频/图集/实况链接。
6
+ 这是一个为 Koishi 机器人框架开发的**全平台视频/图集解析插件**,使用统一API接口,支持自动识别并解析抖音、快手、B站、小红书、微博、西瓜视频、YouTube、TikTokAcFun(A站)、知乎、微视、虎牙、好看视频、美拍、Twitter/X、Instagram、豆包(视频/图集)、**即梦(AI视频/图片)**、绿洲、视频号、梨视频、全民直播、皮皮搞笑、皮皮虾、最右等**20+主流平台**的短视频/图集/实况链接。
7
7
 
8
8
  ### English
9
- This is a **multi-platform video/image parsing plugin** developed for the Koishi bot framework, using a unified API interface to automatically recognize and parse short video/image/live photo links from 20+ mainstream platforms such as Douyin, Kuaishou, Bilibili, Xiaohongshu, Weibo, YouTube, TikTok, Jianying, AcFun, Zhihu, Huya, Oasis, WeChat Channels and more.
9
+ This is a **multi-platform video/image parsing plugin** developed for the Koishi bot framework, using a unified API interface to automatically recognize and parse short video/image/live photo links from **20+ mainstream platforms** such as Douyin, Kuaishou, Bilibili, Xiaohongshu, Weibo, Xigua, YouTube, TikTok, AcFun, Zhihu, Weishi, Huya, Haokan, Meipai, Twitter/X, Instagram, Doubao (video/images), **Jimeng (AI video/image)**, Oasis, WeChat Channels, Lishi, Quanmin, Pipigx, Pipixia, Zuiyou and more.
10
10
 
11
11
  ## 项目仓库 (Repository)
12
12
  - GitHub: `https://github.com/Minecraft-1314/koishi-plugin-video-parser-all`
@@ -143,34 +143,38 @@ This is a **multi-platform video/image parsing plugin** developed for the Koishi
143
143
  若启用 `downloadEngine: 'downloads'`,请安装可选依赖 `koishi-plugin-downloads`,失败时回退到内置下载。
144
144
 
145
145
  ## 支持的平台 (Supported Platforms)
146
- | 平台名称 | 关键词识别 | 解析能力 |
147
- |----------|------------|----------|
148
- | 哔哩哔哩 (B站) | bilibili, b23.tv, bilibili.com | 视频 |
149
- | 抖音 | douyin, v.douyin.com | 短视频、图集、实况 |
150
- | 快手 | kuaishou, v.kuaishou.com | 短视频、图集 |
151
- | 小红书 | xiaohongshu, xhslink.com | 图文、视频 |
152
- | 微博 | weibo, video.weibo.com | 视频、图集 |
153
- | 剪映 / 即梦 | jianying, jimeng.jianying.com | 视频模板 |
154
- | 今日头条 / 西瓜视频 | toutiao, ixigua.com | 短视频 |
155
- | AcFun(A站) | acfun, acfun.cn | 视频 |
156
- | 知乎 | zhihu, zhihu.com | 视频、回答 |
157
- | 微视 | weishi, weishi.qq.com | 短视频 |
158
- | 虎牙 | huya, huya.com | 直播、视频 |
159
- | YouTube(油管) | youtube, youtu.be | 视频 |
160
- | TikTok(国际版抖音) | tiktok, tiktok.com | 短视频 |
161
- | 好看视频 | haokan, haokan.baidu.com | 短视频 |
162
- | 美拍 | meipai, meipai.com | 短视频 |
163
- | Twitter / X | twitter, x.com | 视频、图文 |
164
- | Instagram | instagram, instagram.com | 图文、Reels |
165
- | 豆包 | doubao (doubao.com/video) | 视频 |
166
- | 皮皮搞笑 | pipigx, h5.pipigx.com | 短视频 |
167
- | 皮皮虾 | pipixia, h5.pipix.com | 短视频 |
168
- | 最右 | zuiyou, xiaochuankeji.cn | 短视频 |
169
- | 梨视频 | video.li, pearvideo.com | 短视频 |
170
- | 全民直播 | quanmin (quanmin.tv) | 直播 |
171
- | 绿洲 (Oasis) | oasis.weibo.com | 视频、图文 |
172
- | 视频号 (WeChat Channels) | channels.weixin.qq.com, weixin.qq.com/sph/ | 短视频 |
173
- | 🔧 自定义平台 | 通过 `customPlatforms` 添加 | 取决于 API |
146
+
147
+ > 以下为插件内置链接匹配规则,可根据用户发送的链接自动识别。所有匹配规则同时支持 HTTP 和 HTTPS 协议,并兼容多级路径(如短链后带 `/` 子路径)。
148
+
149
+ | 平台名称 | 关键词识别(匹配的域名/路径模式) | 解析能力 |
150
+ |----------|----------------------------------|----------|
151
+ | 哔哩哔哩 (B站) | `bilibili.com/video/`, `b23.tv`, `bili*.cn`, `b23.wtf`, `bili2233.cn` | 视频 |
152
+ | 抖音 | `douyin.com/video/`, `v.douyin.com` | 短视频、图集、实况 |
153
+ | 快手 | `kuaishou.com/short-video/`, `v.kuaishou.com`, `kuaishou.com/f/` | 短视频、图集 |
154
+ | 小红书 | `xiaohongshu.com/discovery/item/`, `xhslink.com`(含多级路径), `xiaohongshu.com/explore/`, `xiaohongshu.com/board/` | 图文、视频 |
155
+ | 微博 | `weibo.com/数字/`, `video.weibo.com/show`, `t.cn`, `m.weibo.cn` | 视频、图集 |
156
+ | 西瓜视频 | `ixigua.com` | 短视频 |
157
+ | YouTube | `youtube.com/watch`, `youtu.be`, `youtube.com/shorts/` | 视频 |
158
+ | TikTok | `tiktok.com/@/video/`, `vm.tiktok.com`, `vt.tiktok.com` | 短视频 |
159
+ | AcFun(A站) | `acfun.cn/v/ac` | 视频 |
160
+ | 知乎 | `zhihu.com/video/`, `zhihu.com/question/xxx/answer/xxx`, `zhuanlan.zhihu.com/p/`, `zhihu.com/zvideo/` | 视频、回答中的视频 |
161
+ | 微视 | `weishi.qq.com/weishi/feed/` | 短视频 |
162
+ | 虎牙 | `huya.com/video/` | 直播回放、视频 |
163
+ | 好看视频 | `haokan.baidu.com/v?vid=` | 短视频 |
164
+ | 美拍 | `meipai.com/media/` | 短视频 |
165
+ | Twitter / X | `twitter.com/用户名/status/`, `x.com/用户名/status/` | 视频、图文 |
166
+ | Instagram | `instagram.com/p/`, `instagram.com/reel/`, `instagram.com/share/` | 图文、Reels |
167
+ | 豆包(视频) | `doubao.com/video/`, `doubao.com/video-sharing` | 视频 |
168
+ | 豆包(图集) | `doubao.com/thread/` | 图文 |
169
+ | **即梦 (Jimeng)** | `jimeng.jianying.com`, `jimeng.cn`, `dreamina.jianying.com`, `dreamina.capcut.com` | AI视频、AI图片 |
170
+ | 绿洲 (Oasis) | `oasis.weibo.com/v/` | 视频、图文 |
171
+ | 视频号 (WeChat Channels) | `channels.weixin.qq.com`, `weixin.qq.com/sph/` | 短视频 |
172
+ | 梨视频 | `pearvideo.com/video_`, `video.li` | 短视频 |
173
+ | 全民直播 | `quanmin.tv`, `quanmintv.cn` | 直播 |
174
+ | 皮皮搞笑 | `h5.pipigx.com/pp/post/`, `ippzone.com` | 短视频 |
175
+ | 皮皮虾 | `pipix.com`, `pipixia.com` | 短视频 |
176
+ | 最右 | `share.xiaochuankeji.cn/hybrid/share/post`, `izuiyou.com` | 短视频 |
177
+ | 🔧 自定义平台 | 通过 `customPlatforms` 配置添加 | 取决于提供的 API |
174
178
 
175
179
  ## 项目贡献者 (Contributors)
176
180