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
 | 
				
			||||||
                 )
 | 
					                 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||