Question

I'm trying to get to grips with web2py/python. I want to get the user to fill in a search form, the term they search for is sent to my python script which should send the query to the blekko API and output the results to them in a new HTML page. I've implemented the following code but instead of my normal index page appearing, I'm getting the html response directly from blekko with '%(query)' /html appearing in it's search bar. Really need some help with this!

HTML form on the default/index.html page

<body>

<div id="MainArea">
  <p align="center">MY SEARCH ENGINE</p>
  <form name="form1" method="get" action="">
    <label for="SearchBar"></label>
    <div align="center">
      <input name="SearchBar" type="text" id="SearchBar" value="" size = "100px"><br />
      <input name="submit" type="submit" value="Search">
    </div>
  </form>
  <p align="center">&nbsp;</p>

Python code on the default.py controller

import urllib2

def index():
    import urllib2


    address = "http://www.blekko.com/?q='%(query)'+/html&auth=<mykey>"
    query = request.vars.query

    response = urllib2.urlopen(address)

    html=response.read()
    return html
Was it helpful?

Solution

I think you are misunderstanding how string formatting works. You need to put the address and query together still:

address = "http://www.blekko.com/?q='%(query)s'+/html&auth=<mykey>" % dict(query=request.vars.query)

OTHER TIPS

Add a hidden field to your form, call it "submitted". Then reformat your controller function as such:

import urllib2

def index():
    if request.vars.submitted:
        address = "http://www.blekko.com/?q='%(query)'+/html&auth=<mykey>"
        query = request.vars.query
        response = urllib2.urlopen(address)
        html=response.read()
        return html
    else:
        return dict()

This will show your index page unless the form was submitted and the page received the "submitted" form variable.

The /html doesn't do anything. Glad your question got answered. There is python client code for the blekko search api here: https://github.com/sampsyo/python-blekko

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top