Merge branch 'featured_result' of https://github.com/pw3t/searx
| @ -14,5 +14,7 @@ def request(query, params): | |||||||
| def response(resp): | def response(resp): | ||||||
|     search_results = loads(resp.text) |     search_results = loads(resp.text) | ||||||
|     res = search_results.get('query', {}).get('search', []) |     res = search_results.get('query', {}).get('search', []) | ||||||
|  | 
 | ||||||
|     return [{'url': url + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')), |     return [{'url': url + 'wiki/' + quote(result['title'].replace(' ', '_').encode('utf-8')), | ||||||
|         'title': result['title']} for result in res[:int(number_of_results)]] |         'title': result['title']} for result in res[:int(number_of_results)]] | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -35,7 +35,11 @@ def response(resp): | |||||||
|     for result in dom.xpath(results_xpath): |     for result in dom.xpath(results_xpath): | ||||||
|         url = base_url + result.xpath(url_xpath)[0] |         url = base_url + result.xpath(url_xpath)[0] | ||||||
|         title = p.unescape(extract_text(result.xpath(title_xpath))) |         title = p.unescape(extract_text(result.xpath(title_xpath))) | ||||||
|         content = '<a href="{0}">  <img src="{2}"/> </a>'.format(url, title, extract_text(result.xpath(content_xpath)[0])) |         thumbnail = extract_text(result.xpath(content_xpath)[0]) | ||||||
|         results.append({'url': url, 'title': title, 'content': content}) |         content = '<a href="{0}">  <img src="{2}"/> </a>'.format(url, title, thumbnail) | ||||||
| 
 |         results.append({'url': url | ||||||
|  |                         , 'title': title | ||||||
|  |                         , 'content': content  | ||||||
|  |                         , 'template':'videos.html' | ||||||
|  |                         , 'thumbnail': thumbnail}) | ||||||
|     return results |     return results | ||||||
|  | |||||||
| @ -26,14 +26,21 @@ def response(resp): | |||||||
|             url = url[:-1] |             url = url[:-1] | ||||||
|         title = result['title']['$t'] |         title = result['title']['$t'] | ||||||
|         content = '' |         content = '' | ||||||
|  | 
 | ||||||
|  |         thumbnail = '' | ||||||
|         if len(result['media$group']['media$thumbnail']): |         if len(result['media$group']['media$thumbnail']): | ||||||
|             content += '<a href="{0}" title="{0}" ><img src="{1}" /></a>'.format(url, result['media$group']['media$thumbnail'][0]['url']) |             thumbnail = result['media$group']['media$thumbnail'][0]['url'] | ||||||
|  |             content += '<a href="{0}" title="{0}" ><img src="{1}" /></a>'.format(url, thumbnail) | ||||||
|         if len(content): |         if len(content): | ||||||
|             content += '<br />' + result['content']['$t'] |             content += '<br />' + result['content']['$t'] | ||||||
|         else: |         else: | ||||||
|             content = result['content']['$t'] |             content = result['content']['$t'] | ||||||
| 
 | 
 | ||||||
|         results.append({'url': url, 'title': title, 'content': content}) |         results.append({'url': url | ||||||
|  |                         , 'title': title | ||||||
|  |                         , 'content': content | ||||||
|  |                         , 'template':'videos.html' | ||||||
|  |                         , 'thumbnail':thumbnail}) | ||||||
| 
 | 
 | ||||||
|     return results |     return results | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -79,6 +79,7 @@ a { text-decoration: none; color: #1a11be; } | |||||||
| a:visited { color: #7b11be; } | a:visited { color: #7b11be; } | ||||||
| 
 | 
 | ||||||
| .result { margin: 19px 0 18px 0; padding: 0; max-width: 55em;  clear: both; } | .result { margin: 19px 0 18px 0; padding: 0; max-width: 55em;  clear: both; } | ||||||
|  | .result:hover { background: #e8e7e6; } | ||||||
| .result_title { margin-bottom: 0; } | .result_title { margin-bottom: 0; } | ||||||
| .result h3 { font-size: 1em; word-wrap:break-word; margin: 5px 0 1px 0; padding: 0 } | .result h3 { font-size: 1em; word-wrap:break-word; margin: 5px 0 1px 0; padding: 0 } | ||||||
| .result .content { font-size: 0.8em; margin: 0; padding: 0; max-width: 54em; word-wrap:break-word; line-height: 1.24; } | .result .content { font-size: 0.8em; margin: 0; padding: 0; max-width: 54em; word-wrap:break-word; line-height: 1.24; } | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								searx/static/img/icon_github.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.4 KiB | 
							
								
								
									
										
											BIN
										
									
								
								searx/static/img/icon_soundcloud.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								searx/static/img/icon_stackoverflow.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								searx/static/img/icon_twitter.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.1 KiB | 
							
								
								
									
										
											BIN
										
									
								
								searx/static/img/icon_vimeo.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.4 KiB | 
							
								
								
									
										
											BIN
										
									
								
								searx/static/img/icon_wikipedia.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										
											BIN
										
									
								
								searx/static/img/icon_youtube.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.1 KiB | 
| @ -1,5 +1,14 @@ | |||||||
| <div class="result {{ result.class }}"> | <div class="result {{ result.class }}"> | ||||||
|     <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3> | 
 | ||||||
|  |   {% if result['favicon'] %} | ||||||
|  |   <div style="float:left; margin:2px;"> | ||||||
|  |     <img width="18" height="18" src="static/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}.ico" title="{{result['favicon']}}.ico" /> | ||||||
|  |   </div> | ||||||
|  |   {% endif %} | ||||||
|  | 
 | ||||||
|  |   <div> | ||||||
|  |     <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3></br> | ||||||
|     <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p> |     <p class="content">{% if result.content %}{{ result.content|safe }}<br />{% endif %}</p> | ||||||
|     <p class="url">{{ result.pretty_url }}</p> |     <p class="url">{{ result.pretty_url }}</p> | ||||||
|  |   </div> | ||||||
| </div> | </div> | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								searx/templates/result_templates/videos.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,13 @@ | |||||||
|  | <div class="result"> | ||||||
|  |   {% if result['favicon'] %} | ||||||
|  |   <div style="float:left; margin:2px;"> | ||||||
|  |     <img width="18" height="18" src="static/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}.ico" title="{{result['favicon']}}.ico" /> | ||||||
|  |   </div> | ||||||
|  |   {% endif %} | ||||||
|  | 
 | ||||||
|  |     <p> | ||||||
|  |       <h3 class="result_title"><a href="{{ result.url }}">{{ result.title|safe }}</a></h3> | ||||||
|  |       <a href="{{ result.url }}"><img width="300" height="170"  src="{{ result.thumbnail }}" title={{ result.title }} alt=" {{ result.title }}"/></a> | ||||||
|  |       <p class="url">{{ result.url }}</p> | ||||||
|  |     </p> | ||||||
|  | </div> | ||||||
| @ -9,9 +9,12 @@ | |||||||
|     {% if suggestions %} |     {% if suggestions %} | ||||||
|     <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> |     <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> | ||||||
|     {% endif %} |     {% endif %} | ||||||
|  |      | ||||||
|  | 
 | ||||||
|     <div id ="result_count"> |     <div id ="result_count"> | ||||||
|         Number of results: {{ number_of_results }} |         Number of results: {{ number_of_results }} | ||||||
|     </div> |     </div> | ||||||
|  | 
 | ||||||
|     {% for result in results %} |     {% for result in results %} | ||||||
|         {% if result['template'] %} |         {% if result['template'] %} | ||||||
|             {% include 'result_templates/'+result['template'] %} |             {% include 'result_templates/'+result['template'] %} | ||||||
|  | |||||||
| @ -120,6 +120,7 @@ def index(): | |||||||
| 
 | 
 | ||||||
|     results, suggestions = search(query, request, selected_engines) |     results, suggestions = search(query, request, selected_engines) | ||||||
| 
 | 
 | ||||||
|  |     featured_results = [] | ||||||
|     for result in results: |     for result in results: | ||||||
|         if request_data.get('format', 'html') == 'html': |         if request_data.get('format', 'html') == 'html': | ||||||
|             if 'content' in result: |             if 'content' in result: | ||||||
| @ -134,6 +135,10 @@ def index(): | |||||||
|         else: |         else: | ||||||
|             result['pretty_url'] = result['url'] |             result['pretty_url'] = result['url'] | ||||||
| 
 | 
 | ||||||
|  |         for engine in result['engines']: | ||||||
|  |             if engine in ['wikipedia', 'youtube', 'vimeo', 'soundcloud', 'twitter', 'stackoverflow', 'github']: | ||||||
|  |                 result['favicon'] = engine | ||||||
|  | 
 | ||||||
|     if request_data.get('format') == 'json': |     if request_data.get('format') == 'json': | ||||||
|         return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json') |         return Response(json.dumps({'query': query, 'results': results}), mimetype='application/json') | ||||||
|     elif request_data.get('format') == 'csv': |     elif request_data.get('format') == 'csv': | ||||||
| @ -162,7 +167,8 @@ def index(): | |||||||
|                  ,results=results |                  ,results=results | ||||||
|                  ,q=request_data['q'] |                  ,q=request_data['q'] | ||||||
|                  ,selected_categories=selected_categories |                  ,selected_categories=selected_categories | ||||||
|                  ,number_of_results=len(results) |                  ,number_of_results=len(results)+len(featured_results) | ||||||
|  |                  ,featured_results=featured_results  | ||||||
|                  ,suggestions=suggestions |                  ,suggestions=suggestions | ||||||
|                  ) |                  ) | ||||||
| 
 | 
 | ||||||
|  | |||||||