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.
Files changed (2) hide show
  1. package/lib/index.js +68 -41
  2. 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 import_https = __toESM(require("https"));
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
- throw new Error("Cookie config is null, please check the config");
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
- const options = {
191
- hostname: "www.weibo.com",
192
- path: "/ajax/statuses/mymblog?uid=" + weiboUID,
193
- method: "GET",
194
- headers
195
- };
196
- return new Promise((resolve, reject) => {
197
- import_https.default.get(options, (res) => {
198
- let body = "";
199
- res.on("data", (chunk) => {
200
- body += chunk;
201
- });
202
- res.on("end", async () => {
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 returnData = JSON.parse(body);
205
- callback?.(returnData);
206
- resolve(returnData);
207
- } catch (error) {
208
- if (!retry && !is_using_cookie) {
209
- try {
210
- const randomUserAgent = getRandomUserAgent();
211
- setUserAgent(randomUserAgent);
212
- const newCookie = await fetchCookie();
213
- setCookie(newCookie);
214
- const retryResult = await getWeibo(config, callback, true);
215
- resolve(retryResult);
216
- } catch (retryError) {
217
- reject({ error, body, retryError });
218
- }
219
- } else {
220
- reject({ error, body });
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
- res.on("error", (error) => {
225
- reject({ error, body });
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 import_axios2 = __toESM(require("axios"));
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 import_axios2.default.get(wb_url, {
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
@@ -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.2",
4
+ "version": "1.0.3",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [