AnesKAM commited on
Commit
db68d10
·
verified ·
1 Parent(s): 0045452

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -9
app.py CHANGED
@@ -1,14 +1,26 @@
1
  from flask import Flask, render_template, request, jsonify
2
  import requests
 
3
 
4
  app = Flask(__name__)
5
 
6
- # رابط السيرفر المستقر الذي اخترناه
7
- SEARXNG_URL = 'https://search.rhscz.eu'
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  @app.route('/')
10
  def home():
11
- # يقوم بعرض واجهتك المخصصة الموجودة في مجلد templates
12
  return render_template('index.html')
13
 
14
  @app.route('/search')
@@ -18,17 +30,45 @@ def search():
18
  return jsonify({"error": "No query provided"}), 400
19
 
20
  try:
21
- # الطلب يخرج من السيرفر (بايثون) وليس المتصفح -> لا يوجد CORS
22
- params = {'q': query, 'format': 'json'}
23
- response = requests.get(f"{SEARXNG_URL}/search", params=params, timeout=5)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
 
 
 
 
 
 
 
25
  if response.status_code == 200:
26
  return jsonify(response.json())
27
  else:
28
- return jsonify({"error": "Search engine unavailable"}), response.status_code
29
 
 
 
30
  except Exception as e:
31
- return jsonify({"error": str(e)}), 500
32
 
33
  if __name__ == '__main__':
34
- app.run(host='0.0.0.0', port=7860)
 
 
1
  from flask import Flask, render_template, request, jsonify
2
  import requests
3
+ import random
4
 
5
  app = Flask(__name__)
6
 
7
+ # --- إعدادات السيرفر ---
8
+ # نصيحة: إذا استمر خطأ 429، قم بتغيير هذا الرابط برابط آخر من searx.space
9
+ SEARXNG_URL = 'https://search.rhscz.eu'
10
+
11
+ # قائمة بـ User-Agents حقيقية لخداع السيرفرات ومنع الحظر (Anti-Bot)
12
+ USER_AGENTS = [
13
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
14
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
15
+ "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
16
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0",
17
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1",
18
+ "Mozilla/5.0 (iPad; CPU OS 17_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1"
19
+ ]
20
 
21
  @app.route('/')
22
  def home():
23
+ # عرض الواجهة المخصصة الموجودة في templates/index.html
24
  return render_template('index.html')
25
 
26
  @app.route('/search')
 
30
  return jsonify({"error": "No query provided"}), 400
31
 
32
  try:
33
+ # 1. اختيار User-Agent عشوائي لكل طلب لتقليل احتمالية الحظر (429)
34
+ headers = {
35
+ 'User-Agent': random.choice(USER_AGENTS),
36
+ 'Accept': 'application/json',
37
+ 'Accept-Language': 'en-US,en;q=0.9',
38
+ }
39
+
40
+ # 2. إعداد البارامترات
41
+ params = {
42
+ 'q': query,
43
+ 'format': 'json',
44
+ 'language': 'en-US'
45
+ }
46
+
47
+ # 3. إرسال الطلب من السيرفر (Backend) لتجاوز CORS
48
+ response = requests.get(
49
+ f"{SEARXNG_URL}/search",
50
+ params=params,
51
+ headers=headers,
52
+ timeout=10 # زيادة المهلة لضمان وصول النتائج
53
+ )
54
 
55
+ # التعامل مع خطأ 429 (Too Many Requests)
56
+ if response.status_code == 429:
57
+ return jsonify({
58
+ "error": "Server is overloaded (429). Please wait a moment or try again.",
59
+ "suggestion": "If this persists, AnesNT recommends changing the SEARXNG_URL in app.py"
60
+ }), 429
61
+
62
  if response.status_code == 200:
63
  return jsonify(response.json())
64
  else:
65
+ return jsonify({"error": f"Search engine returned error {response.status_code}"}), response.status_code
66
 
67
+ except requests.exceptions.Timeout:
68
+ return jsonify({"error": "The search engine took too long to respond. Try again."}), 504
69
  except Exception as e:
70
+ return jsonify({"error": f"An unexpected error occurred: {str(e)}"}), 500
71
 
72
  if __name__ == '__main__':
73
+ # تشغيل التطبيق على المنفذ المطلوب من Hugging Face
74
+ app.run(host='0.0.0.0', port=7860)