from twisted.web import resource from twisted.internet import reactor import time from hatena import Database, Log, NotFound from Hatenatools import UGO #makes a flipnote list of the most seen ones among the recently uploaded class PyResource(resource.Resource): isLeaf = True def __init__(self): resource.Resource.__init__(self) self.pages = []#10 first pages self.newestview = None reactor.callLater(2, self.Update)#or it'll clash with hotmovies.ugo def render(self, request): page = int(request.args["page"][0]) if "page" in request.args else 1 if len(self.pages) >= page: path = "/".join(request.path.split("/")[3:]) Log(request, "%s page %i" % (path, page)) request.responseHeaders.setRawHeaders('content-type', ['text/plain']) return self.pages[page-1] else: return NotFound.render(request) #=== def Update(self):#called every 15 minutes reactor.callLater(60*10, self.Update) if self.newestview <> Database.Views: self.newestview = Database.Views reactor.callInThread(self.UpdateThreaded, Database.Newest) def UpdateThreaded(self, flipnotes):#run in an another thread #sort the flipnotes by viewcount, affected by amount of stars def sort((i, (ID, flip))): views, stars = Database.GetFlipnote(ID, flip)[1:3] return int(stars)*110 + int(views)/10 - i flipnotes = map(lambda x: x[1], sorted(enumerate(flipnotes), key=sort)[::-1])[:500] #create pages: pages = [] pagecount = (len(flipnotes)-1)/50 + 1 if pagecount > 10: pagecount = 10#temp? flipcount = len(flipnotes) if len(flipnotes) < 500 else 500 for i in xrange(pagecount): pages.append(self.MakePage(flipnotes[i*50:i*50+50], i+1, i