koishi-plugin-nitter-rss
Version:
订阅 X (Twitter) 内容,使用 nitter.cz,支持ChatGPT与Gradio Chatbot翻译
61 lines (60 loc) • 2.75 kB
JavaScript
;
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;