const parseDateFromNewsUrl = (url: string): Date | null => { const urlSegments = url.split('/'); const lastSegment = urlSegments[urlSegments.length - 1]; // Extract timestamp from the filename // Filenames are expected to be in the format CC-NEWS-YYYYMMDDhhmmss-xxxxx.warc.gz const timestampMatch = lastSegment?.match(/\d{14}/); if (!timestampMatch) { console.error('No timestamp found in URL'); return null; } // Convert timestamp to date object // YYYYMMDDhhmmss const timestampStr = timestampMatch[0]; const year = parseInt(timestampStr.slice(0, 4), 10); const month = parseInt(timestampStr.slice(4, 6), 10) - 1; // Months are 0-indexed in JavaScript const day = parseInt(timestampStr.slice(6, 8), 10); const hour = parseInt(timestampStr.slice(8, 10), 10); const minute = parseInt(timestampStr.slice(10, 12), 10); const second = parseInt(timestampStr.slice(12, 14), 10); const date = new Date(Date.UTC(year, month, day, hour, minute, second)); return date; }; const createNewsWarcSourceName = (url: string): string | null => { const date = parseDateFromNewsUrl(url); if (!date) return null; const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); const hour = date.getHours(); return `${month}-${day}-${year} ${hour}:00:00`; }; const WarcUtil = { parseDateFromNewsUrl, createNewsWarcSourceName, }; export default WarcUtil;