AnesKAM commited on
Commit
2bef995
·
verified ·
1 Parent(s): 1659194

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -45
app.py CHANGED
@@ -1,26 +1,11 @@
1
  from flask import Flask, render_template, request, jsonify
2
- import requests
3
  import random
4
 
5
  app = Flask(__name__)
6
 
7
- # --- قائمة السيرفرات الرحيمة والمستقرة (التحالف الأوروبي) ---
8
- # وضعنا عدة سيرفرات لضمان عدم توقف SurfGO أبداً
9
- SEARXNG_INSTANCES = [
10
- 'https://search.inetol.net', # إسبانيا
11
- 'https://search.ethibox.fr', # فرنسا
12
- 'https://search.rhscz.eu', # هولندا
13
- 'https://searx.tiekoetter.com', # ألمانيا
14
- 'https://search.datenkrake.ch', # سويسرا
15
- 'https://search.zina.dev' # ألمانيا
16
- ]
17
-
18
- USER_AGENTS = [
19
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
20
- "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",
21
- "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
22
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0"
23
- ]
24
 
25
  @app.route('/')
26
  def home():
@@ -32,34 +17,25 @@ def search():
32
  if not query:
33
  return jsonify({"error": "No query provided"}), 400
34
 
35
- # خلط قائمة السيرفرات في كل طلب لضمان توزيع الضغط
36
- random.shuffle(SEARXNG_INSTANCES)
37
-
38
- for url in SEARXNG_INSTANCES:
39
- try:
40
- headers = {'User-Agent': random.choice(USER_AGENTS)}
41
- params = {'q': query, 'format': 'json'}
42
-
43
- response = requests.get(f"{url}/search", params=params, headers=headers, timeout=5)
 
 
 
 
 
 
 
44
 
45
- # إذا كان السيرفر يعمل (200)، أرجع النتائج فوراً
46
- if response.status_code == 200:
47
- return jsonify(response.json())
48
-
49
- # إذا كان السيرفر يعطي 429، انتقل للسيرفر التالي في القائمة
50
- if response.status_code == 429:
51
- print(f"Server {url} is overloaded (429), trying next...")
52
- continue
53
-
54
- except Exception as e:
55
- print(f"Error with {url}: {str(e)}")
56
- continue
57
-
58
- # إذا انتهت كل السيرفرات ولم ينجح أي منها
59
- return jsonify({
60
- "error": "All search engines are currently overloaded. Please try again in a few minutes.",
61
- "suggestion": "This is a temporary IP block on Hugging Face. AnesNT is working on it!"
62
- }), 503
63
 
64
  if __name__ == '__main__':
65
  app.run(host='0.0.0.0', port=7860)
 
1
  from flask import Flask, render_template, request, jsonify
2
+ from curl_cffi import requests
3
  import random
4
 
5
  app = Flask(__name__)
6
 
7
+ # السيرفر المستقر (يمكنك تغييره من searx.space إذا لزم الأمر)
8
+ SEARXNG_URL = 'https://search.rhscz.eu'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  @app.route('/')
11
  def home():
 
17
  if not query:
18
  return jsonify({"error": "No query provided"}), 400
19
 
20
+ try:
21
+ # 🚀 محاكاة كاملة لمتصفح Chrome 120 لتجاوز الحظر
22
+ # impersonate="chrome120" تقوم بمحاكاة الـ TLS Fingerprint والـ Headers
23
+ response = requests.get(
24
+ f"{SEARXNG_URL}/search",
25
+ params={'q': query, 'format': 'json'},
26
+ impersonate="chrome120",
27
+ timeout=10
28
+ )
29
+
30
+ if response.status_code == 200:
31
+ return jsonify(response.json())
32
+ elif response.status_code == 429:
33
+ return jsonify({"error": "Server overloaded (429). Please try again in a minute."}), 429
34
+ else:
35
+ return jsonify({"error": f"Engine error: {response.status_code}"}), response.status_code
36
 
37
+ except Exception as e:
38
+ return jsonify({"error": f"Simulation Error: {str(e)}"}), 500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
  if __name__ == '__main__':
41
  app.run(host='0.0.0.0', port=7860)