75 lines
2.5 KiB
Python
75 lines
2.5 KiB
Python
from system_module import db, gelbooru, logger
|
|
from flask import Flask, render_template, jsonify, send_from_directory, render_template_string
|
|
import json
|
|
import requests
|
|
import os
|
|
|
|
CONFIG_ROOT = json.load(open("config.json", "r", encoding="utf-8"))
|
|
CONFIG_ROOT_S = json.load(open("config_gb.json", "r", encoding="utf-8"))
|
|
CONFIG_PORT = CONFIG_ROOT["port"]
|
|
GB_ID = CONFIG_ROOT["gb"]["id"]
|
|
GB_HASH = CONFIG_ROOT["gb"]["hash"]
|
|
GB_HEADERS = CONFIG_ROOT["gb"]["headers"]
|
|
|
|
gb = gelbooru.GB(GB_ID, GB_HASH, GB_HEADERS)
|
|
log = logger.Logger()
|
|
database = db.DB()
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route("/")
|
|
def index():
|
|
return render_template("index.html")
|
|
|
|
|
|
@app.route("/analytics")
|
|
def analytics():
|
|
return render_template("analytics.html")
|
|
|
|
|
|
@app.route("/dw_api", methods=['POST'])
|
|
def dw_api():
|
|
data = request.get_json()
|
|
if not data or 'id' not in data:
|
|
return jsonify({'status': 'error', 'message': 'URL not get'}), 400
|
|
image_id = data["id"]
|
|
try:
|
|
data_get, url_file, file_name = gb.get_from_id(image_id)
|
|
if os.path.exists("dw/"+file_name):
|
|
message = f"File '{file_name}' already exists. Skipping."
|
|
log.send("warning", "all", message)
|
|
return jsonify({'status': 'skipped', 'message': message})
|
|
with requests.get(url_file, stream=True, headers=GB_HEADERS, timeout=30) as r:
|
|
r.raise_for_status()
|
|
content_type = r.headers.get('Content-Type', '')
|
|
if 'text/html' in content_type:
|
|
log.send("error", "all", "The server returned HTML instead of an image. Bot protection.")
|
|
return False
|
|
with open("dw/"+file_name, 'wb') as f:
|
|
for chunk in r.iter_content(chunk_size=8192):
|
|
f.write(chunk)
|
|
database.add_raw(data_get)
|
|
return jsonify({'status': 'success'})
|
|
except requests.exceptions.RequestException as e:
|
|
error_message = f"Network error {image_id}: {e}"
|
|
log.send("error", "all", error_message)
|
|
return jsonify({'status': 'error', 'message': error_message}), 500
|
|
except Exception as e:
|
|
error_message = f"Unknown error: {e}"
|
|
log.send("error", "all", error_message)
|
|
return jsonify({'status': 'error', 'message': error_message}), 500
|
|
|
|
|
|
@app.route("/post/<path:post_id>")
|
|
def post(post_id):
|
|
return render_template("post.html")
|
|
|
|
|
|
@app.route("/api", methods=["GET", "POST"])
|
|
def api():
|
|
|
|
return "", 204
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run(host="0.0.0.0", port=CONFIG_PORT) |