diff --git a/apps/tools.js b/apps/tools.js
index 7eccba3..6d1724e 100644
--- a/apps/tools.js
+++ b/apps/tools.js
@@ -13,6 +13,7 @@ import { mkdirsSync } from "../utils/file.js";
import { downloadBFile, getDownloadUrl, mergeFileToMp4, getDynamic } from "../utils/bilibili.js";
import { parseUrl, parseM3u8, downloadM3u8Videos, mergeAcFileToMp4 } from "../utils/acfun.js";
import { transMap, douyinTypeMap } from "../utils/constant.js"
+import { retry } from "../utils/common.js";
import config from "../model/index.js";
@@ -120,34 +121,39 @@ export class tools extends plugin {
const douId = douRex.exec(res)[1];
// 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 resp = await fetch(url);
- const json = await resp.json();
- const item = json.aweme_detail;
- e.reply(`识别:抖音, ${item.desc}`);
- const url_type_code = item.aweme_type;
- const url_type = douyinTypeMap[url_type_code];
- if (url_type === "video") {
- const url_2 = item.video.play_addr.url_list[0];
- this.downloadVideo(url_2).then(video => {
- e.reply(
- segment.video(
- `${this.defaultPath}${this.e.group_id || this.e.user_id}/temp.mp4`
- )
- );
- });
- } else if (url_type === "image") {
- // 无水印图片列表/No watermark image list
- // let no_watermark_image_list = []
- // 有水印图片列表/With watermark image list
- // let watermark_image_list = []
- for (let i of item.images) {
+ // 默认重试3次,每次间隔1s (防止SyntaxError: Unexpected token b in JSON at position 0)
+ retry(
+ await (function (){
+ return fetch(url).then(resp => resp.json())
+ })
+ ).then(resp_json => {
+ const item = resp_json.aweme_detail;
+ e.reply(`识别:抖音, ${item.desc}`);
+ const url_type_code = item.aweme_type;
+ const url_type = douyinTypeMap[url_type_code];
+ if (url_type === "video") {
+ const url_2 = item.video.play_addr.url_list[0];
+ this.downloadVideo(url_2).then(video => {
+ e.reply(
+ segment.video(
+ `${this.defaultPath}${this.e.group_id || this.e.user_id}/temp.mp4`
+ )
+ );
+ });
+ } else if (url_type === "image") {
// 无水印图片列表
- // no_watermark_image_list.push(i.url_list[0])
+ // let no_watermark_image_list = []
// 有水印图片列表
- // watermark_image_list.push(i.download_url_list[0])
- e.reply(segment.image(i.download_url_list[0]));
+ // let watermark_image_list = []
+ for (let i of item.images) {
+ // 无水印图片列表
+ // no_watermark_image_list.push(i.url_list[0])
+ // 有水印图片列表
+ // watermark_image_list.push(i.download_url_list[0])
+ e.reply(segment.image(i.url_list[0]));
+ }
}
- }
+ })
});
return true;
}
diff --git a/config/version.yaml b/config/version.yaml
index 3b9a42c..f054f68 100644
--- a/config/version.yaml
+++ b/config/version.yaml
@@ -1,5 +1,5 @@
- {
- version: 1.0.5,
+ version: 1.0.6,
data:
[
适配锅巴插件,方便查看和修改配置,
diff --git a/utils/common.js b/utils/common.js
index 657f012..3ca7604 100644
--- a/utils/common.js
+++ b/utils/common.js
@@ -43,4 +43,29 @@ function autoTask(func, time, groupList, isAutoPush = false) {
}
}
-export { jFeatch, autoTask };
+/**
+ * 重试函数(暂时只用于抖音的api)
+ * @param func
+ * @param maxRetries
+ * @param delay
+ * @returns {Promise}
+ */
+function retry(func, maxRetries = 3, delay = 1000) {
+ return new Promise((resolve, reject) => {
+ const attempt = (remainingTries) => {
+ func()
+ .then(resolve)
+ .catch(error => {
+ if (remainingTries === 1) {
+ reject(error);
+ } else {
+ console.log(`错误: ${error}. 重试将在 ${delay/1000} 秒...`);
+ setTimeout(() => attempt(remainingTries - 1), delay);
+ }
+ });
+ };
+ attempt(maxRetries);
+ });
+}
+
+export { jFeatch, autoTask, retry };