בקשת מידע | API של פקע"ר
-
@יהודי-זה-הכי קישור עודכן
@יוסי-רחמים למה לא יעבוד בנטפרי ומי פיתח את זה?
בניתי את זה אבל אין לי מושג אם זה יעבוד וזה גם בדיליי
-
@יוסי-רחמים למה לא יעבוד בנטפרי ומי פיתח את זה?
בניתי את זה אבל אין לי מושג אם זה יעבוד וזה גם בדיליי
@יהודי-זה-הכי כתב בבקשת מידע | 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" } -
@יהודי-זה-הכי כתב בבקשת מידע | API של פקע"ר:
מי זה?
צאט AI חכם במיוחד עם הרבה יכולות

(AI רגיל... גם GPT טוב...)
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות