$dates) { foreach ($dates as $date => $links) { if ($date !== $todayDate) { unset($previousState[$url][$date]); } } } // Save updated state file_put_contents($stateFile, json_encode($previousState)); } // Send news to Telegram channel if (!empty($formattedMessages)) { writeToLog("Sending " . count($formattedMessages) . " messages to Telegram"); sendToTelegram($formattedMessages); } else { writeToLog("No new messages to send"); } writeToLog("Script completed"); /** * Write message to log file with timestamp */ function writeToLog($txt) { global $logFile; $timestamp = date('[Y-m-d H:i:s]'); $logMessage = $timestamp . ' ' . $txt . "\n"; error_log($logMessage, 3, $logFile); } /** * Read and filter today's news from RSS feed */ function readAndFilterRSS($url, $instantView, $targetDate, $sentLinks) { global $formattedMessages; try { // Load RSS feed using SimpleXML $feed = simplexml_load_file($url); if ($feed === false) { writeToLog('Error: Failed to load RSS feed - ' . $url); throw new Exception('Failed to load RSS feed: ' . $url); } $channelTitle = (string)$feed->channel->title; $newItems = []; // Process each item in the feed foreach ($feed->channel->item as $item) { $pubDate = new DateTime($item->pubDate); // Check if news is from target date and hasn't been sent already if ($pubDate->format('Y-m-d') == $targetDate && !in_array((string)$item->link, $sentLinks)) { $newItems[] = [ 'title' => (string)$item->title, 'link' => (string)$item->link, ]; // Prepare formatted message for Telegram $formattedMessages[] = prepareTelegramMessage($item, $instantView, $channelTitle); } } return $newItems; } catch (Exception $e) { writeToLog('Error processing RSS feed: ' . $e->getMessage()); return []; } } /** * Extract links from news array */ function getNewsLinks($news) { return array_map(function ($item) { return $item['link']; }, $news); } /** * Send messages to Telegram channel */ function sendToTelegram($messages) { global $channelId, $apiToken; foreach ($messages as $message) { $data = [ 'chat_id' => $channelId, 'text' => $message[0], 'parse_mode' => "HTML", ]; $response = file_get_contents("https://api.telegram.org/bot$apiToken/sendMessage?" . http_build_query($data)); if ($response !== false && $response !== "") { writeToLog('Message sent successfully: ' . $message[1]); } else { writeToLog('Failed to send message: ' . $message[1]); // Wait before retry sleep(2); } } writeToLog('Total messages sent to Telegram channel: ' . count($messages)); } /** * Prepare formatted message for Telegram */ function prepareTelegramMessage($item, $instantView, $channelTitle) { $itemTitle = (string)$item->title; $itemLink = (string)$item->link; $itemDesc = (string)$item->description; $itemDesc = strip_tags($itemDesc, ",,,,"); $itemPubDate = (string)$item->pubDate; $timestamp = strtotime($itemPubDate); $pubDate = date("d/m/Y", $timestamp); $message = ""; // Add instant view if available if ($instantView !== "") { $instViewUrl = "https://t.me/iv?url=" . $itemLink . "&rhash=" . $instantView; $invisibleUrl = ""; $message .= $invisibleUrl; } // Format message $message .= "Source: " . $channelTitle . " - " . $pubDate . "" . PHP_EOL; $message .= PHP_EOL; $message .= "" . $itemTitle . "" . PHP_EOL; $message .= $itemDesc . PHP_EOL; $message .= PHP_EOL; $message .= $itemLink; return [$message, $itemTitle]; }