Ready for release: Includes Auto-cron, Installer, and Schema
This commit is contained in:
51
fetch.php
Normal file
51
fetch.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?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&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;
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user