You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
4.2 KiB
161 lines
4.2 KiB
from flask import Flask, render_template, request, jsonify, send_from_directory, Response, stream_with_context, redirect
|
|
from flask_compress import Compress
|
|
from queue import Queue
|
|
from datetime import datetime
|
|
from pprint import pprint
|
|
import threading
|
|
import random
|
|
import string
|
|
import dataHandlerPTT as ptt
|
|
import dataHandlerPTTPush as pttPush
|
|
import generalText as gen
|
|
import json
|
|
|
|
app = Flask(__name__)
|
|
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
|
|
Compress(app)
|
|
|
|
eventQueue = Queue()
|
|
|
|
|
|
@app.route('/stream')
|
|
def stream():
|
|
return Response(stream_with_context(eventStream(eventQueue)), mimetype='text/event-stream')
|
|
|
|
|
|
def eventStream(eventQueue):
|
|
while (True):
|
|
eventNode = eventQueue.get(True)
|
|
data = json.dumps(eventNode['data'], indent=4, ensure_ascii=False)
|
|
data = data.splitlines()
|
|
data = ['data:' + i for i in data]
|
|
data = '\n'.join(data)
|
|
yield "event:{event}\n{data}\n\n".format(event=eventNode['event'], data=data)
|
|
|
|
|
|
@app.route('/data/<path:path>')
|
|
def send_data(path):
|
|
return send_from_directory('data', path)
|
|
|
|
|
|
@app.route('/generalTxt')
|
|
def generalTxt():
|
|
return render_template('generalTxt.html', title="泛用文字視覺化工具")
|
|
|
|
|
|
@app.route('/post/generalTxt/addText', methods=['POST'])
|
|
def generalText_addText():
|
|
text = request.json['text']
|
|
stopwords = request.json['stopwords']
|
|
randId = ''.join(random.choices(
|
|
string.ascii_uppercase + string.ascii_lowercase, k=15))
|
|
result = gen.processText(randId, text, stopwords)
|
|
return jsonify(Result={
|
|
'path': result
|
|
})
|
|
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return redirect('/ptt')
|
|
|
|
|
|
@app.route('/ptt_push')
|
|
def ptt_push():
|
|
return render_template('ptt_push.html', title='推文 Sententree')
|
|
|
|
|
|
@app.route('/ptt_push/init', methods=['POST'])
|
|
def pttPushInit():
|
|
author = 'a58461351'
|
|
pushes = pttPush.findAuthorPush(
|
|
author=[author], stopwords=pttPush.defaultStopWords)
|
|
result: dict = {
|
|
'author': author,
|
|
'stopwords': pttPush.defaultStopWords,
|
|
'tsv': pushes[0],
|
|
'json': pushes[1]
|
|
}
|
|
return jsonify(Result=result)
|
|
|
|
|
|
@app.route('/ptt_push/addRequest', methods=['POST'])
|
|
def pttPushAddRequest():
|
|
pushes = pttPush.findAuthorPush(author=request.json['author'].split(
|
|
' '), aid=request.json['aid'].split(' '), keyword=request.json['keyword'], stopwords=request.json['stopwords'])
|
|
result = {
|
|
'keyword': request.json['keyword'],
|
|
'tsv': pushes[0],
|
|
'json': pushes[1]
|
|
}
|
|
return jsonify(Result=result)
|
|
|
|
|
|
@app.route('/ptt')
|
|
def pttSententree():
|
|
return render_template('ptt.html', title="PTT Sententree")
|
|
|
|
|
|
@app.route('/ptt/keywordFrequency', methods=['POST'])
|
|
def findKeywordFrequency():
|
|
print(request.json)
|
|
content = request.json
|
|
result = ptt.findKeywordFrequency(content)
|
|
return jsonify(Result=result)
|
|
|
|
|
|
@app.route('/dev/updateContent')
|
|
def updateContent():
|
|
ptt.loadPostContents()
|
|
return jsonify(Result={
|
|
'done': True
|
|
})
|
|
|
|
|
|
@app.route('/addRequest', methods=['POST'])
|
|
def addRequest():
|
|
content = request.json
|
|
ready = False
|
|
info = None
|
|
|
|
files = ptt.findResult(content)
|
|
|
|
info = files
|
|
ready = True
|
|
|
|
key = ptt.calcKey(content['startDate'],
|
|
content["endDate"], content["keyword"], content["pos"])
|
|
|
|
return jsonify(Result={
|
|
'ready': ready,
|
|
'info': info,
|
|
'key': key
|
|
})
|
|
|
|
|
|
@app.route("/init", methods=['POST'])
|
|
def initPage():
|
|
startDate = datetime.today().replace(day=1).strftime('%Y-%m-%d')
|
|
endDate = datetime.today().strftime('%Y-%m-%d')
|
|
files = ptt.getDefault(startDate, endDate)
|
|
return jsonify(Result={
|
|
"startDate": startDate,
|
|
'endDate': endDate,
|
|
'keyword': '',
|
|
'info': files
|
|
})
|
|
|
|
|
|
@app.route('/resource/<path:path>')
|
|
def send_resource(path):
|
|
return send_from_directory('resource', path)
|
|
|
|
|
|
@app.route("/dcard_dev")
|
|
def dcard_dev():
|
|
return render_template('dcard.html', title='DCard Sentntree 測試版')
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run(debug=True, port=4998, host='0.0.0.0', threaded=True)
|