ソースを参照

[ehn] Add a 'featured result feature'm putting on top of the reasults ddg definitions and wikipedia (ugly html / css)

pw3t 11 年 前
コミット
cf8f444e85
共有6 個のファイルを変更した53 個の追加6 個の削除を含む
  1. 7
    3
      searx/engines/vimeo.py
  2. 9
    2
      searx/engines/youtube.py
  3. 8
    0
      searx/static/css/style.css
  4. 7
    0
      searx/templates/result_templates/videos.html
  5. 15
    0
      searx/templates/results.html
  6. 7
    1
      searx/webapp.py

+ 7
- 3
searx/engines/vimeo.py ファイルの表示

35
     for result in dom.xpath(results_xpath):
35
     for result in dom.xpath(results_xpath):
36
         url = base_url + result.xpath(url_xpath)[0]
36
         url = base_url + result.xpath(url_xpath)[0]
37
         title = p.unescape(extract_text(result.xpath(title_xpath)))
37
         title = p.unescape(extract_text(result.xpath(title_xpath)))
38
-        content = '<a href="{0}">  <img src="{2}"/> </a>'.format(url, title, extract_text(result.xpath(content_xpath)[0]))
39
-        results.append({'url': url, 'title': title, 'content': content})
40
-
38
+        thumbnail = extract_text(result.xpath(content_xpath)[0])
39
+        content = '<a href="{0}">  <img src="{2}"/> </a>'.format(url, title, thumbnail)
40
+        results.append({'url': url
41
+                        , 'title': title
42
+                        , 'content': content 
43
+                        , 'template':'videos.html'
44
+                        , 'thumbnail': thumbnail})
41
     return results
45
     return results

+ 9
- 2
searx/engines/youtube.py ファイルの表示

26
             url = url[:-1]
26
             url = url[:-1]
27
         title = result['title']['$t']
27
         title = result['title']['$t']
28
         content = ''
28
         content = ''
29
+
30
+        thumbnail = ''
29
         if len(result['media$group']['media$thumbnail']):
31
         if len(result['media$group']['media$thumbnail']):
30
-            content += '<a href="{0}" title="{0}" ><img src="{1}" /></a>'.format(url, result['media$group']['media$thumbnail'][0]['url'])
32
+            thumbnail = result['media$group']['media$thumbnail'][0]['url']
33
+            content += '<a href="{0}" title="{0}" ><img src="{1}" /></a>'.format(url, thumbnail)
31
         if len(content):
34
         if len(content):
32
             content += '<br />' + result['content']['$t']
35
             content += '<br />' + result['content']['$t']
33
         else:
36
         else:
34
             content = result['content']['$t']
37
             content = result['content']['$t']
35
 
38
 
36
-        results.append({'url': url, 'title': title, 'content': content})
39
+        results.append({'url': url
40
+                        , 'title': title
41
+                        , 'content': content
42
+                        , 'template':'videos.html'
43
+                        , 'thumbnail':thumbnail})
37
 
44
 
38
     return results
45
     return results
39
 
46
 

+ 8
- 0
searx/static/css/style.css ファイルの表示

70
 a:visited { color: #7b11be; }
70
 a:visited { color: #7b11be; }
71
 
71
 
72
 .result { margin: 19px 0 18px 0; padding: 0; max-width: 55em;  clear: both; }
72
 .result { margin: 19px 0 18px 0; padding: 0; max-width: 55em;  clear: both; }
73
+.result:hover { background: #e8e7e6; }
73
 .result_title { margin-bottom: 0; }
74
 .result_title { margin-bottom: 0; }
74
 .result h3 { font-size: 1em; word-wrap:break-word; margin: 5px 0 1px 0; padding: 0 }
75
 .result h3 { font-size: 1em; word-wrap:break-word; margin: 5px 0 1px 0; padding: 0 }
75
 .result .content { font-size: 0.8em; margin: 0; padding: 0; max-width: 54em; word-wrap:break-word; line-height: 1.24; }
76
 .result .content { font-size: 0.8em; margin: 0; padding: 0; max-width: 54em; word-wrap:break-word; line-height: 1.24; }
143
 
144
 
144
 #result_count { font-size: 0.8em; margin: 2px 0 2px 0; padding: 0 }
145
 #result_count { font-size: 0.8em; margin: 2px 0 2px 0; padding: 0 }
145
 
146
 
147
+#fr { padding: 2px 6px;
148
+display: inline-block; 
149
+background: #ECF0F1; 
150
+border-radius: 4px; 
151
+border: 1px solid #3498DB;; 
152
+width:55em;}
153
+
146
 #suggestions { position: absolute; left: 54em; width: 12em; margin: 0 2px 5px 5px; padding: 0 2px 2px 2px; }
154
 #suggestions { position: absolute; left: 54em; width: 12em; margin: 0 2px 5px 5px; padding: 0 2px 2px 2px; }
147
 #suggestions span { display: block; font-size: 0.8em; margin: 0 2px 10px 2px; padding: 0; }
155
 #suggestions span { display: block; font-size: 0.8em; margin: 0 2px 10px 2px; padding: 0; }
148
 #suggestions form { display: block; }
156
 #suggestions form { display: block; }

+ 7
- 0
searx/templates/result_templates/videos.html ファイルの表示

1
+<div class="result">
2
+    <p>
3
+      <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
4
+      <a href="{{ result.url }}"><img width="300" height="170"  src="{{ result.thumbnail }}" title={{ result.title }} alt=" {{ result.title }}"/></a>
5
+      <p class="url">{{ result.url }}</p>
6
+    </p>
7
+</div>

+ 15
- 0
searx/templates/results.html ファイルの表示

9
     {% if suggestions %}
9
     {% if suggestions %}
10
     <div id="suggestions"><span>Suggestions: </span>{% for suggestion in suggestions %}<form method="post" action="/"><input type="hidden" name="q" value="{{suggestion}}"><input type="submit" value="{{ suggestion }}" /></form>{% endfor %}</div>
10
     <div id="suggestions"><span>Suggestions: </span>{% for suggestion in suggestions %}<form method="post" action="/"><input type="hidden" name="q" value="{{suggestion}}"><input type="submit" value="{{ suggestion }}" /></form>{% endfor %}</div>
11
     {% endif %}
11
     {% endif %}
12
+    
13
+
12
     <div id ="result_count">
14
     <div id ="result_count">
13
         Number of results: {{ number_of_results }}
15
         Number of results: {{ number_of_results }}
14
     </div>
16
     </div>
17
+    {% if featured_results  %}
18
+    <div id="fr">
19
+
20
+    {% for result in featured_results %}
21
+        {% if result['template'] %}
22
+            {% include 'result_templates/'+result['template'] %}
23
+        {% else %}
24
+            {% include 'result_templates/default.html' %}
25
+        {% endif %}
26
+    {% endfor %}
27
+    </div>
28
+    {% endif %}
29
+
15
     {% for result in results %}
30
     {% for result in results %}
16
         {% if result['template'] %}
31
         {% if result['template'] %}
17
             {% include 'result_templates/'+result['template'] %}
32
             {% include 'result_templates/'+result['template'] %}

+ 7
- 1
searx/webapp.py ファイルの表示

125
 
125
 
126
     results, suggestions = search(query, request, selected_engines)
126
     results, suggestions = search(query, request, selected_engines)
127
 
127
 
128
+    featured_results = []
128
     for result in results:
129
     for result in results:
129
         if request_data.get('format', 'html') == 'html':
130
         if request_data.get('format', 'html') == 'html':
130
             if 'content' in result:
131
             if 'content' in result:
139
         else:
140
         else:
140
             result['pretty_url'] = result['url']
141
             result['pretty_url'] = result['url']
141
 
142
 
143
+        if 'wikipedia' in result['engines'] or 'ddg definitions' in result['engines']:
144
+            featured_results.append(result)
145
+            results.remove(result)
146
+
142
     if request_data.get('format') == 'json':
147
     if request_data.get('format') == 'json':
143
         return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
148
         return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
144
     elif request_data.get('format') == 'csv':
149
     elif request_data.get('format') == 'csv':
167
                  ,results=results
172
                  ,results=results
168
                  ,q=request_data['q']
173
                  ,q=request_data['q']
169
                  ,selected_categories=selected_categories
174
                  ,selected_categories=selected_categories
170
-                 ,number_of_results=len(results)
175
+                 ,number_of_results=len(results)+len(featured_results)
176
+                 ,featured_results=featured_results 
171
                  ,suggestions=suggestions
177
                  ,suggestions=suggestions
172
                  )
178
                  )
173
 
179