jared 3 years ago
parent
commit
a424553f2f
3 changed files with 108 additions and 2 deletions
  1. 99 0
      web/main.py
  2. 6 0
      web/runserver.py
  3. 3 2
      web/static/index.html

+ 99 - 0
web/main.py

@@ -0,0 +1,99 @@
+from pydoc import HTMLDoc
+from fastapi import FastAPI
+import dataset
+import sys
+import os
+import time
+from fastapi.middleware.cors import CORSMiddleware
+from fastapi.staticfiles import StaticFiles
+from pydantic import BaseModel
+from fastapi import FastAPI, Form
+import subprocess
+import suggests
+import networkx as nx
+import pyvis
+import time
+from pyvis.network import Network
+import pickle
+import logging
+import threading
+import time
+import random
+import string
+from fastapi.responses import HTMLResponse
+from fastapi.responses import RedirectResponse
+def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
+    return ''.join(random.choice(chars) for _ in range(size))
+
+
+app = FastAPI()
+origins = ["*"] 
+app.add_middleware(
+    CORSMiddleware,
+    allow_origins=origins,
+    allow_credentials=True,
+    allow_methods=["*"],
+    allow_headers=["*"],
+)
+
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/gtrends?charset=utf8mb4')
+
+app.mount("/web", StaticFiles(directory="static"), name="static")
+
+def thread_function(kw):
+    global db
+    print(kw)
+    G = nx.Graph()
+    for k in kw:
+        s = suggests.suggests.get_suggests(k, source='google')
+
+        for sg in s['suggests']:
+            G.add_edge(k,sg,weight=1)
+            print(sg)
+            time.sleep(1)
+            s2 = suggests.suggests.get_suggests(k, source='google')
+            for elmt in s2['suggests']:
+                G.add_edge(sg,elmt,weight=1)
+
+    G.remove_nodes_from(list(nx.isolates(G)))
+    G.remove_edges_from( list(nx.selfloop_edges(G)))
+
+#    pickle.dump( G, open( "gs2.p", "wb" ) )
+
+    pyG = Network(height="750px", width="100%",bgcolor="#333333",font_color="white")
+    pyG.from_nx(G)
+    id=id_generator()
+    db['gen_graph'].insert({'filename':str(id),'kw':str(kw)})
+#    pyG.save_graph('gstest')
+#    pyG.show('static/gs/'+str(id)+'.html')
+    pyG.save_graph('static/gs/'+str(id)+'.html')
+
+@app.get("/tree_list/",response_class=HTMLResponse)
+async def tree_list():
+    global db
+    html="<html><body><h2>清單</h2></br>請一分鐘後refresh </br>"
+    html+="<table>"
+    cursor=db.query('select filename,kw from gen_graph order by id desc limit 10')
+    for c in cursor:
+        html+="<tr><td>"+c['kw']+"</td>"
+        html+="<td><a href='/web/gs/"+c['filename']+".html'>"+c['filename']+"</a></td></tr>"
+        
+    html+="</table></body></html>"
+    return html
+
+
+#response_class=RedirectResponse
+@app.post("/gen_tree/",response_class=HTMLResponse)
+async def func_expand(kw: str = Form(...),kw2: str = Form(...)):
+    kwlst=[]
+    if len(kw)>1:
+        kwlst.append(kw)    
+    if len(kw2)>1:
+        kwlst.append(kw2)    
+
+    x = threading.Thread(target=thread_function, args=(kwlst,))
+    x.start()
+#    return "ok"
+    return RedirectResponse(url="/tree_list",status_code=302)
+#    return HTMLResponse('<html><head><meta http-equiv="refresh" content="0; URL="/tree_list" /></head></html>')
+

+ 6 - 0
web/runserver.py

@@ -0,0 +1,6 @@
+import uvicorn
+import sys,os
+sys.path.append(os.getcwd())
+
+if __name__ == "__main__":
+    uvicorn.run("main:app", host="0.0.0.0", port=4321, log_level="info",reload=True, debug=True)

+ 3 - 2
web/static/index.html

@@ -1,7 +1,8 @@
 <html>
     <body>
-        <form action="/gen_from_kw" method="post">
-            KW: <input type="text" id="kw" name="kw">
+        <form action="/gen_tree" method="post">
+            KW: <input type="text" id="kw" name="kw"></br>
+            KW2: <input type="text" id="kw2" name="kw2">
             <input type="submit" value="gen">
         </form>
     </body>