api.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import datetime
  2. import json
  3. import tornado.web
  4. from config import web as config
  5. import db.queries
  6. class APIBaseHandler(tornado.web.RequestHandler):
  7. def set_default_headers(self):
  8. self.set_header('Access-Control-Allow-Origin', '*')
  9. self.set_header('Access-Control-Allow-Headers', 'X-Requested-With, X-Request')
  10. def compute_etag(self):
  11. return None
  12. def respond_json(self, data):
  13. self.set_header('Content-Type', 'application/json; charset=UTF-8')
  14. for chunk in json.JSONEncoder(indent='\t').iterencode(data):
  15. self.write(chunk)
  16. self.finish()
  17. def options(self, *args):
  18. return
  19. class SearchHandler(APIBaseHandler):
  20. def get(self):
  21. q = self.get_argument('q')
  22. data = db.queries.search(q)
  23. self.respond_json(data)
  24. class KillListHandler(APIBaseHandler):
  25. def get(self, entity_type, entity_id):
  26. try:
  27. entity_id = int(entity_id)
  28. except ValueError:
  29. raise tornado.web.HTTPError(404)
  30. kills = db.queries.kill_list(entity_type, entity_id)
  31. if kills is None:
  32. raise tornado.web.HTTPError(404)
  33. self.respond_json(kills)
  34. class KillHandler(APIBaseHandler):
  35. def get(self, kill_id):
  36. kill = db.queries.kill(kill_id)
  37. if kill is None:
  38. raise tornado.web.HTTPError(404)
  39. self.respond_json(kill)
  40. class TopCostHandler(APIBaseHandler):
  41. def get(self):
  42. kills = db.queries.top_cost()
  43. self.respond_json(kills)
  44. def start():
  45. tornado.web.Application(
  46. handlers=[
  47. (r'/search', SearchHandler),
  48. (r'/(alliance|corporation|character)/(.+)', KillListHandler),
  49. (r'/kill/(.+)', KillHandler),
  50. (r'/top/cost', TopCostHandler),
  51. ],
  52. debug=config.debug,
  53. ).listen(config.api_port)
  54. print('listening on :%d' % config.api_port)