浏览代码

[enh] categories to request callback

asciimoo 11 年前
父节点
当前提交
8520be3cd6
共有 2 个文件被更改,包括 41 次插入39 次删除
  1. 12
    5
      searx/engines/__init__.py
  2. 29
    34
      searx/webapp.py

+ 12
- 5
searx/engines/__init__.py 查看文件

@@ -61,18 +61,25 @@ def make_callback(engine_name, results, callback):
61 61
         results[engine_name] = cb_res
62 62
     return process_callback
63 63
 
64
-def search(query, request, selected_engines):
65
-    global engines
64
+def search(query, request, selected_categories):
65
+    global engines, categories
66 66
     requests = []
67 67
     results = {}
68
+    selected_engines = []
68 69
     user_agent = request.headers.get('User-Agent', '')
69
-    for ename, engine in engines.items():
70
-        if ename not in selected_engines:
70
+    if not len(selected_categories):
71
+        selected_categories = ['general']
72
+    for categ in selected_categories:
73
+        selected_engines.extend({'category': categ, 'name': x.name} for x in categories[categ])
74
+    for selected_engine in selected_engines:
75
+        if selected_engine['name'] not in engines:
71 76
             continue
77
+        engine = engines[selected_engine['name']]
72 78
         request_params = default_request_params()
73 79
         request_params['headers']['User-Agent'] = user_agent
80
+        request_params['category'] = selected_engine['category']
74 81
         request_params = engine.request(query, request_params)
75
-        callback = make_callback(ename, results, engine.response)
82
+        callback = make_callback(selected_engine['name'], results, engine.response)
76 83
         if request_params['method'] == 'GET':
77 84
             req = grequests.get(request_params['url']
78 85
                                 ,headers=request_params['headers']

+ 29
- 34
searx/webapp.py 查看文件

@@ -63,40 +63,35 @@ def index():
63 63
         request_data = request.form
64 64
     else:
65 65
         request_data = request.args
66
-    if request_data.get('q'):
67
-        selected_engines = []
68
-        selected_categories = []
69
-        for pd_name,pd in request_data.items():
70
-            if pd_name.startswith('category_'):
71
-                category = pd_name[9:]
72
-                if not category in categories:
73
-                    continue
74
-                selected_categories.append(category)
75
-                selected_engines.extend(x.name for x in categories[category])
76
-        if not len(selected_engines):
77
-            cookie_categories = request.cookies.get('categories', '').split(',')
78
-            for ccateg in cookie_categories:
79
-                if ccateg in categories:
80
-                    selected_categories.append(ccateg)
81
-                    selected_engines.extend(x.name for x in categories[ccateg])
82
-        if not len(selected_engines):
83
-            selected_categories.append('general')
84
-            selected_engines.extend(x.name for x in categories['general'])
85
-        query = request_data['q'].encode('utf-8')
86
-        results = search(query, request, selected_engines)
87
-        if request_data.get('format') == 'json':
88
-            # TODO HTTP headers
89
-            return json.dumps({'query': query, 'results': results})
90
-        template = render('results.html'
91
-                         ,results=results
92
-                         ,q=query.decode('utf-8')
93
-                         ,selected_categories=selected_categories
94
-                         ,number_of_results=len(results)
95
-                         )
96
-        resp = make_response(template)
97
-        resp.set_cookie('categories', ','.join(selected_categories))
98
-        return resp
99
-    return render('index.html')
66
+    if not request_data.get('q'):
67
+        return render('index.html')
68
+    selected_engines = []
69
+    selected_categories = []
70
+    for pd_name,pd in request_data.items():
71
+        if pd_name.startswith('category_'):
72
+            category = pd_name[9:]
73
+            if not category in categories:
74
+                continue
75
+            selected_categories.append(category)
76
+    if not len(selected_categories):
77
+        cookie_categories = request.cookies.get('categories', '').split(',')
78
+        for ccateg in cookie_categories:
79
+            if ccateg in categories:
80
+                selected_categories.append(ccateg)
81
+    query = request_data['q'].encode('utf-8')
82
+    results = search(query, request, selected_categories)
83
+    if request_data.get('format') == 'json':
84
+        # TODO HTTP headers
85
+        return json.dumps({'query': query, 'results': results})
86
+    template = render('results.html'
87
+                        ,results=results
88
+                        ,q=query.decode('utf-8')
89
+                        ,selected_categories=selected_categories
90
+                        ,number_of_results=len(results)
91
+                        )
92
+    resp = make_response(template)
93
+    resp.set_cookie('categories', ','.join(selected_categories))
94
+    return resp
100 95
 
101 96
 @app.route('/favicon.ico', methods=['GET'])
102 97
 def fav():