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