Revision: 11799
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 19, 2009 04:57 by doqtu84
Initial Code
import cgi import md5 import time import datetime import math from xml.dom import minidom import urllib import sys from google.appengine.api import users 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 import urlfetch from django.utils import simplejson as json # Database Classes class TumblrCache(db.Model): cache_id = db.StringProperty(required=True) content = db.StringProperty(multiline=True) date = db.DateTimeProperty(auto_now_add=True) class Flush(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' w = self.response.out query = TumblrCache.all() for q in query: q.delete() w.write('FLUSHED!') class MainPage(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' class TagCloud(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' w = self.response.out # Thu thap cac bien can thiet tumblr_api = cgi.escape(self.request.get('url').encode('utf-8')) + '/api/read' tumblr_api = 'http://im.doquangtu.net/api/read' cache_id = md5.new(tumblr_api).hexdigest() # Neu da co cache, thi tra lai cache try: cache = TumblrCache.gql("WHERE cache_id = :1 LIMIT 1", cache_id)[0] except: cache = TumblrCache(cache_id=cache_id) content = cache.content if content == None: content = '' d = (((cache.date.toordinal()-719163)*24+cache.date.hour)*60+cache.date.minute)*60+cache.date.second d = time.time() - d if d > 24*60*60 or len(content) < 5: # Da qua 24h cache trong he thong form_fields = { "filter": "text" } loop = True start = 0 taglist = {} try: while loop == True: form_fields['start'] = int(start) * 20 form_data = urllib.urlencode(form_fields) result = urlfetch.fetch(tumblr_api + '?filter=text&start=' + str(form_fields['start'])) result = result.content #.encode('utf-8') xdom = minidom.parseString(result) try: posts = xdom.firstChild.getElementsByTagName("posts")[0].getElementsByTagName("post") for post in posts: post_id = post.getAttribute("id") tags = post.getElementsByTagName("tag") try: for tag in tags: # Duyet qua tags t = "" . join(t.nodeValue for t in tag.childNodes if t.nodeType == t.TEXT_NODE) t = t.strip() #w.write(t) if t not in taglist: taglist[t] = 1 else: taglist[t] = taglist[t] + 1 except: # Loi & khong tim thay tags nao i = 0 except: # Loi & khong tim thay posts nao i = 0 # kiem tra xem co thoat vong lap hay chua try: posts = xdom.firstChild.getElementsByTagName("posts")[0].getAttribute("total") posts = int(math.ceil(float(posts) / float(20)) - 1) if start + 1 > posts: loop = False else: start = start + 1 loop = True except: loop = False except: loop = False # Viet tags txt = json.JSONEncoder().encode( taglist ) cache.content = txt cache.date = datetime.datetime.today() cache.put() w.write(taglist) else: # Chua qua 24h cache trong he thong # Tra ve cache data content = cache.content w.write( "var myJSONObject = " + content + ";" ) application = webapp.WSGIApplication( [('/', MainPage), ('/tagcloud', TagCloud), ('/flush', Flush)], debug=True) def main(): run_wsgi_app(application) if __name__ == "__main__": main()
Initial URL
http://www.doquangtu.net
Initial Description
Tumblr taglist generator returns your Tumblog tags under JSON format. Written in Python and utilized Google App Engine.
Initial Title
Tumblr taglist generator
Initial Tags
python
Initial Language
Python