UNPKG

koishi-plugin-nitter-rss

Version:

订阅 X (Twitter) 内容,使用 nitter.cz,支持ChatGPT与Gradio Chatbot翻译

61 lines (60 loc) 2.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTwitterList = void 0; const koishi_1 = require("koishi"); const xml2js_1 = require("xml2js"); const utils_1 = require("./utils"); const logger = new koishi_1.Logger('nitter-rss-rss'); async function getTwitterList(nitterUrl, ctx, account) { const url = `https://${nitterUrl}/${account}/rss`; try { const response = await ctx.http.axios(url, { responseType: 'text' }); if (response.status === 200) { const xml = response.data; const parsedXml = await new Promise((resolve, reject) => { (0, xml2js_1.parseString)(xml, { explicitArray: false }, (error, result) => { if (error) { console.error('Error parsing XML:', error); reject(error); } else { if (result.rss.channel.item) { logger.success(`RSS解析成功: ${account}`); //把所有item的pubDate转化为时间戳,并且按照时间戳排序 result.rss.channel.item.forEach((item) => { item.pubDate = (0, utils_1.parseTimestamp)(item.pubDate); item.description = (0, utils_1.removeHTMLTags)(item.description); item.title = (0, utils_1.removeHTMLTags)(item.title); //通过title是否为"R to"来判断是否为转推 item.isRetweet = item.title.startsWith('R to'); }); result.rss.channel.item.sort((a, b) => { return b.pubDate - a.pubDate; }); resolve(result.rss.channel.item); } else { console.error('Error parsing XML:', error); reject(new Error(`RSS解析失败: ${account}`)); } } }); }); return parsedXml; } else { console.error('XML file not found:', url); throw new Error('用户不存在'); // 手动抛出自定义错误 } } catch (error) { if (error.response?.status === 404) { console.error('XML file not found:', url); throw new Error('用户不存在'); // 手动抛出自定义错误 } else { throw new Error(`Failed to download XML: ${error}`); } } } exports.getTwitterList = getTwitterList;