[SciPy-Dev] Google custom search for ask.scipy.org?
Pauli Virtanen
pav at iki.fi
Thu Nov 11 15:53:51 EST 2010
On Sat, 30 Oct 2010 17:49:56 +0000, Pauli Virtanen wrote:
> A current (killer) problem with ask.scipy.org is that it does not have
> search. As a band-aid solution, it should be possible to add a Google
> custom search box, like on this page:
> http://scikit-learn.sourceforge.net/
>
> Google searches "site:ask.scipy.org/en/topic KEYWORDS" work well, so
> that a custom search should also work OK.
Here's a patch (my previous didn't seem to reach the list...):
# HG changeset patch
# User Pauli Virtanen <pav at iki.fi>
# Date 1288530804 -3600
# Node ID 342b2a291ab1a37ff9f198e1833d3b7a4d60d8b3
# Parent 1af6eeb468587f11ff8017bd422f8c90830e27a9
ENH: add Google-powered search
diff --git a/solace/default_settings.cfg b/solace/default_settings.cfg
--- a/solace/default_settings.cfg
+++ b/solace/default_settings.cfg
@@ -172,5 +172,12 @@
#: a proxy.
IS_BEHIND_PROXY = False
+# target site for Google "site:" search
+GOOGLE_SEARCH_SITE = "ask.scipy.org/*/topic"
+
+# key for Google Custom Search
+# if None, the search is simply a redirect to Google
+GOOGLE_SEARCH_KEY = "001245708749086444135:49umyzakcpw"
+
# get rid of them again
del os, tempfile
diff --git a/solace/templates/_helpers.html b/solace/templates/_helpers.html
--- a/solace/templates/_helpers.html
+++ b/solace/templates/_helpers.html
@@ -27,3 +27,34 @@
</span></span>
{%- endmacro %}
+{% macro render_search() %}
+ <div class="search_form">
+ {% if settings.GOOGLE_SEARCH_KEY %}
+ <div id="cse">.</div>
+ <script src="http://www.google.com/jsapi" type="text/javascript"></script>
+ <script type="text/javascript">
+ google.load('search', '1', {language : 'en'});
+ google.setOnLoadCallback(function() {
+ var customSearchControl = new google.search.CustomSearchControl('{{ settings.GOOGLE_SEARCH_KEY }}');
+ customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
+ var options = new google.search.DrawOptions();
+ options.setAutoComplete(true);
+ customSearchControl.draw('cse', options);
+ }, true);
+ </script>
+ <noscript>
+ <form method="get" action="http://www.google.com/search">
+ <input type="text" id="search" name="q" value="" />
+ <input type="hidden" name="sitesearch" value="{{ settings.GOOGLE_SEARCH_SITE }}" />
+ <input type="submit" id="go" value="Search" />
+ </form>
+ </noscript>
+ {% else %}
+ <form method="get" action="http://www.google.com/search">
+ <input type="text" id="search" name="q" value="" />
+ <input type="hidden" name="sitesearch" value="{{ settings.GOOGLE_SEARCH_SITE }}" />
+ <input type="submit" id="go" value="Search" />
+ </form>
+ {% endif %}
+ </div>
+{% endmacro %}
diff --git a/solace/templates/kb/overview.html b/solace/templates/kb/overview.html
--- a/solace/templates/kb/overview.html
+++ b/solace/templates/kb/overview.html
@@ -1,5 +1,6 @@
{% extends 'layout.html' %}
{% from 'kb/_boxes.html' import render_topics, render_topic_tabs %}
+{% from '_helpers.html' import render_search %}
{% set page_title = _('Overview') %}
{% block html_head %}
{{- super() }}
@@ -10,8 +11,10 @@
<h1>{{ page_title }}</h1>
<div class="explanation">
<p>{% trans -%}
- This is an overview of some of the newest topics here on Solace. You can view other topics grouped by activity, votes and hotness.
+ This is an overview of some of the newest topics here on Solace. You can view other topics grouped by activity, votes and hotness.
{%- endtrans %}
+ </p>
+ {{ render_search() }}
</div>
{{ render_topic_tabs('kb.overview', order_by) }}
{{ render_topics(topics) }}
diff --git a/solace/templates/kb/search.html b/solace/templates/kb/search.html
new file mode 100644
--- /dev/null
+++ b/solace/templates/kb/search.html
@@ -0,0 +1,9 @@
+{% extends 'layout.html' %}
+{% from '_helpers.html' import render_search %}
+{% set page_title = _(Search) %}
+{% block body %}
+ <h1>{{ _('Search') }}</h1>
+ <p>
+ {{ render_search() }}
+ </p>
+{% endblock %}
diff --git a/solace/templates/layout.html b/solace/templates/layout.html
--- a/solace/templates/layout.html
+++ b/solace/templates/layout.html
@@ -77,6 +77,7 @@
('kb.new', true, _('Ask')),
('kb.overview', true, _('Overview')),
('kb.unanswered', true, _('Unanswered')),
+ ('kb.search', true, _('Search')),
('kb.tags', true, _('Tags')),
(('kb.userlist', true, _('Users')) if request.view_lang and settings.LANGUAGE_SECTIONS|length > 1
else ('users.userlist', false, _('Users'))),
diff --git a/solace/urls.py b/solace/urls.py
--- a/solace/urls.py
+++ b/solace/urls.py
@@ -43,6 +43,9 @@
Rule('/users/') > 'kb.userlist'
]),
+ # kb search
+ Rule('/search/') > 'kb.search',
+
# kb sections not depending on the lang code
Rule('/sections/') > 'kb.sections',
diff --git a/solace/views/kb.py b/solace/views/kb.py
--- a/solace/views/kb.py
+++ b/solace/views/kb.py
@@ -381,6 +381,10 @@
return common_userlist(request, locale=request.view_lang)
+def search(request):
+ """Show a Google search form."""
+ return render_template('kb/search.html')
+
@no_cache
@require_login
@exchange_token_protected
More information about the SciPy-Dev
mailing list