From 86a066133670ed70a75cecb2d94451032cd358f1 Mon Sep 17 00:00:00 2001 From: SansGuidon Date: Tue, 3 Dec 2024 00:25:49 +0000 Subject: [PATCH] change(cron): filter keywords out of link list --- cron/generate_indieblog_daily_rss.php | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/cron/generate_indieblog_daily_rss.php b/cron/generate_indieblog_daily_rss.php index 11edd58..8d8253f 100644 --- a/cron/generate_indieblog_daily_rss.php +++ b/cron/generate_indieblog_daily_rss.php @@ -6,6 +6,20 @@ $rssFile = "/app/data/public/indieblogv2_feed.xml"; $cacheFile = "/app/data/cache/indieblogv2_cache.txt"; $cutoffDate = strtotime('-10 days'); // Seulement les 10 derniers jours +// Liste des mots/expressions à exclure (insensibilité à la casse activée avec `(?i)`) +$excludePatterns = [ + '(?i)(azure|powershell|rimworld|Olympique|Olympic|Paris 2024|sportif|windows|twitter|freebsd|mastodon)', + '(?i)(metalcore|deathcore|death metal|black metal|death punk|deathpunk|djent|blackmetal|blackened)', + '(?i)(JO|foot)', + '(?i)(guerre|bluesky|combat|terror|craindre|fear|décliner|declin|climat|inégalité|fuite|ont fui|a fui|musk|tesla|voitures|dying|indifference|feux|abandon|chômage|scam|arnaque|fraud|craindre|inquiét|openai|victime|violence|violent|violemm|pénurie|impôt|taxes|deuil|chasse|bombes|a perdu|vide exist|fake|poursuivi|subir|pauvre|riches|politique|politic|Macron|marine le pen|michel barnier|zemmour|Matignon|tremble|aucun n\'a|décès|crise|difficile|marre|action contre|irrecevable|pollution|élimination|pourrai|tourisme|mauvaise humeur|stress|dangereux|détruit|insupportable|de droite|souffre|chaleur|cyber|attaque|extrême.droite|risque|travail|offensi|sacrif|canard pc|photos|videos|crisis|trump|nocif|negatif|négative|pollution|poids|plainte|escro|usurp|contamin|advertising|anniversary edition|en voyage|extermin|kamikaze|nationalis|mittal|est prévu pour 202|is planned for|due in 202|incendies|fires|inondation|ligue 1|le suicide|gaza|terreur|capitalism|attentat|calvaire|calvitie|la gauche|esclave|paris|ségrégation|athlète|précarité|Hezbollah|Israël|morts|frappes|marine lepen|dérives|un drame|sans-abri|protobuf|paralympique|nazi|mélenchon|ministre|Review: (?:[1-3]\.\d|[1-2]\.\d|3\.0)/5\.0|licenciement|misère|du jamais vu|il faut|Palestiniens|israél|palestine|vaccin|mpox|épidémie|violeur|rapist|pédo|criminel|poutine|le RN |réseau social x|gendarme|policier|kurde|condamnation|perquisition|incendi|gabriel attal|attaqué|justice|tués par|tué par|snapdragon|qualcomm|porn|barnier|occultes|désinformation|immigration|racism|spacex|islam|condamné|de viol|pour viol)' +]; + +// Corrige les barres obliques pour qu'elles ne cassent pas `preg_match` +$excludePatterns = array_map(fn($pattern) => str_replace('/', '\/', $pattern), $excludePatterns); + +// Crée une expression régulière unique pour matcher toutes les exclusions +$excludeRegex = '/' . implode('|', $excludePatterns) . '/i'; + @mkdir(dirname($rssFile), 0777, true); @mkdir(dirname($cacheFile), 0777, true); @@ -17,11 +31,12 @@ if (!$data) die("Error: Invalid JSON data from $jsonUrl\n"); $includedIds = file_exists($cacheFile) ? file($cacheFile, FILE_IGNORE_NEW_LINES) : []; -// Filtrer les éléments récents et non déjà inclus -$newItems = array_filter($data, function ($item) use ($includedIds, $cutoffDate) { - return isset($item['published'], $item['itemid']) && +// Filtrer les articles récents, non déjà inclus, et ne contenant pas de termes exclus +$newItems = array_filter($data, function ($item) use ($includedIds, $cutoffDate, $excludeRegex) { + return isset($item['published'], $item['itemid'], $item['itemtitle']) && !in_array($item['itemid'], $includedIds) && - $item['published'] >= $cutoffDate; // Publie dans les 10 derniers jours + $item['published'] >= $cutoffDate && + !preg_match($excludeRegex, $item['itemtitle']); // Exclure si le titre contient des termes interdits }); usort($newItems, fn($a, $b) => $b['published'] <=> $a['published']); @@ -36,9 +51,9 @@ foreach ($newItems as $item) { $rss = new SimpleXMLElement(''); $channel = $rss->addChild('channel'); -$channel->addChild('title', 'IndieBlog Feed (Last 10 Days)'); +$channel->addChild('title', 'IndieBlog Feed (Filtered, Last 10 Days)'); $channel->addChild('link', 'https://indieblog.page/'); -$channel->addChild('description', 'RSS feed of articles from the last 10 days'); +$channel->addChild('description', 'RSS feed of articles from the last 10 days, excluding unwanted topics'); $channel->addChild('language', 'en'); $newEntries = [];