AnesKAM commited on
Commit
d8ed607
·
verified ·
1 Parent(s): 7840538

Update results.html

Browse files
Files changed (1) hide show
  1. results.html +41 -36
results.html CHANGED
@@ -10,23 +10,21 @@
10
  @media (prefers-color-scheme: dark) { :root { --bg: #202124; --card: #202124; --text: #bdc1c6; --muted: #9aa0a6; --link: #8ab4f8; --border: #3c4043; } }
11
 
12
  body { font-family: 'Tajawal', sans-serif; background: var(--bg); color: var(--text); margin: 0; }
13
- header { background: var(--card); padding: 15px 5%; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 20px; position: sticky; top: 0; z-index: 10; }
14
- .logo-s { font-size: 24px; font-weight: 800; color: var(--primary); text-decoration: none; }
15
  .search-bar { flex-grow: 1; max-width: 600px; }
16
- .search-bar input { width: 100%; padding: 10px 20px; border-radius: 24px; border: 1px solid var(--border); background: var(--bg); color: var(--text); outline: none; }
17
 
18
- .container { max-width: 700px; margin: 20px 5% 20px auto; padding: 0 15px; }
19
- .stats { font-size: 13px; color: var(--muted); margin-bottom: 20px; }
20
- .result-item { margin-bottom: 28px; animation: fadeIn 0.5s ease; }
21
- .result-item a { text-decoration: none; }
22
- .result-item cite { font-style: normal; font-size: 14px; color: var(--text); display: block; margin-bottom: 4px; }
23
- .result-item h3 { margin: 0; color: var(--link); font-weight: 400; font-size: 20px; }
24
- .result-item h3:hover { text-decoration: underline; }
25
- .result-item p { margin: 5px 0 0; line-height: 1.58; font-size: 14px; }
26
 
27
  #loader { text-align: center; margin-top: 50px; color: var(--muted); }
28
- .error { display: none; background: #fff8f8; border: 1px solid #ffebeb; padding: 20px; border-radius: 8px; color: #d93025; }
29
- @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
30
  </style>
31
  </head>
32
  <body>
@@ -41,63 +39,70 @@
41
  </header>
42
 
43
  <div class="container">
44
- <div id="stats" class="stats">جاري البحث...</div>
45
- <div id="loader">يرجى الانتظار، جاري سحب النتائج...</div>
46
- <div id="results"></div>
47
- <div id="error" class="error">
48
- <b>عذراً! حدث خطأ في جلب البيانات.</b><br>
49
- تأكد أن سيرفر OpenShift قيد التشغيل وأن بروكسي جوجل يعمل.
50
- </div>
51
  </div>
52
 
53
  <script>
54
  const params = new URLSearchParams(window.location.search);
55
  const query = params.get('q');
56
 
57
- // --- إعداداتك الخاصة ---
58
- const GOOGLE_PROXY_URL = "https://script.google.com/macros/s/AKfycbzeOZLfw61_OnwsyF9mOMGyeCULb73TbjHEIfpFJkP88rt9nfNit26DXvwabkP63nNW/exec";
59
  const SEARXNG_API = "https://searxng-anesnt-dev.apps.rm1.0a51.p1.openshiftapps.com/search";
60
 
61
  if (query) {
62
  document.getElementById('q-input').value = query;
63
- performSearch(query);
64
  }
65
 
66
- async function performSearch(q) {
67
- const resultsDiv = document.getElementById('results');
68
  const loader = document.getElementById('loader');
69
- const stats = document.getElementById('stats');
70
 
71
- const target = `${SEARXNG_API}?q=${encodeURIComponent(q)}&format=json&language=ar`;
72
- const finalUrl = `${GOOGLE_PROXY_URL}?url=${encodeURIComponent(target)}`;
 
 
73
 
74
  try {
75
  const response = await fetch(finalUrl);
76
- const text = await response.text(); // نستلم نصاً لتجنب مشاكل جوجل
77
- const data = JSON.parse(text); // نحوله لـ JSON
 
 
 
 
78
 
 
79
  loader.style.display = 'none';
80
 
81
  if (!data.results || data.results.length === 0) {
82
- stats.innerText = "لم يتم العثور على نتائج.";
83
  return;
84
  }
85
 
86
- stats.innerText = `حوالي ${data.results.length} من النتائج لـ "${q}"`;
87
 
88
  data.results.forEach(item => {
89
- resultsDiv.innerHTML += `
90
  <div class="result-item">
91
  <cite>${item.url}</cite>
92
  <a href="${item.url}" target="_blank"><h3>${item.title}</h3></a>
93
- <p>${item.content || 'لا يوجد وصف متاح.'}</p>
94
  </div>
95
  `;
 
96
  });
 
97
  } catch (e) {
98
- console.error(e);
99
  loader.style.display = 'none';
100
- document.getElementById('error').style.display = 'block';
 
 
101
  }
102
  }
103
  </script>
 
10
  @media (prefers-color-scheme: dark) { :root { --bg: #202124; --card: #202124; --text: #bdc1c6; --muted: #9aa0a6; --link: #8ab4f8; --border: #3c4043; } }
11
 
12
  body { font-family: 'Tajawal', sans-serif; background: var(--bg); color: var(--text); margin: 0; }
13
+ header { background: var(--card); padding: 12px 5%; border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 20px; position: sticky; top: 0; z-index: 10; }
14
+ .logo-s { font-size: 22px; font-weight: 800; color: var(--primary); text-decoration: none; }
15
  .search-bar { flex-grow: 1; max-width: 600px; }
16
+ .search-bar input { width: 100%; padding: 8px 20px; border-radius: 24px; border: 1px solid var(--border); background: var(--bg); color: var(--text); outline: none; font-family: 'Tajawal'; }
17
 
18
+ .container { max-width: 700px; margin: 20px auto; padding: 0 20px; }
19
+ #stats { font-size: 13px; color: var(--muted); margin-bottom: 20px; }
20
+ .result-item { margin-bottom: 25px; }
21
+ .result-item cite { font-style: normal; font-size: 13px; color: var(--muted); display: block; margin-bottom: 2px; overflow: hidden; text-overflow: ellipsis; }
22
+ .result-item h3 { margin: 0; color: var(--link); font-weight: 500; font-size: 19px; }
23
+ .result-item h3:hover { text-decoration: underline; cursor: pointer; }
24
+ .result-item p { margin: 4px 0 0; line-height: 1.5; font-size: 14px; color: var(--text); opacity: 0.9; }
 
25
 
26
  #loader { text-align: center; margin-top: 50px; color: var(--muted); }
27
+ .error-box { display: none; background: #fff5f5; border: 1px solid #feb2b2; padding: 15px; border-radius: 8px; color: #c53030; font-size: 14px; }
 
28
  </style>
29
  </head>
30
  <body>
 
39
  </header>
40
 
41
  <div class="container">
42
+ <div id="stats">جاري البحث...</div>
43
+ <div id="loader">جاري جلب النتائج من OpenShift...</div>
44
+ <div id="results-list"></div>
45
+ <div id="error" class="error-box"></div>
 
 
 
46
  </div>
47
 
48
  <script>
49
  const params = new URLSearchParams(window.location.search);
50
  const query = params.get('q');
51
 
52
+ // --- الإعدادات ---
53
+ const GOOGLE_PROXY = "https://script.google.com/macros/s/AKfycbxMgy-ecIdzeIWvbL_ASNzWBcQJODEGkJ5MZn3JCWR0IMTFC48JrAY6kxcyXT5KceFB/exec";
54
  const SEARXNG_API = "https://searxng-anesnt-dev.apps.rm1.0a51.p1.openshiftapps.com/search";
55
 
56
  if (query) {
57
  document.getElementById('q-input').value = query;
58
+ search(query);
59
  }
60
 
61
+ async function search(q) {
62
+ const list = document.getElementById('results-list');
63
  const loader = document.getElementById('loader');
64
+ const errDiv = document.getElementById('error');
65
 
66
+ // بناء رابط البحث الأصلي
67
+ const apiCall = `${SEARXNG_API}?q=${encodeURIComponent(q)}&format=json&language=ar`;
68
+ // إرساله عبر بروكسي جوجل
69
+ const finalUrl = `${GOOGLE_PROXY}?url=${encodeURIComponent(apiCall)}`;
70
 
71
  try {
72
  const response = await fetch(finalUrl);
73
+ const rawText = await response.text();
74
+
75
+ // فحص إذا كان الرد HTML (يعني خطأ من جوجل)
76
+ if (rawText.includes("<!DOCTYPE") || rawText.includes("<html")) {
77
+ throw new Error("جوجل أرجع صفحة ويب بدلاً من بيانات. تأكد من إعداد 'Anyone' في الـ Script.");
78
+ }
79
 
80
+ const data = JSON.parse(rawText);
81
  loader.style.display = 'none';
82
 
83
  if (!data.results || data.results.length === 0) {
84
+ document.getElementById('stats').innerText = "لم يتم العثور على نتائج.";
85
  return;
86
  }
87
 
88
+ document.getElementById('stats').innerText = `تم العثور على ${data.results.length} نتيجة لـ "${q}"`;
89
 
90
  data.results.forEach(item => {
91
+ const itemHtml = `
92
  <div class="result-item">
93
  <cite>${item.url}</cite>
94
  <a href="${item.url}" target="_blank"><h3>${item.title}</h3></a>
95
+ <p>${item.content || 'لا يوجد وصف.'}</p>
96
  </div>
97
  `;
98
+ list.innerHTML += itemHtml;
99
  });
100
+
101
  } catch (e) {
 
102
  loader.style.display = 'none';
103
+ errDiv.style.display = 'block';
104
+ errDiv.innerHTML = `<b>فشل في عرض النتائج:</b><br>${e.message}`;
105
+ console.error(e);
106
  }
107
  }
108
  </script>