snwp / main.py
smf2010's picture
Update main.py
7fad643 verified
from flask import Flask, render_template, request
import requests
import json
app = Flask(__name__)
def get_folder_json(folder_id, headers):
url = f"https://storage.yoghourt.space/content/list?parent_id={folder_id}&order=2&page=1&size=100"
response = requests.get(url, headers=headers)
return response.text
def process_content(json_data):
try:
data = json.loads(json_data)
except json.JSONDecodeError:
return [], []
if "data" not in data or data["data"] is None:
return [], []
folders = []
files = []
content_list = data["data"].get("content_list")
if not content_list:
return folders, files
for item in content_list:
if "content_type" not in item or "content" not in item:
continue
content_type = item["content_type"]
content = item["content"]
if content_type == "folder":
if "id" in content and "name" in content:
folders.append({"id": content["id"], "name": content["name"]})
elif content_type == "file":
if "cid" in content and "name" in content:
files.append({"cid": content["cid"], "name": content["name"]})
return folders, files
def generate_tree(folder_id, headers, gateway, indent=0):
result = []
folder_json = get_folder_json(folder_id, headers)
folders, files = process_content(folder_json)
for folder in folders:
result.append(" " * indent + f"{folder['name']}:")
result.extend(generate_tree(folder["id"], headers, gateway, indent + 1))
for file in files:
result.append(" " * indent + f"{file['name']}:https://{gateway}/ipfs/{file['cid']}?filename={file['name']}")
return result
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
auth = request.form['auth']
root_id = request.form['root_id']
gateway = request.form['gateway']
headers = {"Authorization": auth}
try:
output_lines = generate_tree(root_id, headers, gateway)
output = '\n'.join(output_lines)
return render_template('result.html', output=output)
except Exception as e:
return f"Error: {str(e)}"
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)