parent
a607186abc
commit
bbff48fb75
@ -0,0 +1,57 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Monster Hunter Item Search</title>
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>
|
||||
|
||||
<style>
|
||||
.flex {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#output { flex: 99 1 auto; }
|
||||
</style>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$("#search").click(update_search);
|
||||
$("#item").keypress(function(e) {
|
||||
if (e.which == 13) { update_search(); }
|
||||
});
|
||||
setup_autocomplete();
|
||||
});
|
||||
|
||||
function setup_autocomplete() {
|
||||
$.getJSON("/mhapi/item_name_list",
|
||||
function(data) {
|
||||
$("#item").autocomplete({ source: data });
|
||||
});
|
||||
}
|
||||
|
||||
function update_search() {
|
||||
var item_name = $.trim($("#item").val());
|
||||
|
||||
$.get("/mhapi/rewards",
|
||||
{ "item_name": item_name },
|
||||
function(data) {
|
||||
$("#output").text(data);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="flex">
|
||||
<label for="item">Item:</label>
|
||||
<input id="item" type="text" size="20" />
|
||||
<br />
|
||||
<button id="search">Find Quests and Monsters</button>
|
||||
<br />
|
||||
<textarea readonly="true" rows="10" cols="80" id="output"></textarea>
|
||||
</div>
|
||||
</body>
|
||||
@ -0,0 +1,6 @@
|
||||
from flup.server.fcgi import WSGIServer
|
||||
|
||||
import reward_webapp
|
||||
|
||||
if __name__ == '__main__':
|
||||
WSGIServer(reward_webapp.application).run()
|
||||
@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import logging
|
||||
|
||||
from webob import Request, Response, exc
|
||||
|
||||
import mhdb
|
||||
import mhrewards
|
||||
|
||||
# TODO: etag based on db version + manual code version
|
||||
DB_VERSION = "20150313"
|
||||
PREFIX = "/mhapi/"
|
||||
|
||||
logging.basicConfig(filename="/tmp/reward_webapp.log", level=logging.INFO)
|
||||
|
||||
class App(object):
|
||||
def __init__(self):
|
||||
self.web_path = os.path.dirname(__file__)
|
||||
self.project_path = os.path.abspath(os.path.join(self.web_path, ".."))
|
||||
|
||||
db_path = os.path.join(self.project_path, "db", "mh4u.db")
|
||||
self.db = mhdb.MHDB(db_path)
|
||||
|
||||
log_path = os.path.join(self.project_path, "web.log")
|
||||
|
||||
self.log = logging.getLogger("reward_webapp")
|
||||
self.log.info("app started")
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
req = Request(environ)
|
||||
resp = Response()
|
||||
resp.charset = "utf8"
|
||||
|
||||
if req.path in ("", "/", "/index.html"):
|
||||
resp = self.index(req, resp)
|
||||
elif req.path == PREFIX + "rewards":
|
||||
resp = self.find_item_rewards(req, resp)
|
||||
elif req.path == PREFIX + "item_name_list":
|
||||
resp = self.get_all_names(req, resp)
|
||||
else:
|
||||
resp = exc.HTTPNotFound()
|
||||
|
||||
return resp(environ, start_response)
|
||||
|
||||
def index(self, req, resp):
|
||||
resp.cache_control = "max-age=86400"
|
||||
html_path = os.path.join(self.web_path, "index.html")
|
||||
resp.content_type = "text/html"
|
||||
resp.body = open(html_path, "rb").read()
|
||||
return resp
|
||||
|
||||
def find_item_rewards(self, req, resp):
|
||||
version = "1"
|
||||
resp.cache_control = "max-age=60"
|
||||
resp.etag = DB_VERSION + version
|
||||
|
||||
self.log.info("etag = %s", resp.etag)
|
||||
if req.if_match == resp.etag:
|
||||
return HTTPNotModified()
|
||||
|
||||
resp.content_type = "text/plan"
|
||||
|
||||
item_name = req.params.get("item_name", "").strip()
|
||||
if not item_name:
|
||||
resp.body = "Please enter an item name"
|
||||
else:
|
||||
item_row = mhrewards.find_item(self.db, item_name, resp.body_file)
|
||||
if item_row is not None:
|
||||
mhrewards.print_quests_and_rewards(self.db, item_row,
|
||||
resp.body_file)
|
||||
return resp
|
||||
|
||||
def get_all_names(self, req, resp):
|
||||
version = "2"
|
||||
resp.cache_control = "max-age=60"
|
||||
resp.etag = DB_VERSION + version
|
||||
|
||||
self.log.info("get all names etag = %s", resp.etag)
|
||||
if req.if_match == resp.etag:
|
||||
return HTTPNotModified()
|
||||
|
||||
resp.content_type = "application/json"
|
||||
resp.body_file.write("[")
|
||||
items = self.db.get_item_names()
|
||||
first = True
|
||||
for item in items:
|
||||
if first:
|
||||
first = False
|
||||
else:
|
||||
resp.body_file.write(", ")
|
||||
resp.body_file.write('"')
|
||||
resp.body_file.write(item["name"])
|
||||
resp.body_file.write('"')
|
||||
resp.body_file.write("]")
|
||||
return resp
|
||||
|
||||
|
||||
application = App()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from wsgiref.simple_server import make_server
|
||||
httpd = make_server("localhost", 8080, application)
|
||||
try:
|
||||
httpd.serve_forever()
|
||||
except KeyboardInterrupt:
|
||||
print "^C"
|
||||
Loading…
Reference in new issue