בקשת מידע | API של פקע"ר
-
@יהודי-זה-הכי ואתה בנטפרי?
-
@יהודי-זה-הכי הבעיה היא שאי אפשר יהיה לגשת לשרת(PHP) כי נטפרי לא יאשרו את זה.אפשר לנסות אבל הם לא יאשרו.
דוגמא לפרויקט שמתחבר לפקער:
https://send.magicode.me/send-file/file/1a9cc7f2f9e7530c7f99f771db5021373b694f6f/view
-
@יהודי-זה-הכי הבעיה היא שאי אפשר יהיה לגשת לשרת(PHP) כי נטפרי לא יאשרו את זה.אפשר לנסות אבל הם לא יאשרו.
דוגמא לפרויקט שמתחבר לפקער:
https://send.magicode.me/send-file/file/1a9cc7f2f9e7530c7f99f771db5021373b694f6f/view
-
@יהודי-זה-הכי קישור עודכן
-
@יהודי-זה-הכי קישור עודכן
@יוסי-רחמים למה לא יעבוד בנטפרי ומי פיתח את זה?
בניתי את זה אבל אין לי מושג אם זה יעבוד וזה גם בדיליי
-
@יוסי-רחמים למה לא יעבוד בנטפרי ומי פיתח את זה?
בניתי את זה אבל אין לי מושג אם זה יעבוד וזה גם בדיליי
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
למה לא יעבוד בנטפרי
כמו שאמרתי.לא מאשרים PHP שהם לא יודעים מה מכיל.
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
מי פיתח את זה
אני
-
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
למה לא יעבוד בנטפרי
כמו שאמרתי.לא מאשרים PHP שהם לא יודעים מה מכיל.
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
מי פיתח את זה
אני
@יוסי-רחמים אגיד להם מה מכיל
יש מצב לקרוא את זה מהשרת שלך? -
@יוסי-רחמים אגיד להם מה מכיל
יש מצב לקרוא את זה מהשרת שלך?@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
אגיד להם מה מכיל
זה לא עוזר.הם לא מאמינים
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
יש מצב לקרוא את זה מהשרת שלך
רק אם אני יביא לך.
-
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
אגיד להם מה מכיל
זה לא עוזר.הם לא מאמינים
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
יש מצב לקרוא את זה מהשרת שלך
רק אם אני יביא לך.
@יוסי-רחמים זה מה שאני רוצה
-
@יוסי-רחמים זה מה שאני רוצה
<?php // ================================================================= // API לקבלת התראות פיקוד העורף - גרסת cURL משופרת // ================================================================= // קובעים את אזור הזמן לישראל date_default_timezone_set('Asia/Jerusalem'); // ============== CORS Headers ============== header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=utf-8"); header("Access-Control-Allow-Methods: GET"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); // כתובת ה-API של פיקוד העורף $apiUrl = 'https://www.oref.org.il/WarningMessages/alert/alerts.json'; // 1. אתחול cURL $ch = curl_init(); // 2. הגדרת האפשרויות של cURL // הגדרת הכתובת לביצוע הבקשה curl_setopt($ch, CURLOPT_URL, $apiUrl); // החזרת התוצאה כמחרוזת במקום להדפיס אותה ישירות curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // הגדרת Headers כדי לדמות דפדפן אמיתי curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Referer: https://www.oref.org.il/', 'X-Requested-With: XMLHttpRequest', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' ]); // הגדרת זמן קצוב (timeout) של 10 שניות לחיבור curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 10); // עקיבת אחר הפניות מחדש (redirects) אם יש curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // אימות תעודת SSL של השרת (חשוב לאבטחה) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 3. ביצוע הבקשה $rawResponse = curl_exec($ch); // יצירת מערך שיכיל את התגובה הסופית $response = []; // 4. בדיקת שגיאות if (curl_errno($ch)) { // אם הייתה שגיאת cURL (למשל, אין תקשורת, timeout) http_response_code(500); $response = [ 'status' => 'error', 'message' => 'Failed to connect to Oref server. cURL Error: ' . curl_error($ch), 'timestamp' => date('c') ]; } else { // אם הבקשה הצליחה $alertsData = json_decode($rawResponse, true); if (empty($alertsData) || !isset($alertsData['data']) || empty($alertsData['data'])) { $response = [ 'status' => 'success', 'alerts_active' => false, 'data' => null, 'message' => 'No active alerts.', 'timestamp' => date('c') ]; } else { $response = [ 'status' => 'success', 'alerts_active' => true, 'data' => [ 'id' => $alertsData['id'], 'title' => $alertsData['title'], 'locations' => $alertsData['data'] ], 'timestamp' => date('c') ]; } } // 5. סגירת cURL curl_close($ch); // הדפסת התגובה בפורמט JSON echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); ?>
-
<?php // ================================================================= // API לקבלת התראות פיקוד העורף - גרסת cURL משופרת // ================================================================= // קובעים את אזור הזמן לישראל date_default_timezone_set('Asia/Jerusalem'); // ============== CORS Headers ============== header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=utf-8"); header("Access-Control-Allow-Methods: GET"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); // כתובת ה-API של פיקוד העורף $apiUrl = 'https://www.oref.org.il/WarningMessages/alert/alerts.json'; // 1. אתחול cURL $ch = curl_init(); // 2. הגדרת האפשרויות של cURL // הגדרת הכתובת לביצוע הבקשה curl_setopt($ch, CURLOPT_URL, $apiUrl); // החזרת התוצאה כמחרוזת במקום להדפיס אותה ישירות curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // הגדרת Headers כדי לדמות דפדפן אמיתי curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Referer: https://www.oref.org.il/', 'X-Requested-With: XMLHttpRequest', 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36' ]); // הגדרת זמן קצוב (timeout) של 10 שניות לחיבור curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 10); // עקיבת אחר הפניות מחדש (redirects) אם יש curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // אימות תעודת SSL של השרת (חשוב לאבטחה) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 3. ביצוע הבקשה $rawResponse = curl_exec($ch); // יצירת מערך שיכיל את התגובה הסופית $response = []; // 4. בדיקת שגיאות if (curl_errno($ch)) { // אם הייתה שגיאת cURL (למשל, אין תקשורת, timeout) http_response_code(500); $response = [ 'status' => 'error', 'message' => 'Failed to connect to Oref server. cURL Error: ' . curl_error($ch), 'timestamp' => date('c') ]; } else { // אם הבקשה הצליחה $alertsData = json_decode($rawResponse, true); if (empty($alertsData) || !isset($alertsData['data']) || empty($alertsData['data'])) { $response = [ 'status' => 'success', 'alerts_active' => false, 'data' => null, 'message' => 'No active alerts.', 'timestamp' => date('c') ]; } else { $response = [ 'status' => 'success', 'alerts_active' => true, 'data' => [ 'id' => $alertsData['id'], 'title' => $alertsData['title'], 'locations' => $alertsData['data'] ], 'timestamp' => date('c') ]; } } // 5. סגירת cURL curl_close($ch); // הדפסת התגובה בפורמט JSON echo json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); ?>
@יוסי-רחמים אני רוצה לשאוב את מה שכבר מתקבל אצלך כי אין לי גישה לAPI של פקע"ר כי השרת שלי לא בארץ
ואגב הוא בודק גם כשהאתר סגור? -
@יוסי-רחמים אני רוצה לשאוב את מה שכבר מתקבל אצלך כי אין לי גישה לAPI של פקע"ר כי השרת שלי לא בארץ
ואגב הוא בודק גם כשהאתר סגור?@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
כי השרת שלי לא בארץ
זה לא משנה.
ואגב הוא בודק גם כשהאתר סגור?
לא(איך הוא יבדוק?)
-
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
כי השרת שלי לא בארץ
זה לא משנה.
ואגב הוא בודק גם כשהאתר סגור?
לא(איך הוא יבדוק?)
@יוסי-רחמים לא יודע?
-
@יוסי-רחמים לא יודע?
@יהודי-זה-הכי לגבי אם הוא בודק אם האתר סגור?
אם זה פועל ברקע אז כן אם לא אז לא -
אני עשיתי את זה וזה לא מצליח להתחבר לשרת ואני רוצה לדעת איך אפשר כן להתחבר
index.php
<!DOCTYPE html> <html lang="he" dir="rtl"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>🎗️האלפון של הזירה הית🎗️</title> <link rel="icon" href="https://lh3.googleusercontent.com/a/ACg8ocLCPoxjLoSems6ya7IDqC2PPZ8pbKjT6MCpYDvD9_yU2-tcV6JQ=s288-c-no" type="image/png" /> <meta name="description" content="האלפון של הזירה הית"> <meta name="keywords" content="תגיותב"> <style> body { font-family: Arial, sans-serif; text-align: center; background-image: url("https://i.ibb.co/Q3fVHtsZ/unnamed.png"); background-size: cover; background-position: center; background-repeat: no-repeat; padding: 80px 20px 100px 20px; position: relative; direction: rtl; } .container { background-color: rgba(255, 255, 255, 0.8); padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0,0,0,0.1); display: inline-block; text-align: right; margin: 10px auto; max-width: 600px; width: 100%; } .input-group { display: flex; align-items: center; margin: 10px 0; } .input-group input { flex: 1; padding: 10px; border: 1px solid #ccc; border-radius: 5px 0 0 5px; font-size: 16px; direction: rtl; } .input-group span { padding: 10px; background-color: #0073e6; color: white; border-radius: 0 5px 5px 0; cursor: default; } button { padding: 10px 20px; border: none; background-color: #0073e6; color: white; border-radius: 5px; cursor: pointer; margin: 5px 0; font-size: 16px; } button:hover { background-color: #005bb5; } .footer { margin-top: 30px; padding: 10px; background-color: rgba(221, 221, 221, 0.8); border-radius: 5px; font-size: 14px; max-width: 600px; margin-left: auto; margin-right: auto; } #results { display: flex; flex-wrap: wrap; justify-content: center; margin-top: 20px; gap: 15px; } .result-item { background-color: rgba(255, 255, 255, 0.8); border-radius: 8px; border: 1px solid #ddd; width: 250px; min-height: 160px; padding: 15px; box-sizing: border-box; text-align: right; display: flex; flex-direction: column; justify-content: space-between; position: relative; } .result-item strong { font-size: 16px; } .details-btn { margin-top: 10px; align-self: flex-start; background-color: #28a745; } .details-btn:hover { background-color: #1e7e34; } /* חלון קופץ לפרטים */ #detailsModal { display: none; position: fixed; z-index: 1500; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); overflow: auto; justify-content: center; align-items: center; display: flex; } #detailsModal.hidden { display: none !important; } #detailsModalContent { background-color: white; padding: 20px 30px; border-radius: 10px; max-width: 400px; width: 90%; text-align: right; font-size: 18px; position: relative; box-sizing: border-box; } #closeModalBtn { position: absolute; top: 10px; left: 10px; background-color: #dc3545; border: none; color: white; font-size: 18px; padding: 5px 10px; border-radius: 5px; cursor: pointer; } #closeModalBtn:hover { background-color: #a71d2a; } #showMapBtn { margin-top: 15px; background-color: #0073e6; color: white; padding: 10px 15px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; } #showMapBtn:hover { background-color: #005bb5; } /* חלון קופץ למפה */ #mapModal { display: none; position: fixed; z-index: 1600; left: 0; top: 0; width: 100vw; height: 100vh; background-color: rgba(0,0,0,0.7); justify-content: center; align-items: center; display: flex; } #mapModal.hidden { display: none !important; } #mapContent { position: relative; background: white; border-radius: 10px; width: 90%; max-width: 600px; height: 400px; box-sizing: border-box; padding-top: 35px; } #closeMapBtn { position: absolute; top: 8px; right: 8px; background: #dc3545; border: none; color: white; font-size: 16px; padding: 6px 10px; border-radius: 5px; cursor: pointer; z-index: 10; } #closeMapBtn:hover { background: #b02a37; } #mapIframe { width: 100%; height: 100%; border: none; border-radius: 0 0 10px 10px; display: block; } /* משחק נחש */ #snakeGameContainer { display: none; position: fixed; bottom: 10px; left: 10px; background-color: rgba(255,255,255,0.8); padding: 10px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); z-index: 1000; } /* pagination controls */ #paginationControls { text-align: center; margin-top: 10px; max-width: 600px; margin-left: auto; margin-right: auto; } #paginationControls button { margin: 0 10px; padding: 8px 16px; font-size: 14px; } /* results per page selector */ #resultsPerPageContainer { max-width: 600px; margin: 10px auto 0 auto; text-align: right; } /* הוספת תיבת התראות צבע אדום במקום הטלפון */ .phone-box { position: fixed; top: 120px; right: 15px; width: 260px; height: 480px; background: #222; border-radius: 30px; border: 6px solid #000; box-shadow: 0 0 20px rgba(0,0,0,0.5); z-index: 9999; overflow: hidden; display: flex; flex-direction: column; } .phone-box .screen { background: #fff; height: 100%; display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; direction: rtl; overflow: hidden; } #alert-box { flex: 1; overflow-y: auto; padding: 10px; } #alert-box .message { padding: 10px; font-size: 14px; text-align: right; border-bottom: 1px solid #ddd; background-color: #fff; color: #c0392b; } .phone-box .controls { background: #111; padding: 10px; text-align: center; user-select: none; } .phone-box .controls button { margin: 2px; padding: 5px 10px; font-size: 14px; cursor: pointer; border-radius: 5px; border: none; background-color: #0073e6; color: white; } .phone-box .controls button:hover { background-color: #005bb5; } </style> </head> <body> <div id="bthn" lang="he"></div> <script> (function () { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://bringthemhomenow.net/1.3.0/hostages-ticker.js"; script.setAttribute( "integrity", "sha384-MmP7bD5QEJWvJccg9c0lDnn3LjjqQWDiRCxRV+NU8hij15icuwb29Jfw1TqJwuSv" ); script.setAttribute("crossorigin", "anonymous"); document.getElementsByTagName("head")[0].appendChild(script); })(); </script> <h1>📖 🎗️האלפון של הזירה הית 🎗️📖</h1> <h1>שימו לב האלפון בשלבי בנייה ופיתוח ייתכנו תקלות</h1> <!-- תיבת ההתראות בצבע אדום - הטלפון בצד ימין --> <div class="phone-box" role="region" aria-label="התראות צבע אדום"> <div class="screen"> <div id="alert-box" aria-live="polite" aria-relevant="additions"> <div class="message">📞 האלפון מתעדכן מדי יום!</div> </div> <div class="controls" role="group" aria-label="כפתורי עדכון התראות"> <button onclick="fetchAlerts()" aria-label="עדכן התראות צבע אדום">🔄 עדכן</button> <button onclick="sendTestAlert()" aria-label="שלח התראת בדיקה">🧪 בדיקה</button> </div> </div> </div> <!-- מערכת חיפוש --> <div class="container"> <h2>🔍 מערכת חיפוש</h2> <div class="input-group"> <span>🔍</span> <input type="text" id="searchInput" placeholder="הקלד שם, כתובת או מספר טלפון" onkeydown="if(event.key === 'Enter') searchData()" /> </div> <button onclick="searchData()">חפש</button> <!-- בחירת מספר תוצאות בדף --> <div id="resultsPerPageContainer" style="display:none;"> <label for="resultsPerPage">הצג תוצאות בכל דף: </label> <select id="resultsPerPage" onchange="renderResults()"> <option value="5">5</option> <option value="10" selected>10</option> <option value="20">20</option> </select> </div> <div id="results"></div> <div id="paginationControls" style="display:none;"> <button onclick="changePage(1)" id="nextBtn" disabled>הבא ➡</button> <span id="pageInfo" style="margin: 0 10px;"></span> <button onclick="changePage(-1)" id="prevBtn" disabled>⬅ קודם</button> </div> </div> <!-- חלון קופץ לפרטים --> <div id="detailsModal" class="hidden" aria-modal="true" role="dialog" aria-labelledby="detailsTitle"> <div id="detailsModalContent"> <button id="closeModalBtn" onclick="closeDetails()" aria-label="סגור חלון">✖</button> <div id="detailsContent" dir="rtl"></div> <button id="showMapBtn" onclick="openMap()" style="display:none;">הצג מיקום במפה</button> </div> </div> <!-- חלון קופץ למפה --> <div id="mapModal" class="hidden" aria-modal="true" role="dialog" aria-labelledby="mapTitle" aria-hidden="true"> <div id="mapContent"> <button id="closeMapBtn" onclick="closeMap()" aria-label="סגור מפה">✖</button> <iframe id="mapIframe" src="" allowfullscreen loading="lazy" title="מפת מיקום"></iframe> </div> </div> <!-- כפתור למשחק נחש --> <button onclick="openSnakeGame()" style="position: fixed; bottom: 80px; left: 10px;"> 🎮 שחק נחש </button> <div id="snakeGameContainer" style="display: none; position: fixed; bottom: 10px; left: 10px; background-color: rgba(255,255,255,0.8); padding: 10px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); z-index: 1000;"> <button onclick="closeSnakeGame()" style="float: left;">❌ סגור</button> <h3>🐍 משחק נחש</h3> <canvas id="snakeCanvas" width="300" height="300" style="background-color: #f4f4f4"> </canvas> </div> <!-- תחתית --> <div class="footer"> <p>📢 הפיתוח נעשה בחסות <strong>הזירה הית</strong> - המרחב החם של הציבור הי</p> <p>☎️ טלפון: 02-313-60-90</p> <p>🛠️ פיתוח ע"י <strong>אבי ש.</strong> אל תדאגו נעזרתי בבינה מלאכותית 😋😋😋 אני לא כזה מומחה</p> <p>💬 לכניסה לצ'אט: <a href="https://chat.google.com/room/AAQApcvo9RM?cls=7" target="_blank" rel="noopener noreferrer">לחץ כאן</a></p> <p>📧 להצטרפות שלח מייל ל: <a href="mailto:avshainin@gmail.com">avshainin@gmail.com</a></p> <p>© 2025 הזירה הית</p> </div> <script> let currentResults = []; let currentPage = 1; let resultsPerPage = 10; function searchData() { let input = document.getElementById("searchInput").value.trim(); const resultsDiv = document.getElementById("results"); const paginationControls = document.getElementById("paginationControls"); const resultsPerPageContainer = document.getElementById("resultsPerPageContainer"); resultsDiv.innerHTML = "🔍 טוען..."; paginationControls.style.display = "none"; resultsPerPageContainer.style.display = "none"; fetch("get.php") .then(res => res.json()) .then(database => { let results = database.filter(item => item["שם"].includes(input) || item["כתובת"].includes(input) || item["פלאפון"].includes(input) ); results.sort((a, b) => a["שם"].localeCompare(b["שם"], "he", { sensitivity: "base" })); currentResults = results; currentPage = 1; if(results.length === 0) { resultsDiv.innerHTML = "❌ לא נמצאו תוצאות"; paginationControls.style.display = "none"; resultsPerPageContainer.style.display = "none"; return; } paginationControls.style.display = "block"; resultsPerPageContainer.style.display = "block"; renderResults(); }) .catch(() => { resultsDiv.innerHTML = "❌ קרתה שגיאה בטעינת הנתונים"; paginationControls.style.display = "none"; resultsPerPageContainer.style.display = "none"; }); } function renderResults() { const resultsDiv = document.getElementById("results"); resultsPerPage = parseInt(document.getElementById("resultsPerPage").value); const startIndex = (currentPage -1) * resultsPerPage; const endIndex = startIndex + resultsPerPage; const pageResults = currentResults.slice(startIndex, endIndex); if(pageResults.length === 0 && currentPage > 1) { currentPage--; renderResults(); return; } resultsDiv.innerHTML = pageResults.map((item, index) => ` <div class="result-item" tabindex="0"> <div><strong>שם:</strong> ${item["שם"]}</div> <div><strong>כתובת:</strong> ${item["כתובת"]}</div> <div><strong>פלאפון:</strong> ${item["פלאפון"]}</div> <div><strong>טלפון בבית:</strong> ${item["טלפון בבית"] || "❌"}</div> <div><strong>תא קולי:</strong> ${item["תא קולי"] || "❌"}</div> </div> `).join(""); // עדכון כפתורי ניווט document.getElementById("pageInfo").textContent = `עמוד ${currentPage} מתוך ${Math.ceil(currentResults.length / resultsPerPage)}`; document.getElementById("nextBtn").disabled = currentPage >= Math.ceil(currentResults.length / resultsPerPage); document.getElementById("prevBtn").disabled = currentPage <= 1; } function changePage(direction) { if(direction === 1 && currentPage < Math.ceil(currentResults.length / resultsPerPage)) { currentPage++; } else if(direction === -1 && currentPage > 1) { currentPage--; } renderResults(); } // פונקציות לפרטי איש קשר ומפות (יש למלא בהתאם לצורך שלך) function closeDetails() { document.getElementById("detailsModal").classList.add("hidden"); } function openMap() { const modal = document.getElementById("mapModal"); const iframe = document.getElementById("mapIframe"); // example of google maps embed, צריך להתאים למיקום בפועל iframe.src = "https://maps.google.com/maps?q=32.0804,34.7805&hl=he&z=14&output=embed"; modal.classList.remove("hidden"); } function closeMap() { document.getElementById("mapModal").classList.add("hidden"); document.getElementById("mapIframe").src = ""; } // המשחק נחש - פונקציות נפתח וסוגר function openSnakeGame() { document.getElementById("snakeGameContainer").style.display = "block"; startSnakeGame(); } function closeSnakeGame() { document.getElementById("snakeGameContainer").style.display = "none"; stopSnakeGame(); } let snakeGameInterval = null; function startSnakeGame() { // כאן לשים את הקוד של משחק הנחש } function stopSnakeGame() { if(snakeGameInterval) { clearInterval(snakeGameInterval); snakeGameInterval = null; } } // --- קוד ההתראות צבע אדום --- const alertBox = document.getElementById("alert-box"); async function fetchAlerts() { try { const res = await fetch('https://www.oref.org.il/WarningMessages/alert/alerts.json'); if(!res.ok) throw new Error('Network response was not ok'); const data = await res.json(); // נקרא לפי מפתח התרעות "alerts" const alerts = data["alerts"]; if(!alerts || alerts.length === 0) { alertBox.innerHTML = `<div class="message">📞 אין כרגע התראות צבע אדום</div>`; return; } // הצגת כל ההתראות בקופסה, כל הודעה ב-div נפרד alertBox.innerHTML = alerts.map(alert => { // יש גם תאריך התחלה וסיום const start = alert["StartTime"]; const end = alert["EndTime"]; const region = alert["RegionDesc"] || ""; const desc = alert["Message"] || ""; // פורמט פשוט return `<div class="message"><strong>🔴 אזור:</strong> ${region}<br><strong>הודעה:</strong> ${desc}<br><small>${start} - ${end}</small></div>`; }).join(""); } catch(err) { alertBox.innerHTML = `<div class="message">❌ שגיאה בטעינת ההתראות</div>`; console.error("Error fetching alerts:", err); } } function sendTestAlert() { alertBox.innerHTML = `<div class="message">🧪 זוהי התראת בדיקה - אין התראה אמיתית כרגע</div>`; } // אתחל את ההתראות אוטומטית בהעמסה ועם ריענון כל 2 דקות fetchAlerts(); setInterval(fetchAlerts, 3000); </script> </body> </html>
<?php $apiUrl = 'https://api.tzevaadom.co.il/notifications'; function getAlerts($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $json = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if ($json === false || $json === '') { error_log("שגיאה ב-cURL: " . $error); return null; } $data = json_decode($json, true); if ($data === null) { error_log("שגיאה בפענוח JSON"); } return $data; } function saveAlerts($alerts) { $file = __DIR__ . '/alerts_history.json'; $existing = []; if (file_exists($file)) { $existingJson = file_get_contents($file); $existing = json_decode($existingJson, true); if ($existing === null) $existing = []; } foreach ($alerts as $alert) { $time = $alert['created_at'] ?? ''; $location = implode(', ', $alert['data']['locations'] ?? ['מיקום לא ידוע']); $exists = false; foreach ($existing as $ex) { if ($ex['time'] === $time) { $exists = true; break; } } if (!$exists) { $existing[] = [ 'time' => $time, 'location' => $location, ]; } } file_put_contents($file, json_encode($existing, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); } $alerts = getAlerts($apiUrl); if ($alerts) { saveAlerts($alerts); echo "התראות נשמרו בהצלחה.\n"; } else { echo "שגיאה בקבלת ההתראות.\n"; }
fetch_and_save_alerts.php
<?php // get_alerts.php header('Content-Type: application/json'); if (file_exists('alerts_log.txt')) { $lines = file('alerts_log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $alerts = []; foreach ($lines as $line) { $parts = explode(" - ", $line, 2); if (count($parts) === 2) { $alerts[] = ['time' => $parts[0], 'location' => $parts[1]]; } } echo json_encode($alerts); } else { echo json_encode([]); } ?>
<?php // save_alert.php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $json = file_get_contents('php://input'); $data = json_decode($json, true); if ($data && isset($data['time']) && isset($data['location'])) { $entry = $data['time'] . " - " . $data['location'] . "\n"; file_put_contents('alerts_log.txt', $entry, FILE_APPEND | LOCK_EX); echo "OK"; } else { http_response_code(400); echo "Invalid data"; } } else { http_response_code(405); echo "Method not allowed"; } ?>
-
אני עשיתי את זה וזה לא מצליח להתחבר לשרת ואני רוצה לדעת איך אפשר כן להתחבר
index.php
<!DOCTYPE html> <html lang="he" dir="rtl"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>🎗️האלפון של הזירה הית🎗️</title> <link rel="icon" href="https://lh3.googleusercontent.com/a/ACg8ocLCPoxjLoSems6ya7IDqC2PPZ8pbKjT6MCpYDvD9_yU2-tcV6JQ=s288-c-no" type="image/png" /> <meta name="description" content="האלפון של הזירה הית"> <meta name="keywords" content="תגיותב"> <style> body { font-family: Arial, sans-serif; text-align: center; background-image: url("https://i.ibb.co/Q3fVHtsZ/unnamed.png"); background-size: cover; background-position: center; background-repeat: no-repeat; padding: 80px 20px 100px 20px; position: relative; direction: rtl; } .container { background-color: rgba(255, 255, 255, 0.8); padding: 20px; border-radius: 10px; box-shadow: 0 0 10px rgba(0,0,0,0.1); display: inline-block; text-align: right; margin: 10px auto; max-width: 600px; width: 100%; } .input-group { display: flex; align-items: center; margin: 10px 0; } .input-group input { flex: 1; padding: 10px; border: 1px solid #ccc; border-radius: 5px 0 0 5px; font-size: 16px; direction: rtl; } .input-group span { padding: 10px; background-color: #0073e6; color: white; border-radius: 0 5px 5px 0; cursor: default; } button { padding: 10px 20px; border: none; background-color: #0073e6; color: white; border-radius: 5px; cursor: pointer; margin: 5px 0; font-size: 16px; } button:hover { background-color: #005bb5; } .footer { margin-top: 30px; padding: 10px; background-color: rgba(221, 221, 221, 0.8); border-radius: 5px; font-size: 14px; max-width: 600px; margin-left: auto; margin-right: auto; } #results { display: flex; flex-wrap: wrap; justify-content: center; margin-top: 20px; gap: 15px; } .result-item { background-color: rgba(255, 255, 255, 0.8); border-radius: 8px; border: 1px solid #ddd; width: 250px; min-height: 160px; padding: 15px; box-sizing: border-box; text-align: right; display: flex; flex-direction: column; justify-content: space-between; position: relative; } .result-item strong { font-size: 16px; } .details-btn { margin-top: 10px; align-self: flex-start; background-color: #28a745; } .details-btn:hover { background-color: #1e7e34; } /* חלון קופץ לפרטים */ #detailsModal { display: none; position: fixed; z-index: 1500; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); overflow: auto; justify-content: center; align-items: center; display: flex; } #detailsModal.hidden { display: none !important; } #detailsModalContent { background-color: white; padding: 20px 30px; border-radius: 10px; max-width: 400px; width: 90%; text-align: right; font-size: 18px; position: relative; box-sizing: border-box; } #closeModalBtn { position: absolute; top: 10px; left: 10px; background-color: #dc3545; border: none; color: white; font-size: 18px; padding: 5px 10px; border-radius: 5px; cursor: pointer; } #closeModalBtn:hover { background-color: #a71d2a; } #showMapBtn { margin-top: 15px; background-color: #0073e6; color: white; padding: 10px 15px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; } #showMapBtn:hover { background-color: #005bb5; } /* חלון קופץ למפה */ #mapModal { display: none; position: fixed; z-index: 1600; left: 0; top: 0; width: 100vw; height: 100vh; background-color: rgba(0,0,0,0.7); justify-content: center; align-items: center; display: flex; } #mapModal.hidden { display: none !important; } #mapContent { position: relative; background: white; border-radius: 10px; width: 90%; max-width: 600px; height: 400px; box-sizing: border-box; padding-top: 35px; } #closeMapBtn { position: absolute; top: 8px; right: 8px; background: #dc3545; border: none; color: white; font-size: 16px; padding: 6px 10px; border-radius: 5px; cursor: pointer; z-index: 10; } #closeMapBtn:hover { background: #b02a37; } #mapIframe { width: 100%; height: 100%; border: none; border-radius: 0 0 10px 10px; display: block; } /* משחק נחש */ #snakeGameContainer { display: none; position: fixed; bottom: 10px; left: 10px; background-color: rgba(255,255,255,0.8); padding: 10px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); z-index: 1000; } /* pagination controls */ #paginationControls { text-align: center; margin-top: 10px; max-width: 600px; margin-left: auto; margin-right: auto; } #paginationControls button { margin: 0 10px; padding: 8px 16px; font-size: 14px; } /* results per page selector */ #resultsPerPageContainer { max-width: 600px; margin: 10px auto 0 auto; text-align: right; } /* הוספת תיבת התראות צבע אדום במקום הטלפון */ .phone-box { position: fixed; top: 120px; right: 15px; width: 260px; height: 480px; background: #222; border-radius: 30px; border: 6px solid #000; box-shadow: 0 0 20px rgba(0,0,0,0.5); z-index: 9999; overflow: hidden; display: flex; flex-direction: column; } .phone-box .screen { background: #fff; height: 100%; display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; direction: rtl; overflow: hidden; } #alert-box { flex: 1; overflow-y: auto; padding: 10px; } #alert-box .message { padding: 10px; font-size: 14px; text-align: right; border-bottom: 1px solid #ddd; background-color: #fff; color: #c0392b; } .phone-box .controls { background: #111; padding: 10px; text-align: center; user-select: none; } .phone-box .controls button { margin: 2px; padding: 5px 10px; font-size: 14px; cursor: pointer; border-radius: 5px; border: none; background-color: #0073e6; color: white; } .phone-box .controls button:hover { background-color: #005bb5; } </style> </head> <body> <div id="bthn" lang="he"></div> <script> (function () { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "https://bringthemhomenow.net/1.3.0/hostages-ticker.js"; script.setAttribute( "integrity", "sha384-MmP7bD5QEJWvJccg9c0lDnn3LjjqQWDiRCxRV+NU8hij15icuwb29Jfw1TqJwuSv" ); script.setAttribute("crossorigin", "anonymous"); document.getElementsByTagName("head")[0].appendChild(script); })(); </script> <h1>📖 🎗️האלפון של הזירה הית 🎗️📖</h1> <h1>שימו לב האלפון בשלבי בנייה ופיתוח ייתכנו תקלות</h1> <!-- תיבת ההתראות בצבע אדום - הטלפון בצד ימין --> <div class="phone-box" role="region" aria-label="התראות צבע אדום"> <div class="screen"> <div id="alert-box" aria-live="polite" aria-relevant="additions"> <div class="message">📞 האלפון מתעדכן מדי יום!</div> </div> <div class="controls" role="group" aria-label="כפתורי עדכון התראות"> <button onclick="fetchAlerts()" aria-label="עדכן התראות צבע אדום">🔄 עדכן</button> <button onclick="sendTestAlert()" aria-label="שלח התראת בדיקה">🧪 בדיקה</button> </div> </div> </div> <!-- מערכת חיפוש --> <div class="container"> <h2>🔍 מערכת חיפוש</h2> <div class="input-group"> <span>🔍</span> <input type="text" id="searchInput" placeholder="הקלד שם, כתובת או מספר טלפון" onkeydown="if(event.key === 'Enter') searchData()" /> </div> <button onclick="searchData()">חפש</button> <!-- בחירת מספר תוצאות בדף --> <div id="resultsPerPageContainer" style="display:none;"> <label for="resultsPerPage">הצג תוצאות בכל דף: </label> <select id="resultsPerPage" onchange="renderResults()"> <option value="5">5</option> <option value="10" selected>10</option> <option value="20">20</option> </select> </div> <div id="results"></div> <div id="paginationControls" style="display:none;"> <button onclick="changePage(1)" id="nextBtn" disabled>הבא ➡</button> <span id="pageInfo" style="margin: 0 10px;"></span> <button onclick="changePage(-1)" id="prevBtn" disabled>⬅ קודם</button> </div> </div> <!-- חלון קופץ לפרטים --> <div id="detailsModal" class="hidden" aria-modal="true" role="dialog" aria-labelledby="detailsTitle"> <div id="detailsModalContent"> <button id="closeModalBtn" onclick="closeDetails()" aria-label="סגור חלון">✖</button> <div id="detailsContent" dir="rtl"></div> <button id="showMapBtn" onclick="openMap()" style="display:none;">הצג מיקום במפה</button> </div> </div> <!-- חלון קופץ למפה --> <div id="mapModal" class="hidden" aria-modal="true" role="dialog" aria-labelledby="mapTitle" aria-hidden="true"> <div id="mapContent"> <button id="closeMapBtn" onclick="closeMap()" aria-label="סגור מפה">✖</button> <iframe id="mapIframe" src="" allowfullscreen loading="lazy" title="מפת מיקום"></iframe> </div> </div> <!-- כפתור למשחק נחש --> <button onclick="openSnakeGame()" style="position: fixed; bottom: 80px; left: 10px;"> 🎮 שחק נחש </button> <div id="snakeGameContainer" style="display: none; position: fixed; bottom: 10px; left: 10px; background-color: rgba(255,255,255,0.8); padding: 10px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); z-index: 1000;"> <button onclick="closeSnakeGame()" style="float: left;">❌ סגור</button> <h3>🐍 משחק נחש</h3> <canvas id="snakeCanvas" width="300" height="300" style="background-color: #f4f4f4"> </canvas> </div> <!-- תחתית --> <div class="footer"> <p>📢 הפיתוח נעשה בחסות <strong>הזירה הית</strong> - המרחב החם של הציבור הי</p> <p>☎️ טלפון: 02-313-60-90</p> <p>🛠️ פיתוח ע"י <strong>אבי ש.</strong> אל תדאגו נעזרתי בבינה מלאכותית 😋😋😋 אני לא כזה מומחה</p> <p>💬 לכניסה לצ'אט: <a href="https://chat.google.com/room/AAQApcvo9RM?cls=7" target="_blank" rel="noopener noreferrer">לחץ כאן</a></p> <p>📧 להצטרפות שלח מייל ל: <a href="mailto:avshainin@gmail.com">avshainin@gmail.com</a></p> <p>© 2025 הזירה הית</p> </div> <script> let currentResults = []; let currentPage = 1; let resultsPerPage = 10; function searchData() { let input = document.getElementById("searchInput").value.trim(); const resultsDiv = document.getElementById("results"); const paginationControls = document.getElementById("paginationControls"); const resultsPerPageContainer = document.getElementById("resultsPerPageContainer"); resultsDiv.innerHTML = "🔍 טוען..."; paginationControls.style.display = "none"; resultsPerPageContainer.style.display = "none"; fetch("get.php") .then(res => res.json()) .then(database => { let results = database.filter(item => item["שם"].includes(input) || item["כתובת"].includes(input) || item["פלאפון"].includes(input) ); results.sort((a, b) => a["שם"].localeCompare(b["שם"], "he", { sensitivity: "base" })); currentResults = results; currentPage = 1; if(results.length === 0) { resultsDiv.innerHTML = "❌ לא נמצאו תוצאות"; paginationControls.style.display = "none"; resultsPerPageContainer.style.display = "none"; return; } paginationControls.style.display = "block"; resultsPerPageContainer.style.display = "block"; renderResults(); }) .catch(() => { resultsDiv.innerHTML = "❌ קרתה שגיאה בטעינת הנתונים"; paginationControls.style.display = "none"; resultsPerPageContainer.style.display = "none"; }); } function renderResults() { const resultsDiv = document.getElementById("results"); resultsPerPage = parseInt(document.getElementById("resultsPerPage").value); const startIndex = (currentPage -1) * resultsPerPage; const endIndex = startIndex + resultsPerPage; const pageResults = currentResults.slice(startIndex, endIndex); if(pageResults.length === 0 && currentPage > 1) { currentPage--; renderResults(); return; } resultsDiv.innerHTML = pageResults.map((item, index) => ` <div class="result-item" tabindex="0"> <div><strong>שם:</strong> ${item["שם"]}</div> <div><strong>כתובת:</strong> ${item["כתובת"]}</div> <div><strong>פלאפון:</strong> ${item["פלאפון"]}</div> <div><strong>טלפון בבית:</strong> ${item["טלפון בבית"] || "❌"}</div> <div><strong>תא קולי:</strong> ${item["תא קולי"] || "❌"}</div> </div> `).join(""); // עדכון כפתורי ניווט document.getElementById("pageInfo").textContent = `עמוד ${currentPage} מתוך ${Math.ceil(currentResults.length / resultsPerPage)}`; document.getElementById("nextBtn").disabled = currentPage >= Math.ceil(currentResults.length / resultsPerPage); document.getElementById("prevBtn").disabled = currentPage <= 1; } function changePage(direction) { if(direction === 1 && currentPage < Math.ceil(currentResults.length / resultsPerPage)) { currentPage++; } else if(direction === -1 && currentPage > 1) { currentPage--; } renderResults(); } // פונקציות לפרטי איש קשר ומפות (יש למלא בהתאם לצורך שלך) function closeDetails() { document.getElementById("detailsModal").classList.add("hidden"); } function openMap() { const modal = document.getElementById("mapModal"); const iframe = document.getElementById("mapIframe"); // example of google maps embed, צריך להתאים למיקום בפועל iframe.src = "https://maps.google.com/maps?q=32.0804,34.7805&hl=he&z=14&output=embed"; modal.classList.remove("hidden"); } function closeMap() { document.getElementById("mapModal").classList.add("hidden"); document.getElementById("mapIframe").src = ""; } // המשחק נחש - פונקציות נפתח וסוגר function openSnakeGame() { document.getElementById("snakeGameContainer").style.display = "block"; startSnakeGame(); } function closeSnakeGame() { document.getElementById("snakeGameContainer").style.display = "none"; stopSnakeGame(); } let snakeGameInterval = null; function startSnakeGame() { // כאן לשים את הקוד של משחק הנחש } function stopSnakeGame() { if(snakeGameInterval) { clearInterval(snakeGameInterval); snakeGameInterval = null; } } // --- קוד ההתראות צבע אדום --- const alertBox = document.getElementById("alert-box"); async function fetchAlerts() { try { const res = await fetch('https://www.oref.org.il/WarningMessages/alert/alerts.json'); if(!res.ok) throw new Error('Network response was not ok'); const data = await res.json(); // נקרא לפי מפתח התרעות "alerts" const alerts = data["alerts"]; if(!alerts || alerts.length === 0) { alertBox.innerHTML = `<div class="message">📞 אין כרגע התראות צבע אדום</div>`; return; } // הצגת כל ההתראות בקופסה, כל הודעה ב-div נפרד alertBox.innerHTML = alerts.map(alert => { // יש גם תאריך התחלה וסיום const start = alert["StartTime"]; const end = alert["EndTime"]; const region = alert["RegionDesc"] || ""; const desc = alert["Message"] || ""; // פורמט פשוט return `<div class="message"><strong>🔴 אזור:</strong> ${region}<br><strong>הודעה:</strong> ${desc}<br><small>${start} - ${end}</small></div>`; }).join(""); } catch(err) { alertBox.innerHTML = `<div class="message">❌ שגיאה בטעינת ההתראות</div>`; console.error("Error fetching alerts:", err); } } function sendTestAlert() { alertBox.innerHTML = `<div class="message">🧪 זוהי התראת בדיקה - אין התראה אמיתית כרגע</div>`; } // אתחל את ההתראות אוטומטית בהעמסה ועם ריענון כל 2 דקות fetchAlerts(); setInterval(fetchAlerts, 3000); </script> </body> </html>
<?php $apiUrl = 'https://api.tzevaadom.co.il/notifications'; function getAlerts($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $json = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if ($json === false || $json === '') { error_log("שגיאה ב-cURL: " . $error); return null; } $data = json_decode($json, true); if ($data === null) { error_log("שגיאה בפענוח JSON"); } return $data; } function saveAlerts($alerts) { $file = __DIR__ . '/alerts_history.json'; $existing = []; if (file_exists($file)) { $existingJson = file_get_contents($file); $existing = json_decode($existingJson, true); if ($existing === null) $existing = []; } foreach ($alerts as $alert) { $time = $alert['created_at'] ?? ''; $location = implode(', ', $alert['data']['locations'] ?? ['מיקום לא ידוע']); $exists = false; foreach ($existing as $ex) { if ($ex['time'] === $time) { $exists = true; break; } } if (!$exists) { $existing[] = [ 'time' => $time, 'location' => $location, ]; } } file_put_contents($file, json_encode($existing, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)); } $alerts = getAlerts($apiUrl); if ($alerts) { saveAlerts($alerts); echo "התראות נשמרו בהצלחה.\n"; } else { echo "שגיאה בקבלת ההתראות.\n"; }
fetch_and_save_alerts.php
<?php // get_alerts.php header('Content-Type: application/json'); if (file_exists('alerts_log.txt')) { $lines = file('alerts_log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $alerts = []; foreach ($lines as $line) { $parts = explode(" - ", $line, 2); if (count($parts) === 2) { $alerts[] = ['time' => $parts[0], 'location' => $parts[1]]; } } echo json_encode($alerts); } else { echo json_encode([]); } ?>
<?php // save_alert.php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $json = file_get_contents('php://input'); $data = json_decode($json, true); if ($data && isset($data['time']) && isset($data['location'])) { $entry = $data['time'] . " - " . $data['location'] . "\n"; file_put_contents('alerts_log.txt', $entry, FILE_APPEND | LOCK_EX); echo "OK"; } else { http_response_code(400); echo "Invalid data"; } } else { http_response_code(405); echo "Method not allowed"; } ?>
@יהודי-זה-הכי
1.מה זה כל הקבצים האלה?מה המטרה של כל אחד?
2.למה אתה משתמש בAPI לא רישמי?(https://api.tzevaadom.co.il/notifications)
3.תשתמש בקוד שהבאתי לך. -
@יהודי-זה-הכי
1.מה זה כל הקבצים האלה?מה המטרה של כל אחד?
2.למה אתה משתמש בAPI לא רישמי?(https://api.tzevaadom.co.il/notifications)
3.תשתמש בקוד שהבאתי לך.@יוסי-רחמים אני לא מסתדר איתו
-
@יהודי-זה-הכי
1.מה זה כל הקבצים האלה?מה המטרה של כל אחד?
2.למה אתה משתמש בAPI לא רישמי?(https://api.tzevaadom.co.il/notifications)
3.תשתמש בקוד שהבאתי לך.@יוסי-רחמים כתב בבקשת מידע | API של פקע"ר:
3.תשתמש בקוד שהבאתי לך.
{ "סטטוס": "שגיאה", "message": "נכשל בהתחברות לשרת Oref. שגיאת cURL: נכשל בהתחברות ל-www.oref.org.il פורט 443: החיבור נדחה", "חותמת זמן": "2025-06-23T20:21:03+03:00" }
-
@יוסי-רחמים אני לא מסתדר איתו
@יהודי-זה-הכי אז תשאל את AI STUDIO איך להתחבר לPHP שהבאתי לך שנמצא בקובץ
https://clarityai-smart-tools.onrender.com/alerts.phpוכנראה שיש שגיאה כי אתה לא שולח אליו נתונים טוב
כי זה מה שאני מקבל:{ "status": "success", "alerts_active": false, "data": null, "message": "No active alerts.", "timestamp": "2025-06-23T20:22:53+03:00" }
-
@יהודי-זה-הכי אז תשאל את AI STUDIO איך להתחבר לPHP שהבאתי לך שנמצא בקובץ
https://clarityai-smart-tools.onrender.com/alerts.phpוכנראה שיש שגיאה כי אתה לא שולח אליו נתונים טוב
כי זה מה שאני מקבל:{ "status": "success", "alerts_active": false, "data": null, "message": "No active alerts.", "timestamp": "2025-06-23T20:22:53+03:00" }