koishi-plugin-weibo-post-monitor 1.0.2 → 1.0.3
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.js +68 -41
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -161,7 +161,7 @@ __name(fetchCookie, "fetchCookie");
|
|
|
161
161
|
var import_koishi2 = require("koishi");
|
|
162
162
|
|
|
163
163
|
// src/services/weibo.ts
|
|
164
|
-
var
|
|
164
|
+
var import_axios2 = __toESM(require("axios"));
|
|
165
165
|
async function getWeibo(config, callback, retry = false) {
|
|
166
166
|
const { weiboUID, is_using_cookie } = config;
|
|
167
167
|
if (!weiboUID) {
|
|
@@ -177,8 +177,15 @@ async function getWeibo(config, callback, retry = false) {
|
|
|
177
177
|
setCookie(auto_cookie2);
|
|
178
178
|
}
|
|
179
179
|
if (!auto_cookie2) {
|
|
180
|
-
|
|
180
|
+
const errorMsg = `[getWeibo] Cookie配置为空,请检查配置。weiboUID: ${weiboUID}, is_using_cookie: ${is_using_cookie}`;
|
|
181
|
+
logger.error(errorMsg);
|
|
182
|
+
throw new Error(errorMsg);
|
|
181
183
|
}
|
|
184
|
+
const extractXSRFToken = /* @__PURE__ */ __name((cookie) => {
|
|
185
|
+
const match = cookie.match(/XSRF-TOKEN=([^;]+)/i);
|
|
186
|
+
return match ? match[1] : void 0;
|
|
187
|
+
}, "extractXSRFToken");
|
|
188
|
+
const xsrfToken = extractXSRFToken(auto_cookie2);
|
|
182
189
|
const headers = {
|
|
183
190
|
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
|
184
191
|
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
|
@@ -187,45 +194,65 @@ async function getWeibo(config, callback, retry = false) {
|
|
|
187
194
|
"referer": "https://www.weibo.com/u/" + weiboUID,
|
|
188
195
|
"user-agent": now_user_agent2 || ""
|
|
189
196
|
};
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
197
|
+
if (xsrfToken) {
|
|
198
|
+
headers["x-xsrf-token"] = xsrfToken;
|
|
199
|
+
}
|
|
200
|
+
const url = `https://www.weibo.com/ajax/statuses/mymblog?uid=${weiboUID}`;
|
|
201
|
+
try {
|
|
202
|
+
const response = await import_axios2.default.get(url, {
|
|
203
|
+
headers,
|
|
204
|
+
responseType: "json",
|
|
205
|
+
timeout: 1e4
|
|
206
|
+
});
|
|
207
|
+
const returnData = response.data;
|
|
208
|
+
callback?.(returnData);
|
|
209
|
+
return returnData;
|
|
210
|
+
} catch (error) {
|
|
211
|
+
if (error.response) {
|
|
212
|
+
const statusCode = error.response.status;
|
|
213
|
+
const bodyPreview = JSON.stringify(error.response.data).substring(0, 200);
|
|
214
|
+
const errorMsg = `[getWeibo] HTTP状态码错误: ${statusCode}`;
|
|
215
|
+
logger.error(`${errorMsg}, weiboUID: ${weiboUID}, 响应预览: ${bodyPreview}`);
|
|
216
|
+
if (statusCode === 403 && !retry && !is_using_cookie) {
|
|
217
|
+
logger.warn(`[getWeibo] 检测到403错误,尝试更新Cookie后重试。weiboUID: ${weiboUID}`);
|
|
203
218
|
try {
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
219
|
+
const randomUserAgent = getRandomUserAgent();
|
|
220
|
+
setUserAgent(randomUserAgent);
|
|
221
|
+
const newCookie = await fetchCookie();
|
|
222
|
+
setCookie(newCookie);
|
|
223
|
+
logger.info(`[getWeibo] Cookie更新成功,开始重试请求。weiboUID: ${weiboUID}`);
|
|
224
|
+
const retryResult = await getWeibo(config, callback, true);
|
|
225
|
+
return retryResult;
|
|
226
|
+
} catch (retryError) {
|
|
227
|
+
const retryErrorMsg = `[getWeibo] 403错误重试失败。weiboUID: ${weiboUID}`;
|
|
228
|
+
logger.error(`${retryErrorMsg}, 原始错误: ${errorMsg}, 重试错误: ${retryError?.message || retryError}`);
|
|
229
|
+
throw {
|
|
230
|
+
error: new Error(`${retryErrorMsg}: ${retryError?.message || retryError}`),
|
|
231
|
+
body: error.response.data,
|
|
232
|
+
statusCode,
|
|
233
|
+
retryError,
|
|
234
|
+
errorType: "HTTP_403_RETRY_FAILED"
|
|
235
|
+
};
|
|
222
236
|
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
237
|
+
} else {
|
|
238
|
+
const finalErrorMsg = statusCode === 403 ? `[getWeibo] HTTP 403错误,已重试过或使用手动Cookie,无法自动重试。weiboUID: ${weiboUID}` : `[getWeibo] HTTP ${statusCode}错误。weiboUID: ${weiboUID}`;
|
|
239
|
+
logger.error(`${finalErrorMsg}, 响应预览: ${bodyPreview}`);
|
|
240
|
+
throw {
|
|
241
|
+
error: new Error(finalErrorMsg),
|
|
242
|
+
body: error.response.data,
|
|
243
|
+
statusCode,
|
|
244
|
+
errorType: statusCode === 403 ? "HTTP_403_NO_RETRY" : `HTTP_${statusCode}`
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const networkErrorMsg = `[getWeibo] 网络请求错误`;
|
|
249
|
+
logger.error(`${networkErrorMsg}, weiboUID: ${weiboUID}, 错误: ${error?.message || error}`);
|
|
250
|
+
throw {
|
|
251
|
+
error: new Error(`${networkErrorMsg}: ${error?.message || error}`),
|
|
252
|
+
originalError: error,
|
|
253
|
+
errorType: "NETWORK_ERROR"
|
|
254
|
+
};
|
|
255
|
+
}
|
|
229
256
|
}
|
|
230
257
|
__name(getWeibo, "getWeibo");
|
|
231
258
|
|
|
@@ -339,7 +366,7 @@ function stripHtmlTags(html) {
|
|
|
339
366
|
__name(stripHtmlTags, "stripHtmlTags");
|
|
340
367
|
|
|
341
368
|
// src/services/message.ts
|
|
342
|
-
var
|
|
369
|
+
var import_axios3 = __toESM(require("axios"));
|
|
343
370
|
async function getWeiboAndSendMessageToGroup(ctx, params) {
|
|
344
371
|
const [err, res] = await to(getWeibo(params));
|
|
345
372
|
if (err) {
|
|
@@ -478,7 +505,7 @@ async function getDetailMessage(wb_url) {
|
|
|
478
505
|
if (xsrfToken) {
|
|
479
506
|
headers["x-xsrf-token"] = xsrfToken;
|
|
480
507
|
}
|
|
481
|
-
const response = await
|
|
508
|
+
const response = await import_axios3.default.get(wb_url, {
|
|
482
509
|
headers,
|
|
483
510
|
responseType: "json",
|
|
484
511
|
timeout: 1e4
|
package/package.json
CHANGED