# -*- 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 NewQuestion(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'application/json' titles = Title.all() title = titles[randint(0, titles.count() - 1)] if len(title.actors) == 0: return self.get() url = "http://img.anyclip.com/thumbnails/%s/tmb_%s_480.jpg" % (title.code, "910") #frame hard-coded for now 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\",frame:\"%s\",cast:[%s]}" % (title.title, url, cast)) class Title(db.Model): title = db.StringProperty(required=True) code = db.StringProperty(required=True) actors = db.StringListProperty() characters = db.StringListProperty() lastThumb = db.IntegerProperty() class LoadNewTitles(webapp.RequestHandler): def __init__(self): self.api = AnyClipAPI("CAD58B9E-F045-492F-81B9-22CFE6B00604") self.imdbPattern = re.compile("([^><]+) \\.\\.\\. (?:([^><]+)[^><]*|([^><]*))") 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 = [] for match in self.imdbPattern.finditer(imdbList.content): actors.append(match.group(1)) character = match.group(2) if character == None: character = match.group(3) characters.append(character) i += 1 if i == 10: break return (actors, characters) def get(self): thumbListing = fetch("http://anyclip.zx2c4.com/thumblisting.py") if thumbListing.status_code != 200: self.response.out.write("error") return movies = thumbListing.content.split("\n") for movie in movies: codeThumb = movie.split(" ") if len(codeThumb) != 2: continue code = codeThumb[0] lastThumb = int(codeThumb[1]) if Title.all().filter('code = ', code).count() == 0: item = self.api.request("title", (code,)) if len(item) == 2 and item[0] == '1005': self.response.out.write("Could not add invalid code %s
" % code) continue self.response.out.write("Adding %s
" % item["Name"]) newTitle = Title(title=item["Name"], code=item["Code"]) newTitle.lastThumb = lastThumb cast = self.getCast(item["ImdbID"]) if cast == None: self.response.out.write("Could not add cast of %s
" % item["Name"]) continue newTitle.actors = cast[0] newTitle.characters = cast[1] newTitle.put() application = webapp.WSGIApplication( [('/newquestion', NewQuestion), ('/loadnewtitles', LoadNewTitles)], debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()