UNPKG

koishi-plugin-nitter-rss

Version:

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

91 lines (90 loc) 3.33 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseTwitterLink = exports.cleanText = exports.formatLocalTime = exports.parseTimestamp = exports.removeHTMLTags = void 0; const moment_1 = __importDefault(require("moment")); const cheerio_1 = __importDefault(require("cheerio")); //移除HTML标签 function removeHTMLTags(inputText) { // 使用Cheerio加载HTML文本 const $ = cheerio_1.default.load(inputText); // 处理所有链接,将链接文本替换为链接地址 $('a').each((index, element) => { const linkUrl = $(element).attr('href'); if (linkUrl.startsWith('http')) { $(element).replaceWith(linkUrl); } }); // 获取纯文本内容 const plainText = $.text(); return plainText; } exports.removeHTMLTags = removeHTMLTags; //时间文本转时间戳 function parseTimestamp(timestampText) { // 尝试解析 'MMM D, YYYY · h:mm A UTC' 格式的时间文本 const parsedTimestamp1 = moment_1.default.utc(timestampText, 'MMM D, YYYY · h:mm A UTC', 'en'); // 尝试解析 'ddd, DD MMM YYYY HH:mm:ss GMT' 格式的时间文本 const parsedTimestamp2 = moment_1.default.utc(timestampText, 'ddd, DD MMM YYYY HH:mm:ss GMT', 'en'); // 如果其中一个解析成功,则返回时间戳 if (parsedTimestamp1.isValid()) { return parsedTimestamp1.valueOf(); } else if (parsedTimestamp2.isValid()) { return parsedTimestamp2.valueOf(); } else { console.error('Invalid timestamp:', timestampText); return null; } } exports.parseTimestamp = parseTimestamp; //时间戳转本地时间文本 function formatLocalTime(timestamp) { const date = new Date(timestamp); return date.toLocaleString('zh-CN'); } exports.formatLocalTime = formatLocalTime; function cleanText(inputText) { //清除所有行的左侧空格 const lines = inputText.split('\n'); const cleanedLines = lines.map(line => line.trim()); //开头的所有\n改为'' while (cleanedLines[0] == '') { cleanedLines.shift(); } //组合 let cleanedText = cleanedLines.join('\n'); //如果有连续超过2个空行,改为2个'\n'。 cleanedText = cleanedText.replace(/\n{3,}/g, '\n\n'); return cleanedText; } exports.cleanText = cleanText; //解析Twitter链接 async function parseTwitterLink(link) { try { const isTwitterLink = link.includes('twitter.com') || link.includes('nitter') || link.includes('x.com'); ; let account = null; let id = null; if (isTwitterLink) { const parts = link.split('/'); if (parts.length >= 4) { account = parts[3]; } const tweetIdMatch = link.match(/\/status\/(\d+)/); if (tweetIdMatch) { id = tweetIdMatch[1]; } } return { isTwitterLink, account, id }; } catch (error) { console.error('Error parsing Twitter link:', error); return { isTwitterLink: false, account: null, id: null }; } } exports.parseTwitterLink = parseTwitterLink; exports.default = parseTwitterLink;