import cgi
import os
from google.appengine.api import users
from google.appengine.api import urlfetch
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
import freebase
class Search(db.Model):
author = db.UserProperty()
id = db.StringProperty()
url = db.StringProperty()
name = db.StringProperty()
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
searches = []
searches_avail = False
user = users.get_current_user()
if user:
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
searches = Search.gql("where author = :author order by date desc limit 5", author=user)
try:
searches[0]
searches_avail = True
except:
pass
else:
url = users.create_login_url(self.request.uri)
url_linktext = 'Login to Google'
template_values = {
'user' : user,
'searches': searches,
'searches_avail' : searches_avail,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
class Name(webapp.RequestHandler):
def get(self):
query = { "id" : cgi.escape(self.request.get('id')), "name" : None}
r = freebase.mqlread(query)
self.response.out.write(r.name)
class Recents(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
final = ""
if user:
final = "Your Recent Searches: "
searches = Search.gql("where author = :author order by date desc limit 5", author=user)
bignum = -1
for num, search in enumerate(searches):
final += "" + search.name + ", "
bignum = num
final = final[:-2]
if bignum == -1:
final = ""
if not user:
final = ""
self.response.out.write(final)
class Info(webapp.RequestHandler):
def get(self):
VIEW = "?id="
BASE = "http://www.freebase.com/api/trans/image_thumb"
OPTIONS = "?maxheight=300"
id = cgi.escape(self.request.get('id'))
if id != "":
info_query = {
"id" : id,
"name" : None,
}
info = freebase.mqlread(info_query)
user = users.get_current_user()
search = Search()
if user:
search.author = user
search.id = id
search.name = info.name
search.url = VIEW + id
search.put()
query = {
"id": id,
"/type/reflect/any_reverse": [{
"id" : None,
"/common/topic/image": [{
"id": None,
"optional": True,
"limit": 5
}]
}]
}
results = freebase.mqlread(query)
images = dict()
for thing in results["/type/reflect/any_reverse"]:
imgroup = thing['/common/topic/image']
if len(imgroup) > 0:
for image in imgroup:
images[VIEW + thing["id"]] = BASE + image['id'] + OPTIONS
#template_values = {"images": images}
#path = os.path.join(os.path.dirname(__file__), 'images.html')
#self.response.out.write(template.render(path, template_values))
final = ""
for page, image in images.items():
final += "
"
if len(final) == 0:
final = "Sorry, there are no images to show."
self.response.out.write(final)
application = webapp.WSGIApplication(
[('/', MainPage),
('/info', Info),
('/name', Name),
('/recents', Recents)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()