koishi-plugin-weibo-post-monitor 1.0.2 → 1.0.3-beta.0
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 +70 -4
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -177,7 +177,9 @@ 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
|
}
|
|
182
184
|
const headers = {
|
|
183
185
|
"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",
|
|
@@ -200,29 +202,93 @@ async function getWeibo(config, callback, retry = false) {
|
|
|
200
202
|
body += chunk;
|
|
201
203
|
});
|
|
202
204
|
res.on("end", async () => {
|
|
205
|
+
if (res.statusCode !== 200) {
|
|
206
|
+
const statusCode = res.statusCode;
|
|
207
|
+
const bodyPreview = body.substring(0, 200);
|
|
208
|
+
const errorMsg = `[getWeibo] HTTP状态码错误: ${statusCode}`;
|
|
209
|
+
logger.error(`${errorMsg}, weiboUID: ${weiboUID}, 响应预览: ${bodyPreview}`);
|
|
210
|
+
if (statusCode === 403 && !retry && !is_using_cookie) {
|
|
211
|
+
logger.warn(`[getWeibo] 检测到403错误,尝试更新Cookie后重试。weiboUID: ${weiboUID}`);
|
|
212
|
+
try {
|
|
213
|
+
const randomUserAgent = getRandomUserAgent();
|
|
214
|
+
setUserAgent(randomUserAgent);
|
|
215
|
+
const newCookie = await fetchCookie();
|
|
216
|
+
setCookie(newCookie);
|
|
217
|
+
logger.info(`[getWeibo] Cookie更新成功,开始重试请求。weiboUID: ${weiboUID}`);
|
|
218
|
+
const retryResult = await getWeibo(config, callback, true);
|
|
219
|
+
resolve(retryResult);
|
|
220
|
+
} catch (retryError) {
|
|
221
|
+
const retryErrorMsg = `[getWeibo] 403错误重试失败。weiboUID: ${weiboUID}`;
|
|
222
|
+
logger.error(`${retryErrorMsg}, 原始错误: ${errorMsg}, 重试错误: ${retryError?.message || retryError}`);
|
|
223
|
+
reject({
|
|
224
|
+
error: new Error(`${retryErrorMsg}: ${retryError?.message || retryError}`),
|
|
225
|
+
body,
|
|
226
|
+
statusCode,
|
|
227
|
+
retryError,
|
|
228
|
+
errorType: "HTTP_403_RETRY_FAILED"
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
} else {
|
|
232
|
+
const finalErrorMsg = statusCode === 403 ? `[getWeibo] HTTP 403错误,已重试过或使用手动Cookie,无法自动重试。weiboUID: ${weiboUID}` : `[getWeibo] HTTP ${statusCode}错误。weiboUID: ${weiboUID}`;
|
|
233
|
+
logger.error(`${finalErrorMsg}, 响应预览: ${bodyPreview}`);
|
|
234
|
+
reject({
|
|
235
|
+
error: new Error(finalErrorMsg),
|
|
236
|
+
body,
|
|
237
|
+
statusCode,
|
|
238
|
+
errorType: statusCode === 403 ? "HTTP_403_NO_RETRY" : `HTTP_${statusCode}`
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
203
243
|
try {
|
|
204
244
|
const returnData = JSON.parse(body);
|
|
205
245
|
callback?.(returnData);
|
|
206
246
|
resolve(returnData);
|
|
207
247
|
} catch (error) {
|
|
248
|
+
const parseErrorMsg = `[getWeibo] JSON解析失败`;
|
|
249
|
+
logger.error(`${parseErrorMsg}, weiboUID: ${weiboUID}, 错误: ${error?.message || error}, 响应体预览: ${body.substring(0, 200)}`);
|
|
208
250
|
if (!retry && !is_using_cookie) {
|
|
251
|
+
logger.warn(`[getWeibo] JSON解析失败,尝试更新Cookie后重试。weiboUID: ${weiboUID}`);
|
|
209
252
|
try {
|
|
210
253
|
const randomUserAgent = getRandomUserAgent();
|
|
211
254
|
setUserAgent(randomUserAgent);
|
|
212
255
|
const newCookie = await fetchCookie();
|
|
213
256
|
setCookie(newCookie);
|
|
257
|
+
logger.info(`[getWeibo] Cookie更新成功,开始重试请求。weiboUID: ${weiboUID}`);
|
|
214
258
|
const retryResult = await getWeibo(config, callback, true);
|
|
215
259
|
resolve(retryResult);
|
|
216
260
|
} catch (retryError) {
|
|
217
|
-
|
|
261
|
+
const retryErrorMsg = `[getWeibo] JSON解析错误重试失败`;
|
|
262
|
+
logger.error(`${retryErrorMsg}, weiboUID: ${weiboUID}, 原始错误: ${error?.message || error}, 重试错误: ${retryError?.message || retryError}`);
|
|
263
|
+
reject({
|
|
264
|
+
error: new Error(`${retryErrorMsg}: ${retryError?.message || retryError}`),
|
|
265
|
+
body,
|
|
266
|
+
retryError,
|
|
267
|
+
originalError: error,
|
|
268
|
+
errorType: "JSON_PARSE_RETRY_FAILED"
|
|
269
|
+
});
|
|
218
270
|
}
|
|
219
271
|
} else {
|
|
220
|
-
|
|
272
|
+
const finalErrorMsg = `[getWeibo] JSON解析失败,已重试过或使用手动Cookie,无法自动重试`;
|
|
273
|
+
logger.error(`${finalErrorMsg}, weiboUID: ${weiboUID}, 错误: ${error?.message || error}`);
|
|
274
|
+
reject({
|
|
275
|
+
error: new Error(`${finalErrorMsg}: ${error?.message || error}`),
|
|
276
|
+
body,
|
|
277
|
+
originalError: error,
|
|
278
|
+
errorType: "JSON_PARSE_NO_RETRY"
|
|
279
|
+
});
|
|
221
280
|
}
|
|
222
281
|
}
|
|
223
282
|
});
|
|
224
283
|
res.on("error", (error) => {
|
|
225
|
-
|
|
284
|
+
const networkErrorMsg = `[getWeibo] 网络请求错误`;
|
|
285
|
+
logger.error(`${networkErrorMsg}, weiboUID: ${weiboUID}, 错误: ${error?.message || error}, 已接收数据: ${body.substring(0, 100)}`);
|
|
286
|
+
reject({
|
|
287
|
+
error: new Error(`${networkErrorMsg}: ${error?.message || error}`),
|
|
288
|
+
body,
|
|
289
|
+
originalError: error,
|
|
290
|
+
errorType: "NETWORK_ERROR"
|
|
291
|
+
});
|
|
226
292
|
});
|
|
227
293
|
});
|
|
228
294
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-weibo-post-monitor",
|
|
3
3
|
"description": "微博帖子更新推送插件,用于获取指定微博用户的最新帖子推送到指定群聊,参考代码https://github.com/moehuhu/weibo-monitor",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.3-beta.0",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|