/** * Google adapter utilities. * Shared RSS parser for news and trends commands. */ /** * Parse RSS XML by splitting into blocks, then extracting fields per block. * Handles both plain text and CDATA-wrapped content. */ export function parseRssItems(xml, fields) { const items = xml.match(/([\s\S]*?)<\/item>/g) || []; return items.map(block => { const record = {}; for (const field of fields) { // Escape regex special characters in field name (e.g. ht:approx_traffic is safe, but defensive) const escaped = field.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Handle tags with attributes (e.g. text) and CDATA wrapping // (?:\s[^>]*)? ensures we don't match prefix tags (e.g. when looking for ) const match = block.match(new RegExp(`<${escaped}(?:\\s[^>]*)?>(?:)?`)); record[field] = match ? match[1].trim() : ''; } return record; }); }