Files
rss-catcher/fetch.php

51 lines
1.5 KiB
PHP

<?php
require 'config.php';
require 'vendor/autoload.php'; // Or manual include if not using composer
$feed = new SimplePie();
$feed->set_cache_location(__DIR__ . '/cache');
// 1. Get feeds
$stmt = $pdo->query("SELECT id, rss_url FROM feeds");
$feeds_list = $stmt->fetchAll();
foreach ($feeds_list as $row) {
$feed->set_feed_url($row['rss_url']);
$feed->init();
$feed->handle_content_type();
foreach ($feed->get_items() as $item) {
// FIX: Decode HTML entities so "AT&amp;T" becomes "AT&T"
$title = html_entity_decode($item->get_title(), ENT_QUOTES | ENT_HTML5);
$desc = html_entity_decode($item->get_description(), ENT_QUOTES | ENT_HTML5);
$link = $item->get_permalink();
$date = $item->get_date('Y-m-d H:i:s');
if (!$date) { $date = date('Y-m-d H:i:s'); }
$sql = "INSERT IGNORE INTO items (feed_id, title, link, description, pub_date)
VALUES (?, ?, ?, ?, ?)";
$stmtInsert = $pdo->prepare($sql);
$stmtInsert->execute([$row['id'], $title, $link, $desc, $date]);
}
}
// --- CLEANUP ROUTINE ---
// Delete articles older than 30 days, BUT KEEP items marked as 'is_saved'
$days_to_keep = 30;
$sql_cleanup = "DELETE FROM items
WHERE pub_date < DATE_SUB(NOW(), INTERVAL ? DAY)
AND is_saved = 0";
$stmtCleanup = $pdo->prepare($sql_cleanup);
$stmtCleanup->execute([$days_to_keep]);
// -----------------------
// 2. Redirect back to dashboard immediately
header("Location: index.php");
exit;
?>