-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
92 lines (80 loc) · 3.42 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from http.server import SimpleHTTPRequestHandler, HTTPServer
import json
import random
from content_based_filtering import content_based_filtering
from sqlite import close, connect, create_table, insert_user, list_all, list_users, exist_user
from user_based_filtering import user_based_fitering
serverPort = 8080
class Server(SimpleHTTPRequestHandler):
conn = connect("./db/test.db")
def do_GET(self):
if(self.path == "/list-all"):
list = list_all(self.conn)
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(json.dumps(list).encode("utf-8"))
if(self.path == "/init-db"):
create_table(self.conn)
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
if(self.path == "/create-user"):
id = 0
user = "user_" + str(id)
while(len(exist_user(self.conn, user)) > 0):
id = random.randint(0, 9999)
user = "user_" + str(id)
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(json.dumps(user).encode("utf-8"))
if(self.path == "/users"):
users = list_users(self.conn)
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(json.dumps(users).encode("utf-8"))
if(self.path == "/other"):
items = content_based_filtering([], "item")
# print(json.dumps(movies.values.tolist()))
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
self.wfile.write(json.dumps(items.values.tolist()).encode("utf-8"))
def do_OPTIONS(self):
self.send_response(200)
self.end_headers()
def do_POST(self):
data_string = self.rfile.read(int(self.headers["Content-Length"]))
data = json.loads(data_string)
if(self.path == "/content-based"):
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
items = content_based_filtering(data["items"], data["item"])
self.wfile.write(json.dumps(items.values.tolist()).encode("utf-8"))
elif(self.path == "/user-based"):
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
insert_user(self.conn, data["user"], data["item"], data["rate"])
items = user_based_fitering(self.conn, data["user"])
self.wfile.write(json.dumps(items).encode("utf-8"))
else:
self.send_response(404)
def end_headers(self):
self.send_header("Access-Control-Allow-Origin", "*")
self.send_header("Access-Control-Allow-Methods", "*")
self.send_header("Access-Control-Allow-Headers", "*")
SimpleHTTPRequestHandler.end_headers(self)
if __name__ == "__main__":
webServer = HTTPServer(("", serverPort), Server)
print("Running at port: ", serverPort)
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()
close(webServer.conn)
print("Server stopped.")