on master help sign in
Merge branch 'featured_result' of https://github.com/pw3t/searx
bfdd6ebasciimoo
searx/engines/mediawiki.py+2
@@ -14,5 +14,7 @@ def request(query, params):
14def response(resp):
14def response(resp):
15 search_results = loads(resp.text)
15 search_results = loads(resp.text)
16 res = search_results.get('query', {}).get('search', [])
16 res = search_results.get('query', {}).get('search', [])
17+
17 return [{'url': url + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')),
18 return [{'url': url + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')),
18 'title': result['title']} for result in res[:int(number_of_results)]]
19 'title': result['title']} for result in res[:int(number_of_results)]]
20+
searx/engines/vimeo.py+7−3
@@ -35,7 +35,11 @@ def response(resp):
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+ thumbnail = extract_text(result.xpath(content_xpath)[0])
38− content = '<a href="{0}"> <img src="{2}"/> </a>'.format(url, title, extract_text(result.xpath(content_xpath)[0]))
39+ content = '<a href="{0}"> <img src="{2}"/> </a>'.format(url, title, thumbnail)
39− results.append({'url': url, 'title': title, 'content': content})
40+ results.append({'url': url
40−
41+ , 'title': title
42+ , 'content': content
43+ , 'template':'videos.html'
44+ , 'thumbnail': thumbnail})
41 return results
45 return results
searx/engines/youtube.py+9−2
@@ -26,14 +26,21 @@ def response(resp):
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']):
32+ thumbnail = result['media$group']['media$thumbnail'][0]['url']
30− content += '<a href="{0}" title="{0}" ><img src="{1}" /></a>'.format(url, 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
searx/static/css/style.css+1
@@ -79,6 +79,7 @@ a { text-decoration: none; color: #1a11be; }
79a:visited { color: #7b11be; }
79a:visited { color: #7b11be; }
80
80
81.result { margin: 19px 0 18px 0; padding: 0; max-width: 55em; clear: both; }
81.result { margin: 19px 0 18px 0; padding: 0; max-width: 55em; clear: both; }
82+.result:hover { background: #e8e7e6; }
82.result_title { margin-bottom: 0; }
83.result_title { margin-bottom: 0; }
83.result h3 { font-size: 1em; word-wrap:break-word; margin: 5px 0 1px 0; padding: 0 }
84.result h3 { font-size: 1em; word-wrap:break-word; margin: 5px 0 1px 0; padding: 0 }
84.result .content { font-size: 0.8em; margin: 0; padding: 0; max-width: 54em; word-wrap:break-word; line-height: 1.24; }
85.result .content { font-size: 0.8em; margin: 0; padding: 0; max-width: 54em; word-wrap:break-word; line-height: 1.24; }
searx/static/img/icon_github.iconew file

Binary file not shown.

searx/static/img/icon_soundcloud.iconew file

Binary file not shown.

searx/static/img/icon_stackoverflow.iconew file

Binary file not shown.

searx/static/img/icon_twitter.iconew file

Binary file not shown.

searx/static/img/icon_vimeo.iconew file

Binary file not shown.

searx/static/img/icon_wikipedia.iconew file

Binary file not shown.

searx/static/img/icon_youtube.iconew file

Binary file not shown.

searx/templates/result_templates/default.html+10−1
@@ -1,5 +1,14 @@
1<div class="result {{ result.class }}">
1<div class="result {{ result.class }}">
2+
3+ {% if result['favicon'] %}
4+ <div style="float:left; margin:2px;">
5+ <img width="18" height="18" src="static/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}.ico" title="{{result['favicon']}}.ico" />
6+ </div>
7+ {% endif %}
8+
9+ <div>
2− <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
10+ <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3></br>
3 <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p>
11 <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p>
4 <p class="url">{{ result.pretty_url }}</p>
12 <p class="url">{{ result.pretty_url }}</p>
13+ </div>
5</div>
14</div>
searx/templates/result_templates/videos.htmlnew file+13
@@ -0,0 +1,13 @@
1+<div class="result">
2+ {% if result['favicon'] %}
3+ <div style="float:left; margin:2px;">
4+ <img width="18" height="18" src="static/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}.ico" title="{{result['favicon']}}.ico" />
5+ </div>
6+ {% endif %}
7+
8+ <p>
9+ <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
10+ <a href="{{ result.url }}"><img width="300" height="170" src="{{ result.thumbnail }}" title={{ result.title }} alt=" {{ result.title }}"/></a>
11+ <p class="url">{{ result.url }}</p>
12+ </p>
13+</div>
searx/templates/results.html+3
@@ -9,9 +9,12 @@
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+
15 {% for result in results %}
18 {% for result in results %}
16 {% if result['template'] %}
19 {% if result['template'] %}
17 {% include 'result_templates/'+result['template'] %}
20 {% include 'result_templates/'+result['template'] %}
searx/webapp.py+7−1
@@ -120,6 +120,7 @@ def index():
120
120
121 results, suggestions = search(query, request, selected_engines)
121 results, suggestions = search(query, request, selected_engines)
122
122
123+ featured_results = []
123 for result in results:
124 for result in results:
124 if request_data.get('format', 'html') == 'html':
125 if request_data.get('format', 'html') == 'html':
125 if 'content' in result:
126 if 'content' in result:
@@ -134,6 +135,10 @@ def index():
134 else:
135 else:
135 result['pretty_url'] = result['url']
136 result['pretty_url'] = result['url']
136
137
138+ for engine in result['engines']:
139+ if engine in ['wikipedia', 'youtube', 'vimeo', 'soundcloud', 'twitter', 'stackoverflow', 'github']:
140+ result['favicon'] = engine
141+
137 if request_data.get('format') == 'json':
142 if request_data.get('format') == 'json':
138 return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
143 return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json')
139 elif request_data.get('format') == 'csv':
144 elif request_data.get('format') == 'csv':
@@ -162,7 +167,8 @@ def index():
162 ,results=results
167 ,results=results
163 ,q=request_data['q']
168 ,q=request_data['q']
164 ,selected_categories=selected_categories
169 ,selected_categories=selected_categories
165− ,number_of_results=len(results)
170+ ,number_of_results=len(results)+len(featured_results)
171+ ,featured_results=featured_results
166 ,suggestions=suggestions
172 ,suggestions=suggestions
167 )
173 )
168
174