XMWAI 0.3.22__tar.gz → 0.3.24__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of XMWAI might be problematic. Click here for more details.
- {xmwai-0.3.22/XMWAI.egg-info → xmwai-0.3.24}/PKG-INFO +1 -1
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/__init__.py +2 -2
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/core.py +86 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/web_core.py +60 -112
- xmwai-0.3.24/XMWAI/xmw_photo/__init__.py +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24/XMWAI.egg-info}/PKG-INFO +1 -1
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI.egg-info/SOURCES.txt +1 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/setup.py +1 -1
- {xmwai-0.3.22 → xmwai-0.3.24}/LICENSE.txt +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/MANIFEST.in +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/README.md +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/bomb_core.py +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/file/__init__.py +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/file/idiom.json +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/0.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/1.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/10.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/11.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/12.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/13.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/14.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/15.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/16.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/17.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/18.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/19.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/2.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/20.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/21.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/22.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/23.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/24.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/25.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/26.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/27.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/28.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/29.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/3.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/30.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/31.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/32.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/33.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/34.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/35.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/36.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/37.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/38.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/39.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/4.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/40.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/41.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/42.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/43.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/44.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/45.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/46.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/47.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/48.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/49.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/5.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/50.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/51.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/52.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/53.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/54.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/55.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/56.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/57.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/58.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/59.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/6.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/60.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/61.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/62.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/63.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/64.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/65.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/66.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/67.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/68.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/69.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/7.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/70.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/71.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/72.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/73.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/74.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/75.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/76.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/77.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/78.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/79.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/8.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/80.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/81.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/82.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/83.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/84.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/85.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/9.gif +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/gif/__init__.py +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/idiom_core.py +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/magic_core.py +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/burger.js +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/BottomBun.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/TopBun.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/beef.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/bg.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/cheese.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/lettuce.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/sauce.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/static/images/tomato.png +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/templates/burger.html +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/templates/nutrition_pie.html +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/templates//345/210/233/346/204/217/350/217/234/350/260/261.html" +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/trial_class.py +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/xmw_photo/bg.jpeg +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI.egg-info/dependency_links.txt +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI.egg-info/requires.txt +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/XMWAI.egg-info/top_level.txt +0 -0
- {xmwai-0.3.22 → xmwai-0.3.24}/setup.cfg +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from .core import story, photo, reply, poem, crack # 从子模块导入函数到顶层
|
|
1
|
+
from .core import story, photo, reply, poem, crack, show # 从子模块导入函数到顶层
|
|
2
2
|
from .magic_core import birthday # 从子模块导入函数到顶层
|
|
3
3
|
from .bomb_core import bomb # 从子模块导入函数到顶层
|
|
4
4
|
from .idiom_core import idiom, searchIdiom, get_json_path # 从子模块导入函数到顶层
|
|
@@ -6,6 +6,6 @@ from .trial_class import make, get_file_content_as_base64, save_pic, detect_wind
|
|
|
6
6
|
from .web_core import burger, cookbook # 从子模块导入函数到顶层
|
|
7
7
|
|
|
8
8
|
__all__ = ["story", "photo", "reply", "poem", 'birthday', 'bomb',
|
|
9
|
-
"idiom", "searchIdiom", "get_json_path", "crack",
|
|
9
|
+
"idiom", "searchIdiom", "get_json_path", "crack", "show",
|
|
10
10
|
"make", "get_file_content_as_base64", "save_pic", "detect_windows_scale",
|
|
11
11
|
"get_file_content_as_base64_2", "cartoon", "burger", "cookbook"] # 可选:明确导出的内容
|
|
@@ -2,6 +2,7 @@ import re
|
|
|
2
2
|
import requests
|
|
3
3
|
import json
|
|
4
4
|
import os
|
|
5
|
+
import turtle
|
|
5
6
|
import zipfile
|
|
6
7
|
|
|
7
8
|
|
|
@@ -216,3 +217,88 @@ def crack(name, pwd):
|
|
|
216
217
|
except:
|
|
217
218
|
print("密码错误")
|
|
218
219
|
# ------------------------------------------------
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
# U3-06 码怪图鉴----------------------------------
|
|
223
|
+
# 全局变量,用于保存 turtle 对象
|
|
224
|
+
t = None
|
|
225
|
+
t1 = None
|
|
226
|
+
sc = None
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def init_screen():
|
|
230
|
+
global sc, t, t1
|
|
231
|
+
try:
|
|
232
|
+
# 初始化屏幕
|
|
233
|
+
sc = turtle.Screen()
|
|
234
|
+
sc.setup(618, 795)
|
|
235
|
+
turtle.tracer(0)
|
|
236
|
+
turtle.colormode(255)
|
|
237
|
+
# 初始化 turtle 对象
|
|
238
|
+
t = turtle.Turtle()
|
|
239
|
+
t.penup()
|
|
240
|
+
t1 = turtle.Turtle()
|
|
241
|
+
t1.color("white")
|
|
242
|
+
t1.penup()
|
|
243
|
+
t1.hideturtle()
|
|
244
|
+
except Exception as e:
|
|
245
|
+
print(f"初始化屏幕失败: {e}")
|
|
246
|
+
raise
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def show(name, zd):
|
|
250
|
+
global sc, t, t1
|
|
251
|
+
try:
|
|
252
|
+
if sc is None:
|
|
253
|
+
init_screen()
|
|
254
|
+
# 隐藏之前的元素
|
|
255
|
+
t.hideturtle()
|
|
256
|
+
t1.clear()
|
|
257
|
+
# 设置新的图片和文字
|
|
258
|
+
pic = name + ".gif"
|
|
259
|
+
sc.bgpic("背景.png")
|
|
260
|
+
turtle.addshape(pic)
|
|
261
|
+
t.goto(0, 100)
|
|
262
|
+
t.shape(pic)
|
|
263
|
+
t.showturtle()
|
|
264
|
+
t1.goto(0, -260)
|
|
265
|
+
t1.write(name, font=("STCaiyun", 30, "bold"), align="center")
|
|
266
|
+
t1.goto(0, -320)
|
|
267
|
+
t1.write("战力:" + str(zd), font=("STCaiyun", 30), align="center")
|
|
268
|
+
sc.update()
|
|
269
|
+
except turtle.Terminator:
|
|
270
|
+
print("Turtle 环境已关闭,尝试重新初始化...")
|
|
271
|
+
# 重置全局变量并重新初始化
|
|
272
|
+
reset_environment()
|
|
273
|
+
show(name, zd)
|
|
274
|
+
except FileNotFoundError:
|
|
275
|
+
print(f"找不到图片文件: {pic}")
|
|
276
|
+
except Exception as e:
|
|
277
|
+
print(f"展示码怪失败: {e}")
|
|
278
|
+
except:
|
|
279
|
+
print("图片加载失败")
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def reset_environment():
|
|
283
|
+
"""重置 turtle 环境"""
|
|
284
|
+
global sc, t, t1
|
|
285
|
+
try:
|
|
286
|
+
if sc:
|
|
287
|
+
sc.bye()
|
|
288
|
+
except:
|
|
289
|
+
pass
|
|
290
|
+
sc = None
|
|
291
|
+
t = None
|
|
292
|
+
t1 = None
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def close_environment():
|
|
296
|
+
"""安全关闭 turtle 环境"""
|
|
297
|
+
global sc
|
|
298
|
+
try:
|
|
299
|
+
if sc:
|
|
300
|
+
sc.bye()
|
|
301
|
+
sc = None
|
|
302
|
+
except Exception as e:
|
|
303
|
+
print(f"关闭环境失败: {e}")
|
|
304
|
+
# ------------------------------------------------
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import json
|
|
3
3
|
import requests
|
|
4
|
+
from flask import Flask, render_template
|
|
4
5
|
import re
|
|
6
|
+
from pyecharts import options as opts
|
|
7
|
+
from pyecharts.charts import Pie
|
|
5
8
|
import webbrowser
|
|
6
9
|
import threading
|
|
7
10
|
import time
|
|
8
|
-
import random
|
|
9
11
|
from importlib.resources import files
|
|
10
12
|
from pathlib import Path
|
|
11
|
-
from PIL import Image, ImageDraw
|
|
12
|
-
from pyecharts import options as opts
|
|
13
|
-
from pyecharts.charts import Pie
|
|
14
|
-
from flask import Flask, render_template
|
|
15
13
|
|
|
16
14
|
|
|
17
15
|
'''Super堡'''
|
|
@@ -90,8 +88,8 @@ emoji_dict = {
|
|
|
90
88
|
|
|
91
89
|
# 动作对应 emoji
|
|
92
90
|
action_dict = {
|
|
93
|
-
"炒": "🍳", "煮": "🍲", "烤": "🔥", "蒸": "♨️", "炸": "🍟",
|
|
94
|
-
"
|
|
91
|
+
"炒": "🍳", "煮": "🍲", "烤": "🔥", "蒸": "♨️", "炸": "🍟", "拌": "🥣",
|
|
92
|
+
"切": "🔪", "腌": "🫙", "炖": "🥘"
|
|
95
93
|
}
|
|
96
94
|
|
|
97
95
|
|
|
@@ -110,6 +108,7 @@ def format_section_steps(text):
|
|
|
110
108
|
|
|
111
109
|
|
|
112
110
|
def parse_nutrition_section(text):
|
|
111
|
+
"""解析 API 返回的营养 JSON 并提取数值"""
|
|
113
112
|
default_data = {"蛋白质": 30, "脂肪": 20, "碳水化合物": 50, "维生素": 10, "矿物质": 5}
|
|
114
113
|
|
|
115
114
|
def extract_number(val):
|
|
@@ -154,34 +153,11 @@ def generate_pie_chart(data_dict, filename: Path):
|
|
|
154
153
|
return filename
|
|
155
154
|
|
|
156
155
|
|
|
157
|
-
def random_gradient_bg(bg_path: Path):
|
|
158
|
-
"""生成一张随机渐变背景图"""
|
|
159
|
-
width, height = 1200, 800
|
|
160
|
-
|
|
161
|
-
# 随机挑两个颜色 (RGB)
|
|
162
|
-
start_color = (random.randint(100, 255), random.randint(
|
|
163
|
-
100, 255), random.randint(100, 255))
|
|
164
|
-
end_color = (random.randint(100, 255), random.randint(
|
|
165
|
-
100, 255), random.randint(100, 255))
|
|
166
|
-
|
|
167
|
-
img = Image.new("RGB", (width, height), start_color)
|
|
168
|
-
draw = ImageDraw.Draw(img)
|
|
169
|
-
|
|
170
|
-
for y in range(height):
|
|
171
|
-
r = int(start_color[0] + (end_color[0] - start_color[0]) * y / height)
|
|
172
|
-
g = int(start_color[1] + (end_color[1] - start_color[1]) * y / height)
|
|
173
|
-
b = int(start_color[2] + (end_color[2] - start_color[2]) * y / height)
|
|
174
|
-
draw.line([(0, y), (width, y)], fill=(r, g, b))
|
|
175
|
-
|
|
176
|
-
img.save(bg_path, "JPEG")
|
|
177
|
-
print(f"🎨 生成随机渐变背景:{bg_path}")
|
|
178
|
-
|
|
179
|
-
|
|
180
156
|
def cookbook(m, t, s, key):
|
|
181
157
|
if key != "CaJQ":
|
|
182
158
|
return "密钥错误,无法生成食谱。"
|
|
183
159
|
|
|
184
|
-
# 调用 API
|
|
160
|
+
# 调用 API 生成创意菜谱
|
|
185
161
|
messagesList = [
|
|
186
162
|
{"role": "system", "content": "天马行空的创意菜厨师"},
|
|
187
163
|
{"role": "user", "content": f"请以{m}为主菜,{s}为配菜,{t}为烹饪方式写一个创意食谱,"
|
|
@@ -193,8 +169,11 @@ def cookbook(m, t, s, key):
|
|
|
193
169
|
url = "https://qianfan.baidubce.com/v2/chat/completions"
|
|
194
170
|
payload = json.dumps({"model": "ernie-4.5-turbo-32k",
|
|
195
171
|
"messages": messagesList}, ensure_ascii=False)
|
|
196
|
-
headers = {
|
|
197
|
-
|
|
172
|
+
headers = {
|
|
173
|
+
"Content-Type": "application/json",
|
|
174
|
+
"appid": "",
|
|
175
|
+
"Authorization": "Bearer bce-v3/ALTAK-cGbxpVA5AbSz6h8nbLaFh/b539762075d55c76d93dc78bcf0a91beeaf0490a"
|
|
176
|
+
}
|
|
198
177
|
|
|
199
178
|
try:
|
|
200
179
|
response = requests.post(url, headers=headers,
|
|
@@ -206,37 +185,33 @@ def cookbook(m, t, s, key):
|
|
|
206
185
|
|
|
207
186
|
# 分割内容
|
|
208
187
|
sections = re.split(r"(创意灵感|食材清单|制作步骤|食材搭配的营养价值)", content)
|
|
209
|
-
body_sections = [""]
|
|
188
|
+
body_sections = [""]*4
|
|
210
189
|
title_map = {"创意灵感": 0, "食材清单": 1, "制作步骤": 2, "食材搭配的营养价值": 3}
|
|
211
190
|
i = 1
|
|
212
191
|
while i < len(sections):
|
|
213
192
|
header = sections[i]
|
|
214
|
-
text_sec = sections[i
|
|
193
|
+
text_sec = sections[i+1] if i+1 < len(sections) else ""
|
|
215
194
|
idx = title_map.get(header.strip(), None)
|
|
216
195
|
if idx is not None:
|
|
217
196
|
body_sections[idx] = text_sec.strip()
|
|
218
197
|
i += 2
|
|
219
198
|
|
|
220
|
-
#
|
|
199
|
+
# 获取包内模板和图片目录
|
|
221
200
|
templates_dir = Path(files("XMWAI").joinpath("templates"))
|
|
222
201
|
templates_dir.mkdir(exist_ok=True)
|
|
223
202
|
photo_dir = Path(files("XMWAI").joinpath("xmw_photo"))
|
|
224
|
-
photo_dir.mkdir(exist_ok=True)
|
|
225
|
-
|
|
226
|
-
# ✅ 每次生成随机背景
|
|
227
|
-
bg_path = photo_dir / "bg.jpeg"
|
|
228
|
-
random_gradient_bg(bg_path)
|
|
229
203
|
|
|
230
|
-
#
|
|
204
|
+
# 生成饼图文件
|
|
231
205
|
pie_chart_file = templates_dir / "nutrition_pie.html"
|
|
232
206
|
nutrient_data = parse_nutrition_section(body_sections[3])
|
|
233
207
|
generate_pie_chart(nutrient_data, pie_chart_file)
|
|
234
208
|
|
|
235
209
|
# 添加 emoji
|
|
236
|
-
m_emoji
|
|
237
|
-
|
|
210
|
+
m_emoji = add_emoji_to_text(m)
|
|
211
|
+
s_emoji = add_emoji_to_text(s)
|
|
212
|
+
t_emoji = add_emoji_to_text(t)
|
|
238
213
|
|
|
239
|
-
#
|
|
214
|
+
# 步骤顺序 HTML
|
|
240
215
|
step_titles = ["食材搭配的营养价值", "创意灵感", "食材清单", "制作步骤"]
|
|
241
216
|
steps_order = [3, 0, 1, 2]
|
|
242
217
|
steps_html = ""
|
|
@@ -246,89 +221,62 @@ def cookbook(m, t, s, key):
|
|
|
246
221
|
else:
|
|
247
222
|
section_content_html = format_section_steps(body_sections[idx])
|
|
248
223
|
steps_html += f"""
|
|
249
|
-
<div class="step-card" style="animation-delay:{(i
|
|
250
|
-
<div class="step-title">Step {i
|
|
224
|
+
<div class="step-card" style="animation-delay:{(i+1)*0.2}s;">
|
|
225
|
+
<div class="step-title">Step {i+1} 📝 {step_titles[i]}</div>
|
|
251
226
|
<div class="step-content">{section_content_html}</div>
|
|
252
227
|
</div>
|
|
253
228
|
"""
|
|
254
229
|
|
|
255
|
-
#
|
|
256
|
-
|
|
257
|
-
pie_rel_path = os.path.relpath(pie_chart_file, templates_dir)
|
|
258
|
-
|
|
259
|
-
# HTML 文件
|
|
260
|
-
safe_title = re.sub(r'[\/\\:*?"<>|]', "", m + t + s)
|
|
261
|
-
html_file = templates_dir / f"{safe_title}_菜谱.html"
|
|
262
|
-
|
|
230
|
+
# HTML 页面
|
|
231
|
+
bg_path = photo_dir / "bg.jpeg"
|
|
263
232
|
html = f"""
|
|
264
233
|
<!DOCTYPE html>
|
|
265
234
|
<html lang="zh">
|
|
266
235
|
<head>
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
.banner {{
|
|
284
|
-
width:100%; height:220px;
|
|
285
|
-
background:url('{bg_rel_path}') center/cover no-repeat;
|
|
286
|
-
border-radius:15px 15px 0 0;
|
|
287
|
-
display:flex; align-items:center; justify-content:center;
|
|
288
|
-
}}
|
|
289
|
-
.banner h1 {{ color:#fff; font-size:28px; text-shadow:1px 1px 3px #666; }}
|
|
290
|
-
p {{ font-size:18px; margin:8px 0; }}
|
|
291
|
-
.step-card {{
|
|
292
|
-
background:#fff0b3; margin:10px 0; border-radius:12px;
|
|
293
|
-
overflow:hidden; opacity:0; transform:translateY(20px) scale(0.98);
|
|
294
|
-
animation:fadeInUp 0.6s forwards;
|
|
295
|
-
}}
|
|
296
|
-
.step-title {{
|
|
297
|
-
font-weight:bold; padding:10px 15px; cursor:pointer;
|
|
298
|
-
background:#ffb347; color:#fff; border-bottom:1px solid #ffd27f;
|
|
299
|
-
}}
|
|
300
|
-
.step-content {{
|
|
301
|
-
padding:10px 15px; display:block; font-size:16px;
|
|
302
|
-
opacity:0; max-height:0; overflow:hidden;
|
|
303
|
-
transition: opacity 0.4s ease, max-height 0.4s ease;
|
|
304
|
-
}}
|
|
305
|
-
.step-card.hover .step-content {{ opacity:1; max-height:800px; }}
|
|
306
|
-
iframe {{ width:100%; height:500px; border:none; margin-top:20px; }}
|
|
307
|
-
@keyframes fadeInUp {{ to {{ opacity:1; transform:translateY(0) scale(1); }} }}
|
|
308
|
-
</style>
|
|
236
|
+
<meta charset="UTF-8">
|
|
237
|
+
<title>创意菜谱</title>
|
|
238
|
+
<style>
|
|
239
|
+
html, body {{ margin:0; padding:0; width:100%; height:100%; overflow-x:hidden; }}
|
|
240
|
+
body {{ font-family:"微软雅黑",sans-serif; background:#2c2c2c url('{bg_path.resolve()}') no-repeat center center fixed; background-size:cover; color:#333; }}
|
|
241
|
+
.container {{ max-width:1200px; margin:30px auto; background:rgba(255,248,220,0.95); border-radius:15px; padding:30px; box-shadow:0 0 20px rgba(0,0,0,0.2); }}
|
|
242
|
+
.banner {{ width:100%; height:220px; background:url('{bg_path.resolve()}') center/cover no-repeat; border-radius:15px 15px 0 0; display:flex; align-items:center; justify-content:center; }}
|
|
243
|
+
.banner h1 {{ color:#fff; font-size:28px; text-shadow:1px 1px 3px #666; }}
|
|
244
|
+
p {{ font-size:18px; margin:8px 0; }}
|
|
245
|
+
.step-card {{ background:#fff0b3; margin:10px 0; border-radius:12px; overflow:hidden; opacity:0; transform:translateY(20px) scale(0.98); animation:fadeInUp 0.6s forwards; }}
|
|
246
|
+
.step-title {{ font-weight:bold; padding:10px 15px; cursor:pointer; background:#ffb347; color:#fff; border-bottom:1px solid #ffd27f; }}
|
|
247
|
+
.step-content {{ padding:10px 15px; display:block; font-size:16px; opacity:0; max-height:0; overflow:hidden; transition: opacity 0.4s ease, max-height 0.4s ease; }}
|
|
248
|
+
.step-card.hover .step-content {{ opacity:1; max-height:800px; }}
|
|
249
|
+
iframe {{ width:100%; height:500px; border:none; margin-top:20px; }}
|
|
250
|
+
@keyframes fadeInUp {{ to {{ opacity:1; transform:translateY(0) scale(1); }} }}
|
|
251
|
+
</style>
|
|
309
252
|
</head>
|
|
310
253
|
<body>
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
254
|
+
<div class="container">
|
|
255
|
+
<div class="banner"><h1>🍽 {m+t+s}</h1></div>
|
|
256
|
+
<p>🍖 <strong>主菜:</strong>{m_emoji}</p>
|
|
257
|
+
<p>🥗 <strong>配菜:</strong>{s_emoji}</p>
|
|
258
|
+
<p>👩🍳 <strong>做法:</strong>{t_emoji}</p>
|
|
259
|
+
{steps_html}
|
|
260
|
+
<iframe src="{pie_chart_file.resolve()}"></iframe>
|
|
261
|
+
</div>
|
|
262
|
+
<script>
|
|
263
|
+
const steps = document.querySelectorAll('.step-card');
|
|
264
|
+
steps.forEach(card => {{
|
|
265
|
+
card.addEventListener('mouseenter', () => {{ card.classList.add('hover'); }});
|
|
266
|
+
card.addEventListener('mouseleave', () => {{ card.classList.remove('hover'); }});
|
|
267
|
+
}});
|
|
268
|
+
</script>
|
|
326
269
|
</body>
|
|
327
270
|
</html>
|
|
328
271
|
"""
|
|
329
272
|
|
|
273
|
+
# 保存 HTML 文件到包内 templates
|
|
274
|
+
safe_title = re.sub(r'[\/\\:*?"<>|]', "", m+t+s)
|
|
275
|
+
html_file = templates_dir / f"{safe_title}_菜谱.html"
|
|
330
276
|
with open(html_file, "w", encoding="utf-8") as f:
|
|
331
277
|
f.write(html)
|
|
332
278
|
|
|
279
|
+
# 打开浏览器
|
|
333
280
|
webbrowser.open(f"file://{html_file.resolve()}")
|
|
281
|
+
|
|
334
282
|
return content
|
|
File without changes
|
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="XMWAI", # 包名(pip install XMWAI)
|
|
5
|
-
version="0.3.
|
|
5
|
+
version="0.3.24", # 每次上传记得升级版本号
|
|
6
6
|
author="pydevelopment", # 作者
|
|
7
7
|
author_email="hekai@xiaoma.cn", # 邮箱
|
|
8
8
|
description="Small code King AI related library", # 简短描述
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{xmwai-0.3.22 → xmwai-0.3.24}/XMWAI/templates//345/210/233/346/204/217/350/217/234/350/260/261.html"
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|