# -*- coding: iso-8859-1 -*-
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
from google.appengine.api.urlfetch import fetch
from api import AnyClipAPI
import re
from time import sleep
from random import randint
class Title(db.Model):
title = db.StringProperty(required=True)
code = db.StringProperty(required=True)
actors = db.StringListProperty()
characters = db.StringListProperty()
lastThumb = db.IntegerProperty()
class Answer(db.Model):
title = db.ReferenceProperty(Title)
frame = db.IntegerProperty()
answer = db.ListProperty(int)
class NewQuestion(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'application/json'
titles = Title.all()
title = titles[randint(0, titles.count() - 1)]
frame = randint(1, title.lastThumb / 10) * 10
url = "http://img.anyclip.com/thumbnails/%s/tmb_%s_480.jpg" % (title.code, frame)
cast = ""
for i in range(len(title.actors)):
if i != 0:
cast += ","
cast += "[\"%s\",\"%s\"]" % (title.actors[i], title.characters[i])
self.response.out.write("{\"title\":\"%s\",\"code\":\"%s\",\"frame\":%s,\"image\":\"%s\",\"cast\":[%s]}" % (title.title, title.code, frame, url, cast))
class AnswerQuestion(webapp.RequestHandler):
def get(self):
code = self.request.get("code")
answer = self.request.get("answer")
frame = self.request.get("frame")
try:
frame = int(frame)
except:
self.response.out.write("Frame must be an integer.")
return
if code == "" or answer == "" or frame < 0:
self.response.out.write("Not enough correct info supplied.")
return
answers = answer.split(",")
for i in range(len(answers)):
try:
answers[i] = int(answers[i])
except:
self.response.out.write("Answers must be integers.")
return
titleQuery = Title.all().filter('code = ', code).fetch(1)
if len(titleQuery) != 1 or len(answers) == 0 or (-1 in answers and len(answers) > 1):
self.response.out.write("Invalid answers")
return
maxAnswer = len(titleQuery[0].characters)
for ans in answers:
if ans < -1 or ans >= maxAnswer:
self.response.out.write("Answer to big or too small")
return
if frame > titleQuery[0].lastThumb:
self.response.out.write("Frame is too big")
return
answer = Answer()
answer.title = titleQuery[0]
answer.answer = answers;
answer.frame = frame
answer.put()
self.response.out.write("Success
" + str(answers) + "
" + code + "
" + str(frame));
class LoadNewTitles(webapp.RequestHandler):
def __init__(self):
self.api = AnyClipAPI("CAD58B9E-F045-492F-81B9-22CFE6B00604")
def getCast(self, imdbCode):
imdbList = fetch("http://www.imdb.com/title/tt%s/fullcredits" % imdbCode)
i = 0
while imdbList.status_code != 200:
i += 1
if i == 5:
break
sleep(3)
imdbList = fetch("http://www.imdb.com/title/tt%s/fullcredits" % imdbCode)
if imdbList.status_code != 200:
return None
i = 0
actors = []
characters = []
index = 0
htmlRemove = re.compile("<.*?>")
while True:
index = imdbList.content.find("