diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 842d9d32..2d89b837 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index dfb3ee32..e1cf72ef 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 5e38b25d..bc58a58e 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 9b3462db..e8bf90f3 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 9d28c3c3..422c68f1 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/assets/data/leisure/_gen.py b/assets/data/leisure/_gen.py deleted file mode 100644 index b9b3c0bd..00000000 --- a/assets/data/leisure/_gen.py +++ /dev/null @@ -1,978 +0,0 @@ -# ============================================================ -# 闲言APP — 闲情逸致月度JSON数据生成器 -# 创建时间: 2026-05-28 -# 更新时间: 2026-05-28 -# 作用: 生成12个月闲情逸致数据(含花期/海鸥/heatLevel/多卡片) -# 上次更新: 全新重写,支持每日2-4卡片、heatLevel热度、花期/海鸥季 -# ============================================================ - -import json -import os -import random -from datetime import datetime - -OUT = r"e:\project\flutter\f\xianyan\assets\data\leisure" -WD = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] - -random.seed(2026) - - -def sn(m): - return {3: "spring", 4: "spring", 5: "spring", - 6: "summer", 7: "summer", 8: "summer", - 9: "autumn", 10: "autumn", 11: "autumn", - 12: "winter", 1: "winter", 2: "winter"}[m] - - -SUN = { - 1: ("07:18", "17:30"), 2: ("07:05", "18:00"), 3: ("06:35", "18:25"), - 4: ("05:55", "18:50"), 5: ("05:22", "19:05"), 6: ("05:08", "19:20"), - 7: ("05:12", "19:28"), 8: ("05:25", "19:15"), 9: ("05:55", "18:45"), - 10: ("06:18", "18:00"), 11: ("06:40", "17:25"), 12: ("07:05", "17:15"), -} - -# ============================================================ -# 花期数据 — 参考 https://rogerzhu.github.io/yinghua-map/ -# (title, emoji, desc, loc, prov, alt, pt, pn, tags, rw, -# m_start, d_start, m_end, d_end, peak_m_s, peak_d_s, peak_m_e, peak_d_e) -# ============================================================ - -FLOWER_EVENTS = [ - ("大理冬樱 🌸", "🌸", "苍山脚下冬樱绽放,粉白花海映雪山,南国冬日最浪漫的春意", - "云南·大理·苍山", "云南", 2200, "free", None, - ["冬樱", "赏花", "大理"], ["高原紫外线强"], 12, 1, 2, 15, 1, 5, 20), - ("昆明圆通山樱花 🌸", "🌸", "圆通山樱潮涌动,粉白花海铺满山腰,春城最负盛名的花事", - "云南·昆明·圆通山", "云南", 1890, "paid", "20元/人", - ["樱花", "赏花", "昆明"], ["花期短注意时间"], 2, 20, 3, 20, 3, 5, 15), - ("福建山樱花 🌸", "🌸", "永福樱花园茶山叠翠,绯红樱花层层叠叠,最美茶园樱花", - "福建·龙岩·永福", "福建", 800, "paid", "50元/人", - ["山樱", "赏花", "福建"], ["山路蜿蜒注意安全"], 1, 25, 3, 10, 2, 10, 25), - ("贵安樱花园 🌸", "🌸", "万亩樱花园红枫湖畔,世界最大樱花基地之一,壮观至极", - "贵州·贵安·平坝", "贵州", 1200, "free", None, - ["樱花", "赏花", "贵州"], ["花期人流量大"], 2, 25, 4, 10, 3, 10, 25), - ("武汉樱花 🌸", "🌸", "武大樱花珞珈山下,百年学府与粉色花海的浪漫邂逅", - "湖北·武汉·武汉大学", "湖北", 30, "free", None, - ["樱花", "赏花", "武汉"], ["需提前预约", "花期人流量大"], 3, 10, 4, 10, 3, 15, 28), - ("无锡鼋头渚樱花 🌸", "🌸", "太湖佳绝处樱花烂漫,长春桥畔夜樱如梦似幻", - "江苏·无锡·鼋头渚", "江苏", 10, "paid", "90元/人", - ["樱花", "夜樱", "无锡"], ["花期人流量大", "夜樱需另购票"], 3, 5, 4, 15, 3, 20, 30), - ("南京鸡鸣寺樱花 🌸", "🌸", "鸡鸣寺路樱花大道,粉色花隧道穿越千年古刹", - "江苏·南京·鸡鸣寺", "江苏", 20, "free", None, - ["樱花", "赏花", "南京"], ["花期人流量大"], 3, 10, 4, 10, 3, 15, 28), - ("北京玉渊潭樱花 🌸", "🌸", "玉渊潭公园樱花节,京城最盛大的樱花盛会", - "北京·玉渊潭", "北京", 50, "paid", "10元/人", - ["樱花", "赏花", "北京"], ["花期人流量大"], 3, 20, 4, 20, 4, 1, 10), - ("青岛中山公园樱花 🌸", "🌸", "青岛樱花大道粉白如雪,红瓦绿树碧海蓝天间最温柔的一抹", - "山东·青岛·中山公园", "山东", 30, "free", None, - ["樱花", "赏花", "青岛"], [], 4, 1, 4, 25, 4, 5, 15), - ("大连龙王塘樱花 🌸", "🌸", "龙王塘水库樱花园,辽东半岛最壮观的樱花胜境", - "辽宁·大连·龙王塘", "辽宁", 50, "free", None, - ["樱花", "赏花", "大连"], ["春季风大注意保暖"], 4, 10, 5, 5, 4, 15, 25), - ("沈阳长白岛樱花 🌸", "🌸", "东北晚樱压轴登场,长白岛森林公园粉色花海", - "辽宁·沈阳·长白岛", "辽宁", 40, "free", None, - ["晚樱", "赏花", "沈阳"], ["东北春季温差大"], 4, 25, 5, 15, 5, 1, 10), - ("南京梅花山 🌸", "🌸", "中国四大梅区之首,万株梅花开满山,踏雪寻梅暗香浮动", - "江苏·南京·梅花山", "江苏", 30, "paid", "70元/人", - ["梅花", "赏花", "南京"], ["1月底2月初最佳"], 1, 10, 3, 10, 2, 5, 20), - ("武汉东湖梅花 🌸", "🌸", "东湖梅园中国四大梅园之一,三百品种暗香浮动", - "湖北·武汉·东湖", "湖北", 20, "paid", "40元/人", - ["梅花", "赏花", "武汉"], [], 1, 15, 3, 5, 2, 1, 15), - ("杭州超山梅花 🌸", "🌸", "十里梅花香雪海,唐梅宋梅千年古韵", - "浙江·杭州·超山", "浙江", 50, "paid", "50元/人", - ["梅花", "赏花", "杭州"], [], 1, 20, 3, 10, 2, 10, 25), - ("上海世纪公园梅花 🌸", "🌸", "世纪公园梅园闹市中的暗香,都市赏梅首选", - "上海·世纪公园", "上海", 5, "paid", "10元/人", - ["梅花", "赏花", "上海"], [], 1, 15, 3, 5, 2, 1, 20), - ("罗平油菜花 🌼", "🌼", "金色花海铺满喀斯特峰林,大地最壮观的黄金地毯", - "云南·罗平", "云南", 1500, "free", None, - ["油菜花", "赏花", "云南"], ["花期人流量大"], 2, 1, 3, 31, 2, 20, 3, 10), - ("婺源油菜花 🌼", "🌼", "徽派白墙黛瓦映黄花,中国最美乡村的春日名片", - "江西·婺源", "江西", 100, "paid", "210元/人(通票)", - ["油菜花", "赏花", "婺源"], ["花期住宿紧张"], 2, 20, 4, 10, 3, 10, 25), - ("汉中油菜花 🌼", "🌼", "百万亩油菜花海,秦巴山间金色画卷", - "陕西·汉中", "陕西", 500, "free", None, - ["油菜花", "赏花", "汉中"], [], 3, 1, 4, 15, 3, 15, 30), - ("兴化千垛油菜花 🌼", "🌼", "水上油菜花田,河港交错间金色花岛星罗棋布", - "江苏·泰州·兴化", "江苏", 5, "paid", "100元/人", - ["油菜花", "水上花田", "兴化"], ["乘船游览更佳"], 3, 10, 4, 20, 3, 20, 4, 5), - ("林芝桃花 🌸", "🌸", "雪域桃花映南迦巴瓦,世界屋脊上最壮美的春色", - "西藏·林芝", "西藏", 3000, "free", None, - ["桃花", "赏花", "林芝"], ["高原反应注意", "紫外线强"], 3, 15, 4, 15, 3, 25, 4, 5), - ("平谷桃花 🌸", "🌸", "万亩桃花海京城后花园,粉红海洋铺满山谷", - "北京·平谷", "北京", 100, "free", None, - ["桃花", "赏花", "北京"], ["花期人流量大"], 4, 1, 4, 25, 4, 5, 15), - ("洛阳牡丹 🌺", "🌺", "唯有牡丹真国色,花开时节动京城,千年花都绝世风华", - "河南·洛阳", "河南", 150, "paid", "50元/人", - ["牡丹", "赏花", "洛阳"], ["花期人流量极大"], 4, 5, 5, 10, 4, 15, 25), - ("菏泽牡丹 🌺", "🌺", "中国牡丹之都,万亩花田比洛阳更壮观更接地气", - "山东·菏泽", "山东", 50, "paid", "30元/人", - ["牡丹", "赏花", "菏泽"], [], 4, 10, 5, 10, 4, 15, 25), - ("百里杜鹃 🌺", "🌺", "世界最大天然花园,绵延百里花海震撼人心", - "贵州·毕节·百里杜鹃", "贵州", 1500, "paid", "130元/人", - ["杜鹃", "赏花", "贵州"], ["花期人流量大"], 3, 20, 5, 15, 4, 5, 25), - ("麻城杜鹃 🌺", "🌺", "龟峰山古杜鹃群落,人间四月天最热烈的红色", - "湖北·黄冈·麻城", "湖北", 800, "paid", "110元/人", - ["杜鹃", "赏花", "麻城"], [], 4, 10, 5, 20, 4, 20, 5, 10), - ("西湖荷花 🪷", "🪷", "接天莲叶无穷碧映日荷花别样红,曲院风荷最经典", - "浙江·杭州·西湖", "浙江", 10, "free", None, - ["荷花", "赏花", "杭州"], ["盛夏注意防暑"], 6, 15, 9, 10, 7, 10, 8, 10), - ("大明湖荷花 🪷", "🪷", "四面荷花三面柳一城山色半城湖,泉城夏日名片", - "山东·济南·大明湖", "山东", 30, "free", None, - ["荷花", "赏花", "济南"], [], 6, 20, 9, 5, 7, 15, 8, 15), - ("白洋淀荷花 🪷", "🪷", "华北明珠荷花荡,万亩荷塘碧波连天", - "河北·保定·白洋淀", "河北", 5, "paid", "180元/人", - ["荷花", "赏花", "白洋淀"], ["乘船游览"], 7, 1, 8, 31, 7, 15, 8, 5), - ("昆明蓝花楹 💜", "💜", "教场中路紫色花海,春城初夏最美街道", - "云南·昆明·教场中路", "云南", 1890, "free", None, - ["蓝花楹", "赏花", "昆明"], ["高原紫外线强"], 5, 1, 6, 10, 5, 10, 25), - ("桂林桂花 🌼", "🌼", "满城桂花香,漓江山水间最甜美的秋日气息", - "广西·桂林", "广西", 150, "free", None, - ["桂花", "赏花", "桂林"], [], 9, 1, 10, 31, 9, 20, 10, 15), - ("杭州桂花 🌼", "🌼", "满觉陇桂花雨,西湖秋日最甜蜜的浪漫", - "浙江·杭州·满觉陇", "浙江", 10, "free", None, - ["桂花", "赏花", "杭州"], [], 9, 5, 10, 20, 9, 25, 10, 10), - ("咸宁桂花 🌼", "🌼", "桂花之乡万亩桂香,中国最大桂花产区", - "湖北·咸宁", "湖北", 50, "free", None, - ["桂花", "赏花", "咸宁"], [], 9, 10, 10, 25, 9, 25, 10, 10), - ("开封菊花 🌼", "🌼", "开封菊花花会千年传承,满城尽带黄金甲", - "河南·开封", "河南", 70, "paid", "50元/人", - ["菊花", "赏花", "开封"], [], 10, 1, 11, 15, 10, 15, 11, 5), - ("桐乡菊花 🌼", "🌼", "杭白菊故乡,秋日田野金黄一片可赏可饮", - "浙江·嘉兴·桐乡", "浙江", 5, "free", None, - ["菊花", "赏花", "桐乡"], [], 10, 10, 11, 20, 10, 25, 11, 10), - ("腾冲银杏 🍂", "🍂", "固东银杏村满地金黄,火山热海边的秋日童话", - "云南·腾冲·银杏村", "云南", 1700, "free", None, - ["银杏", "赏叶", "腾冲"], ["深秋最佳"], 11, 1, 12, 10, 11, 15, 30), - ("丹东银杏 🍂", "🍂", "百年银杏大道金黄满地,边境城市最绚烂的秋色", - "辽宁·丹东·六纬路", "辽宁", 20, "free", None, - ["银杏", "赏叶", "丹东"], [], 10, 20, 11, 20, 11, 1, 10), - ("随州银杏 🍂", "🍂", "千年银杏谷万株古树,中国最美秋色之一", - "湖北·随州·千年银杏谷", "湖北", 200, "paid", "80元/人", - ["银杏", "赏叶", "随州"], [], 11, 1, 11, 30, 11, 5, 20), - ("盘锦红海滩 🌾", "🌾", "碱蓬草红色海滩与金色芦苇荡交织,世界奇观", - "辽宁·盘锦", "辽宁", 5, "paid", "110元/人", - ["红海滩", "芦苇", "盘锦"], [], 9, 10, 10, 31, 9, 25, 10, 15), - ("盐城郁金香 🌷", "🌷", "荷兰花海千万株郁金香,东方普罗旺斯", - "江苏·盐城·荷兰花海", "江苏", 5, "paid", "80元/人", - ["郁金香", "赏花", "盐城"], [], 3, 15, 5, 10, 4, 1, 20), - ("伊犁薰衣草 💜", "💜", "霍城薰衣草紫色花海,东方普罗旺斯的浪漫", - "新疆·伊犁·霍城", "新疆", 800, "free", None, - ["薰衣草", "赏花", "伊犁"], ["6月中下旬最佳"], 6, 5, 7, 15, 6, 15, 30), - ("金川梨花 🤍", "🤍", "雪域梨花映碉楼,川西春日最纯净的白色花海", - "四川·阿坝·金川", "四川", 2200, "free", None, - ["梨花", "赏花", "金川"], ["高原注意防晒"], 3, 10, 4, 15, 3, 20, 30), - ("香山红叶 🍁", "🍁", "香山红叶北京之秋,霜叶红于二月花", - "北京·香山", "北京", 550, "paid", "10元/人", - ["红叶", "赏叶", "北京"], ["10月底11月初最佳"], 10, 10, 11, 15, 10, 25, 11, 5), - ("本溪红叶 🍁", "🍁", "关门山红叶层林尽染,东北秋色最浓烈", - "辽宁·本溪·关门山", "辽宁", 600, "paid", "90元/人", - ["红叶", "赏叶", "本溪"], [], 9, 25, 10, 25, 10, 5, 15), - ("九寨沟彩林 🍁", "🍁", "九寨沟秋日彩林倒影,人间仙境秋色无双", - "四川·九寨沟", "四川", 2500, "paid", "169元/人", - ["彩林", "赏叶", "九寨沟"], ["高原注意防晒"], 10, 1, 11, 10, 10, 15, 30), - ("喀纳斯秋色 🍁", "🍁", "白桦林金黄倒映碧水,北疆秋色中国最美", - "新疆·喀纳斯", "新疆", 1300, "paid", "230元/人", - ["秋色", "赏叶", "喀纳斯"], ["9月底10月初最佳", "温差极大"], 9, 10, 10, 15, 9, 20, 10, 5), - ("门源花海 🌻", "🌻", "祁连山下金色花海,高原夏日最壮观的色彩", - "青海·门源", "青海", 2800, "free", None, - ["向日葵", "油菜花", "青海"], ["高原注意防晒", "温差大"], 7, 1, 8, 15, 7, 10, 25), -] - -# ============================================================ -# 海鸥数据 — 昆明海鸥季 11月-3月 -# ============================================================ - -SEAGULL_EVENTS = [ - ("昆明海鸥 🕊️", "🕊️", "翠湖海鸥翩翩起舞,春城冬日最灵动的风景线", - "云南·昆明·翠湖", "云南", 1890, "free", None, - ["海鸥", "观鸟", "昆明"], ["勿投喂面包", "保持距离"], 11, 1, 3, 31), - ("滇池海鸥 🕊️", "🕊️", "滇池草海海鸥漫天,五百里滇池最壮观的候鸟奇景", - "云南·昆明·滇池", "云南", 1890, "free", None, - ["海鸥", "观鸟", "滇池"], ["勿投喂面包", "风大注意保暖"], 11, 1, 3, 31), - ("大观楼海鸥 🕊️", "🕊️", "大观楼长联下海鸥翔集,历史与自然的完美交融", - "云南·昆明·大观公园", "云南", 1890, "free", None, - ["海鸥", "观鸟", "昆明"], ["勿投喂面包"], 11, 1, 3, 31), -] - - -def seagull_heat(m): - if m in (12, 1): - return 5 - if m == 2: - return 4 - if m in (11, 3): - return 3 - return 0 - - -# ============================================================ -# 自然景观/时令活动 -# ============================================================ - -NATURE_EVENTS = [ - ("哈尔滨冰雪大世界 🧊", "🧊", "冰雕灯光梦幻奇观,世界最大冰雪主题乐园", - "黑龙江·哈尔滨", "黑龙江", 150, "paid", "300元/人", - ["冰雕", "冬季", "观光"], ["注意防寒保暖", "穿防滑鞋"], 12, 20, 2, 20), - ("吉林雾凇 🌫️", "🌫️", "吉林雾凇岛银装素裹,中国四大自然奇观之一", - "吉林·吉林", "吉林", 180, "free", None, - ["雾凇", "冬季", "自然景观"], ["清晨最佳观赏"], 12, 1, 2, 28), - ("查干湖冬捕 🎣", "🎣", "千年渔猎文化冰上盛宴,祭湖醒网壮观仪式", - "吉林·松原", "吉林", 130, "paid", "100元/人", - ["冬捕", "冬季", "民俗"], ["注意冰面安全"], 12, 15, 1, 31), - ("钱塘江大潮 🌊", "🌊", "八月十八潮壮观天下无,天下第一潮气势磅礴", - "浙江·海宁", "浙江", 5, "free", None, - ["大潮", "自然景观", "海宁"], ["注意安全距离"], 9, 1, 9, 30), - ("漠河极光 🌌", "🌌", "中国最北极光观测地,极寒中追寻天际奇光", - "黑龙江·漠河", "黑龙江", 300, "free", None, - ["极光", "冬季", "自然景观"], ["极光出现概率低", "注意极寒保暖"], 11, 1, 2, 28), - ("壶口瀑布冰瀑 🧊", "🧊", "千里黄河冰封奇观,冰瀑如玉帘倒挂", - "山西·临汾", "山西", 450, "paid", "100元/人", - ["冰瀑", "冬季", "自然景观"], ["注意防寒", "远离冰瀑边缘"], 12, 1, 2, 28), - ("黄山云海 🌄", "🌄", "黄山云海翻涌如仙境,五岳归来不看山", - "安徽·黄山", "安徽", 1864, "paid", "190元/人", - ["云海", "日出", "黄山"], ["注意保暖", "提前查天气"], 1, 1, 12, 31), - ("泰山日出 🌅", "🌅", "泰山日出云海金光壮丽,五岳独尊气象万千", - "山东·泰山", "山东", 1545, "paid", "115元/人", - ["日出", "冬季", "观光"], ["注意极寒保暖", "夜爬需头灯"], 1, 1, 12, 31), - ("纳木错星空 🌌", "🌌", "天湖纳木错银河倒映,世界屋脊最纯净的星空", - "西藏·纳木错", "西藏", 4718, "paid", "120元/人", - ["星空", "自然景观", "纳木错"], ["高原反应注意", "紫外线极强"], 5, 1, 10, 31), - ("青海湖日出 🌅", "🌅", "高原圣湖日出金光万丈,蓝宝石般的湖水映朝霞", - "青海·青海湖", "青海", 3200, "paid", "90元/人", - ["日出", "自然景观", "青海湖"], ["高原注意防晒"], 6, 1, 9, 30), - ("泸沽湖 🏞️", "🏞️", "东方女儿国碧水蓝天,摩梭走婚桥上邂逅浪漫", - "云南·泸沽湖", "云南", 2690, "paid", "70元/人", - ["湖泊", "自然景观", "泸沽湖"], ["高原注意防晒"], 3, 1, 11, 30), - ("茶卡盐湖 🪞", "🪞", "天空之镜倒映天地,中国版乌尤尼盐沼", - "青海·茶卡", "青海", 3059, "paid", "60元/人", - ["盐湖", "自然景观", "茶卡"], ["高原注意防晒", "穿鲜艳衣服拍照"], 5, 1, 10, 31), - ("元阳梯田 🌾", "🌾", "哈尼梯田光影变幻,大地雕塑千年杰作", - "云南·元阳", "云南", 1700, "paid", "100元/人", - ["梯田", "自然景观", "元阳"], ["日出时分最美"], 11, 1, 4, 30), - ("故宫雪景 🏯", "🏯", "故宫落雪红墙白雪,紫禁城冬日绝美画卷", - "北京·故宫", "北京", 44, "paid", "60元/人", - ["故宫", "雪景", "北京"], ["提前预约门票", "雪天路滑"], 12, 1, 2, 28), - ("什刹海冰场 ⛸️", "⛸️", "什刹海冰场滑冰车冰上嬉戏,老北京冬日欢乐", - "北京·什刹海", "北京", 44, "paid", "30元/人", - ["滑冰", "冬季", "北京"], ["注意冰面安全"], 12, 15, 2, 15), - ("亚布力滑雪 ⛷️", "⛷️", "亚布力滑雪场粉雪飞驰,冬季运动极致体验", - "黑龙江·亚布力", "黑龙江", 1374, "paid", "300元/天", - ["滑雪", "冬季", "运动"], ["注意防寒保暖", "初学者请教练"], 11, 15, 3, 15), - ("崇礼滑雪 ⛷️", "⛷️", "冬奥赛场专业体验,京郊最佳滑雪胜地", - "河北·崇礼", "河北", 1800, "paid", "400元/天", - ["滑雪", "冬季", "运动"], ["注意防寒保暖"], 11, 15, 3, 15), - ("腾冲温泉 ♨️", "♨️", "火山地热天然温泉,冬日泡汤驱寒养生", - "云南·腾冲", "云南", 1640, "paid", "200元/人", - ["温泉", "冬季", "养生"], ["泡汤不宜超30分钟"], 11, 1, 3, 31), - ("自贡灯会 🏮", "🏮", "天下第一灯流光溢彩,非遗灯会震撼人心", - "四川·自贡", "四川", 300, "paid", "100元/人", - ["灯会", "春节", "民俗"], ["注意人多拥挤"], 1, 15, 2, 28), - ("秦淮灯会 🏮", "🏮", "桨声灯影秦淮河,元宵夜花灯如昼", - "江苏·南京", "江苏", 10, "free", None, - ["灯会", "元宵", "民俗"], ["注意人多拥挤"], 1, 20, 2, 20), - ("广州迎春花市 🌺", "🌺", "迎春花市年花年桔,岭南春节最热闹的民俗", - "广东·广州", "广东", 10, "free", None, - ["花市", "春节", "民俗"], ["除夕前最热闹"], 1, 20, 2, 5), - ("婺源晒秋 🌶️", "🌶️", "篁岭晒秋五彩缤纷,徽州人家屋顶上的调色盘", - "江西·婺源·篁岭", "江西", 500, "paid", "145元/人", - ["晒秋", "民俗", "婺源"], [], 8, 1, 12, 31), - ("鄱阳湖候鸟 🦢", "🦢", "万鸟齐飞壮观,亚洲最大候鸟越冬地", - "江西·鄱阳湖", "江西", 15, "free", None, - ["候鸟", "观鸟", "鄱阳湖"], ["带望远镜", "保持安静"], 11, 1, 3, 31), - ("巴音布鲁克日落 🌅", "🌅", "九曲十八弯九个太阳,中国最美日落之一", - "新疆·巴音布鲁克", "新疆", 2500, "paid", "65元/人", - ["日落", "自然景观", "巴音布鲁克"], ["蚊虫多注意防护"], 6, 1, 9, 30), - ("赛里木湖 💎", "💎", "大西洋最后一滴眼泪,蓝宝石般的高山湖泊", - "新疆·赛里木湖", "新疆", 2073, "paid", "70元/人", - ["湖泊", "自然景观", "赛里木湖"], ["高原注意防晒"], 5, 1, 10, 15), - ("呼伦贝尔草原 🌿", "🌿", "天下第一草原碧波万顷,策马奔腾自由如风", - "内蒙古·呼伦贝尔", "内蒙古", 650, "free", None, - ["草原", "自然景观", "呼伦贝尔"], ["夏季蚊虫多"], 6, 1, 9, 15), - ("张掖丹霞 🏜️", "🏜️", "七彩丹霞地貌奇观,大地调色板上的彩虹", - "甘肃·张掖", "甘肃", 1800, "paid", "93元/人", - ["丹霞", "自然景观", "张掖"], ["日出日落最美"], 4, 1, 10, 31), - ("周庄古镇 🏘️", "🏘️", "中国第一水乡,小桥流水人家如诗如画", - "江苏·周庄", "江苏", 5, "paid", "100元/人", - ["古镇", "观光", "周庄"], ["夜景更美"], 1, 1, 12, 31), - ("凤凰古城 🏘️", "🏘️", "沱江边吊脚楼灯火阑珊,湘西最美古城", - "湖南·凤凰", "湖南", 300, "free", None, - ["古镇", "观光", "凤凰"], ["夜景更美"], 1, 1, 12, 31), - ("围炉煮茶 🫖", "🫖", "炭火温暖茶香四溢,冬日最治愈的慢时光", - "浙江·杭州", "浙江", 10, "paid", "80元/人", - ["煮茶", "冬季", "休闲"], ["注意炭火通风"], 11, 1, 3, 15), - ("采茶体验 🍵", "🍵", "亲手采摘明前茶芽,体验茶农春日生活", - "浙江·杭州·龙井村", "浙江", 100, "paid", "150元/人", - ["采茶", "春季", "体验"], [], 3, 15, 4, 30), - ("赶海 🦀", "🦀", "退潮赶海拾贝捉蟹,海边最有趣的亲子活动", - "福建·霞浦", "福建", 5, "free", None, - ["赶海", "夏季", "亲子"], ["注意潮汐时间", "防晒"], 5, 1, 10, 31), - ("萤火虫 🪲", "🪲", "夏夜萤火虫如星河,仲夏夜最浪漫的邂逅", - "江苏·南京·灵谷寺", "江苏", 50, "free", None, - ["萤火虫", "夏季", "自然景观"], ["保持安静", "勿用闪光灯"], 6, 20, 8, 15), - ("星空露营 ⛺", "⛺", "高山草甸星空露营,银河就在头顶", - "四川·若尔盖", "四川", 3500, "free", None, - ["露营", "星空", "夏季"], ["高原注意防晒", "温差大"], 6, 1, 9, 15), - ("漂流 🚣", "🚣", "猛洞河漂流激流勇进,夏日最刺激的水上运动", - "湖南·湘西·猛洞河", "湖南", 200, "paid", "180元/人", - ["漂流", "夏季", "运动"], ["注意安全", "穿救生衣"], 5, 15, 9, 15), - ("泼水节 💦", "💦", "西双版纳泼水节,傣族新年最疯狂的狂欢", - "云南·西双版纳", "云南", 550, "free", None, - ["泼水节", "民俗", "西双版纳"], ["注意防水"], 4, 10, 4, 20), - ("赛龙舟 🐉", "🐉", "端午赛龙舟鼓声震天,千年传统水上竞渡", - "湖南·汨罗", "湖南", 30, "free", None, - ["龙舟", "端午", "民俗"], ["注意安全"], 6, 1, 6, 10), - ("中秋赏月 🌕", "🌕", "西湖三潭印月,中秋夜最诗意的赏月地", - "浙江·杭州·西湖", "浙江", 10, "free", None, - ["赏月", "中秋", "传统"], [], 9, 10, 9, 20), - ("重阳登高 ⛰️", "⛰️", "重阳登高望远,秋日登顶览山河壮丽", - "山东·泰山", "山东", 1545, "paid", "115元/人", - ["登高", "重阳", "传统"], ["注意安全"], 10, 1, 10, 20), -] - - -# ============================================================ -# 美食数据 — 按月份 (title, emoji, desc, loc, prov, alt, pt, pn, tags, heat) -# ============================================================ - -FOOD_DATA = { - 1: [ - ("冰糖葫芦 🍡", "🍡", "山楂裹冰糖晶莹剔透,北方冬日街头经典", "北京·王府井", "北京", None, "free", None, ["冰糖葫芦", "冬季", "街头小吃"], 3), - ("腊肉 🥩", "🥩", "湘西腊肉经冬熏制烟熏味浓肥而不腻", "湖南·湘西", "湖南", None, "free", None, ["腊肉", "冬季", "年味"], 4), - ("火锅 🍲", "🍲", "重庆老火锅麻辣鲜香毛肚鸭肠涮起来", "重庆·解放碑", "重庆", None, "free", None, ["火锅", "冬季", "麻辣"], 5), - ("年糕 🍚", "🍚", "宁波水磨年糕软糯弹牙炒年糕汤年糕皆宜", "浙江·宁波", "浙江", None, "free", None, ["年糕", "冬季", "传统美食"], 3), - ("柑橘 🍊", "🍊", "赣南脐橙酸甜浓郁果肉饱满汁水丰盈", "江西·赣州", "江西", None, "free", None, ["柑橘", "冬季", "水果"], 4), - ("汤圆 🥣", "🥣", "宁波猪油汤圆芝麻馅流心软糯甜蜜暖冬", "浙江·宁波", "浙江", None, "free", None, ["汤圆", "冬季", "传统美食"], 3), - ("烤红薯 🍠", "🍠", "冬日街头烤红薯焦糖香气四溢暖手暖胃", "北京·胡同", "北京", None, "free", None, ["烤红薯", "冬季", "街头小吃"], 4), - ("羊肉汤 🍵", "🍵", "单县羊肉汤浓白如奶鲜而不膻冬令滋补", "山东·菏泽·单县", "山东", None, "free", None, ["羊肉汤", "冬季", "滋补"], 5), - ("糖炒栗子 🌰", "🌰", "迁西板栗糖炒飘香软糯香甜冬日手心暖", "河北·唐山·迁西", "河北", None, "free", None, ["糖炒栗子", "冬季", "零食"], 4), - ("酸菜白肉 🥬", "🥬", "东北酸菜炖白肉血肠酸爽解腻冬日硬菜", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["酸菜白肉", "冬季", "东北菜"], 3), - ("腊八粥 🥣", "🥣", "腊八节传统美食八宝熬粥暖身祈福", "陕西·西安", "陕西", None, "free", None, ["腊八粥", "冬季", "传统美食"], 4), - ("糍粑 🍘", "🍘", "手工打糍粑蘸白糖红糖软糯弹牙年味浓", "贵州·黔东南", "贵州", None, "free", None, ["糍粑", "冬季", "传统美食"], 3), - ("热干面 🍜", "🍜", "武汉过早首选芝麻酱拌面香浓醇厚", "湖北·武汉", "湖北", None, "free", None, ["热干面", "冬季", "早餐"], 3), - ("砂锅粥 🍲", "🍲", "潮汕砂锅粥鲜香绵密虾蟹粥暖胃暖心", "广东·汕头", "广东", None, "free", None, ["砂锅粥", "冬季", "潮汕"], 3), - ("牛肉面 🍜", "🍜", "兰州牛肉面一清二白三红四绿五黄冬日暖身", "甘肃·兰州", "甘肃", None, "free", None, ["牛肉面", "冬季", "面食"], 3), - ("锅包肉 🥩", "🥩", "东北锅包肉酸甜酥脆外焦里嫩一口上头", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["锅包肉", "冬季", "东北菜"], 3), - ("涮羊肉 🍲", "🍲", "老北京铜锅涮肉手切鲜羊肉蘸麻酱冬日至味", "北京·牛街", "北京", None, "free", None, ["涮羊肉", "冬季", "北京菜"], 5), - ("姜母鸭 🦆", "🦆", "厦门姜母鸭老姜米酒炖煮驱寒暖身", "福建·厦门", "福建", None, "free", None, ["姜母鸭", "冬季", "闽南菜"], 4), - ("螺蛳粉 🍜", "🍜", "柳州螺蛳粉酸辣鲜爽冬日嗦粉酣畅淋漓", "广西·柳州", "广西", None, "free", None, ["螺蛳粉", "冬季", "广西"], 4), - ("烤全羊 🐑", "🐑", "内蒙古烤全羊外焦里嫩豪迈冬日盛宴", "内蒙古·呼和浩特", "内蒙古", None, "free", None, ["烤全羊", "冬季", "蒙古菜"], 4), - ("胡辣汤 🥣", "🥣", "河南胡辣汤浓稠辛辣配油条水煎包冬日暖身", "河南·周口", "河南", None, "free", None, ["胡辣汤", "冬季", "早餐"], 4), - ("过桥米线 🍜", "🍜", "云南过桥米线汤鲜料足冬日暖胃首选", "云南·蒙自", "云南", None, "free", None, ["过桥米线", "冬季", "云南菜"], 3), - ("冻梨 🍐", "🍐", "东北冻梨黑如墨汁解冻后吸汁如蜜冬日限定", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["冻梨", "冬季", "东北特产"], 4), - ("羊杂碎 🍵", "🍵", "宁夏羊杂碎汤浓味鲜冬日暖身暖胃", "宁夏·银川", "宁夏", None, "free", None, ["羊杂碎", "冬季", "西北菜"], 3), - ("小鸡炖蘑菇 🍄", "🍄", "东北小鸡炖榛蘑鲜香浓郁冬日硬菜", "辽宁·沈阳", "辽宁", None, "free", None, ["小鸡炖蘑菇", "冬季", "东北菜"], 3), - ("驴肉火烧 🫓", "🫓", "保定驴肉火烧外酥里嫩天上龙肉地下驴肉", "河北·保定", "河北", None, "free", None, ["驴肉火烧", "冬季", "河北"], 3), - ("麻辣烫 🌶️", "🌶️", "天水麻辣烫香辣过瘾冬日街头暖身神器", "甘肃·天水", "甘肃", None, "free", None, ["麻辣烫", "冬季", "街头小吃"], 4), - ("杀猪菜 🥬", "🥬", "东北杀猪菜血肠酸菜白肉年关传统大菜", "吉林·长春", "吉林", None, "free", None, ["杀猪菜", "冬季", "东北菜"], 3), - ("臭豆腐 🧈", "🧈", "长沙臭豆腐外焦里嫩闻着臭吃着香", "湖南·长沙·坡子街", "湖南", None, "free", None, ["臭豆腐", "冬季", "街头小吃"], 3), - ("豆汁 🥛", "🥛", "老北京豆汁配焦圈酸爽独特冬日清晨", "北京·护国寺", "北京", None, "free", None, ["豆汁", "冬季", "老北京"], 2), - ("饺子 🥟", "🥟", "北方冬至饺子猪肉白菜韭菜三鲜传统", "山东·济南", "山东", None, "free", None, ["饺子", "冬至", "传统美食"], 5), - ], - 2: [ - ("春卷 🥟", "🥟", "立春吃春卷薄皮裹鲜蔬咬一口春意盎然", "上海·城隍庙", "上海", None, "free", None, ["春卷", "立春", "传统美食"], 4), - ("元宵 🥣", "🥣", "元宵节吃元宵芝麻花生馅滚圆甜蜜", "浙江·宁波", "浙江", None, "free", None, ["元宵", "元宵节", "传统美食"], 5), - ("甘蔗 🌿", "🌿", "广西黑皮甘蔗清甜多汁冬末春初最佳", "广西·玉林", "广西", None, "free", None, ["甘蔗", "冬末", "水果"], 2), - ("年糕 🍚", "🍚", "春节年糕寓意年年高炒煮炸皆美味", "浙江·宁波", "浙江", None, "free", None, ["年糕", "春节", "传统美食"], 4), - ("腊肉 🥩", "🥩", "四川腊肉经冬熏制麻辣烟熏风味独特", "四川·成都", "四川", None, "free", None, ["腊肉", "冬末", "川味"], 3), - ("饺子 🥟", "🥟", "北方过年吃饺子猪肉白菜韭菜三鲜", "山东·济南", "山东", None, "free", None, ["饺子", "春节", "传统美食"], 5), - ("春笋初探 🎋", "🎋", "岭南早春第一笋鲜嫩脆爽油焖最佳", "广东·韶关", "广东", None, "free", None, ["春笋", "早春", "时蔬"], 3), - ("柑橘 🍊", "🍊", "春见柑橘甜蜜收官果肉细嫩化渣", "四川·蒲江", "四川", None, "free", None, ["柑橘", "冬末", "水果"], 2), - ("冰糖葫芦 🍡", "🍡", "寒冬腊月一串红艳艳北方人最深的冬日记忆", "北京·南锣鼓巷", "北京", None, "free", None, ["冰糖葫芦", "冬季", "街头小吃"], 3), - ("八宝饭 🍚", "🍚", "春节传统甜品糯米八宝甜糯软滑年味十足", "江苏·苏州", "江苏", None, "free", None, ["八宝饭", "春节", "甜品"], 4), - ("汤圆 🥣", "🥣", "元宵节汤圆黑芝麻馅流心甜蜜团团圆圆", "四川·成都", "四川", None, "free", None, ["汤圆", "元宵节", "传统美食"], 5), - ("火锅 🍲", "🍲", "成都火锅麻辣鲜香冬日聚会首选", "四川·成都", "四川", None, "free", None, ["火锅", "冬末", "麻辣"], 4), - ("枇杷 🍊", "🍊", "春日第一鲜金黄饱满酸甜多汁润肺止咳", "云南·蒙自", "云南", 1300, "free", None, ["枇杷", "早春", "水果"], 3), - ("锅盔 🫓", "🫓", "陕西锅盔外酥里软夹肉夹菜皆宜", "陕西·宝鸡", "陕西", None, "free", None, ["锅盔", "冬末", "面食"], 2), - ("烤鱼 🐟", "🐟", "万州烤鱼香辣鲜嫩冬夜围炉烤鱼暖身", "重庆·万州", "重庆", None, "free", None, ["烤鱼", "冬末", "川渝菜"], 3), - ("豆腐脑 🥣", "🥣", "北方咸豆腐脑配卤汁冬晨暖胃", "北京·护国寺", "北京", None, "free", None, ["豆腐脑", "冬末", "早餐"], 2), - ("炸酱面 🍜", "🍜", "老北京炸酱面黄酱肉丁拌面冬日扎实", "北京·前门", "北京", None, "free", None, ["炸酱面", "冬末", "北京菜"], 2), - ("红糖糍粑 🍘", "🍘", "四川红糖糍粑外酥内糯红糖流心", "四川·成都", "四川", None, "free", None, ["糍粑", "冬末", "甜品"], 3), - ("羊肉泡馍 🍲", "🍲", "西安羊肉泡馍浓汤鲜香掰馍泡汤冬日暖身", "陕西·西安", "陕西", None, "free", None, ["羊肉泡馍", "冬末", "西北菜"], 4), - ("菠萝 🍍", "🍍", "徐闻菠萝初上市春日热带鲜果酸甜可口", "广东·湛江·徐闻", "广东", None, "free", None, ["菠萝", "早春", "热带水果"], 3), - ("草莓 🍓", "🍓", "丹东99草莓个大香甜冬末春初最佳赏味", "辽宁·丹东", "辽宁", None, "free", None, ["草莓", "冬末", "水果"], 4), - ("米线 🍜", "🍜", "云南小锅米线鲜香热辣冬春之交暖胃", "云南·昆明", "云南", None, "free", None, ["米线", "冬末", "云南菜"], 2), - ("馄饨 🥟", "🥟", "上海小馄饨皮薄馅鲜冬晨一碗暖到心", "上海·城隍庙", "上海", None, "free", None, ["馄饨", "冬末", "早餐"], 2), - ("酸辣粉 🌶️", "🌶️", "重庆酸辣粉酸辣爽滑冬末开胃解馋", "重庆·磁器口", "重庆", None, "free", None, ["酸辣粉", "冬末", "重庆小吃"], 3), - ("青团 🍡", "🍡", "江南青团初上市艾草清香豆沙甜蜜", "浙江·杭州", "浙江", None, "free", None, ["青团", "早春", "传统美食"], 3), - ("糖油果子 🍩", "🍩", "成都糖油果子外酥内糯红糖裹身甜蜜暖冬", "四川·成都", "四川", None, "free", None, ["糖油果子", "冬末", "成都小吃"], 2), - ("卤煮 🍲", "🍲", "北京卤煮火烧肠肺豆腐浸浓汤冬日硬核早餐", "北京·南横街", "北京", None, "free", None, ["卤煮", "冬末", "北京小吃"], 2), - ("烤红薯 🍠", "🍠", "冬末烤红薯焦糖香浓暖手暖胃", "河南·郑州", "河南", None, "free", None, ["烤红薯", "冬末", "街头小吃"], 3), - ], - 3: [ - ("春笋 🎋", "🎋", "惊蛰春笋破土出鲜嫩脆甜腌笃鲜上品", "浙江·临安", "浙江", None, "free", None, ["春笋", "惊蛰", "时蔬"], 5), - ("青团 🍡", "🍡", "清明青团艾草香豆沙蛋黄肉松馅江南春味", "上海·杏花楼", "上海", None, "free", None, ["青团", "清明", "传统美食"], 5), - ("荠菜 🥬", "🥬", "三月三荠菜赛灵丹荠菜馄饨春卷鲜掉眉毛", "江苏·南京", "江苏", None, "free", None, ["荠菜", "春季", "时蔬"], 4), - ("香椿 🌿", "🌿", "香椿芽炒鸡蛋春日限定美味香气浓郁", "山东·沂蒙", "山东", None, "free", None, ["香椿", "春季", "时蔬"], 5), - ("菠萝 🍍", "🍍", "徐闻菠萝金黄香甜春日热带鲜果", "广东·湛江·徐闻", "广东", None, "free", None, ["菠萝", "春季", "热带水果"], 3), - ("明前茶 🍵", "🍵", "明前龙井一芽一叶嫩绿清香春日雅饮", "浙江·杭州·西湖", "浙江", None, "free", None, ["明前茶", "龙井", "春季"], 5), - ("枇杷 🍊", "🍊", "云南蒙自枇杷金黄饱满春日第一鲜果", "云南·蒙自", "云南", 1300, "free", None, ["枇杷", "春季", "水果"], 3), - ("螺蛳 🐚", "🐚", "清明螺蛳赛肥鹅紫苏爆炒鲜嫩入味", "江苏·苏州", "江苏", None, "free", None, ["螺蛳", "清明", "河鲜"], 4), - ("豌豆尖 🌱", "🌱", "春日豌豆尖鲜嫩翠绿清炒煮汤皆宜", "四川·成都", "四川", None, "free", None, ["豌豆尖", "春季", "时蔬"], 3), - ("草莓 🍓", "🍓", "春季草莓大量上市红润饱满香甜多汁", "辽宁·丹东", "辽宁", None, "free", None, ["草莓", "春季", "水果"], 4), - ("腌笃鲜 🍲", "🍲", "春笋咸肉鲜蹄煲汤江南春日第一鲜汤", "江苏·苏州", "江苏", None, "free", None, ["腌笃鲜", "春季", "江南菜"], 5), - ("春饼 🫓", "🫓", "立春吃春饼卷菜薄饼裹合菜咬春迎新", "北京·前门", "北京", None, "free", None, ["春饼", "立春", "传统美食"], 3), - ("马兰头 🥬", "🥬", "马兰头拌香干春日野菜清香爽口", "浙江·杭州", "浙江", None, "free", None, ["马兰头", "春季", "野菜"], 3), - ("河豚 🐡", "🐡", "扬中河豚鲜嫩肥美春日至味", "江苏·扬中", "江苏", None, "paid", "时价", ["河豚", "春季", "河鲜"], 4), - ("蚕豆 🫘", "🫘", "春蚕豆嫩绿清甜葱油蚕豆鲜嫩可口", "上海·崇明", "上海", None, "free", None, ["蚕豆", "春季", "时蔬"], 3), - ("碧螺春 🍵", "🍵", "洞庭碧螺春花果香春日品茗雅事", "江苏·苏州·洞庭", "江苏", None, "free", None, ["碧螺春", "春季", "茶"], 4), - ("槐花 🌸", "🌸", "槐花麦饭清香甜糯春日限定乡野美味", "陕西·渭南", "陕西", None, "free", None, ["槐花", "春季", "时蔬"], 3), - ("樱桃 🍒", "🍒", "大棚樱桃初上市红润饱满酸甜可口", "山东·烟台", "山东", None, "free", None, ["樱桃", "春季", "水果"], 3), - ("油焖笋 🎋", "🎋", "临安春笋油焖浓油赤酱鲜嫩入味", "浙江·临安", "浙江", None, "free", None, ["油焖笋", "春季", "时蔬"], 4), - ("蒜薹 🧄", "🧄", "春日蒜薹鲜嫩脆甜炒腊肉绝配", "山东·金乡", "山东", None, "free", None, ["蒜薹", "春季", "时蔬"], 3), - ("春茶 🍵", "🍵", "安吉白茶春日开采鲜爽甘醇春味入茶", "浙江·安吉", "浙江", None, "free", None, ["白茶", "春季", "茶"], 4), - ("韭菜 🥬", "🥬", "春韭鲜嫩赛过肉韭菜盒子炒蛋春日限定", "河南·驻马店", "河南", None, "free", None, ["韭菜", "春季", "时蔬"], 3), - ("蕨菜 🌿", "🌿", "春日蕨菜鲜嫩凉拌蕨菜清脆爽口", "贵州·黔南", "贵州", None, "free", None, ["蕨菜", "春季", "野菜"], 3), - ("竹筒饭 🍚", "🍚", "云南竹筒饭竹香四溢糯米腊肉春日野趣", "云南·西双版纳", "云南", None, "free", None, ["竹筒饭", "春季", "云南"], 2), - ("荠菜馄饨 🥟", "🥟", "荠菜猪肉馄饨春日鲜香暖胃", "上海·弄堂", "上海", None, "free", None, ["荠菜馄饨", "春季", "江南"], 3), - ("鲜花饼 🌸", "🌸", "云南玫瑰鲜花饼酥皮玫瑰馅花香四溢", "云南·昆明", "云南", None, "free", None, ["鲜花饼", "春季", "云南特产"], 3), - ("龙井虾仁 🦐", "🦐", "龙井茶配鲜虾仁茶香鲜嫩春日名菜", "浙江·杭州", "浙江", None, "free", None, ["龙井虾仁", "春季", "杭帮菜"], 4), - ("乌米饭 🍚", "🍚", "立夏前乌米饭乌叶染米紫黑软糯", "浙江·杭州", "浙江", None, "free", None, ["乌米饭", "春季", "传统美食"], 3), - ("榆钱 🌿", "🌿", "榆钱窝窝头清甜软糯春日乡野限定", "河北·保定", "河北", None, "free", None, ["榆钱", "春季", "野菜"], 2), - ("枸杞芽 🌿", "🌿", "宁夏枸杞芽清肝明目凉拌炒蛋皆宜", "宁夏·中宁", "宁夏", None, "free", None, ["枸杞芽", "春季", "时蔬"], 2), - ("菠萝饭 🍍", "🍍", "菠萝蒸饭果香四溢酸甜软糯热带风味", "云南·西双版纳", "云南", None, "free", None, ["菠萝饭", "春季", "云南"], 2), - ], - 4: [ - ("樱桃 🍒", "🍒", "初夏红宝石烟台大连饱满圆润", "山东·烟台", "山东", None, "free", None, ["樱桃", "春季", "水果"], 4), - ("枇杷 🍊", "🍊", "果中之皇金黄饱满酸甜多汁润肺止咳", "浙江·黄岩", "浙江", None, "free", None, ["枇杷", "春季", "水果"], 3), - ("明前茶 🍵", "🍵", "清明前后龙井茶最佳一芽一叶嫩绿清香", "浙江·杭州·西湖", "浙江", None, "free", None, ["明前茶", "春季", "茶"], 5), - ("桑葚 🫐", "🫐", "紫黑桑葚甜润多汁春日采摘乐趣", "新疆·和田", "新疆", None, "free", None, ["桑葚", "春季", "水果"], 3), - ("春笋 🎋", "🎋", "天目雷笋壳薄肉肥春笋上品赏味期极短", "浙江·安吉", "浙江", None, "free", None, ["春笋", "春季", "时蔬"], 4), - ("芒果 🥭", "🥭", "三亚贵妃芒初上市果肉细腻香甜浓郁", "海南·三亚", "海南", None, "free", None, ["芒果", "春季", "热带水果"], 3), - ("蓝莓 🫐", "🫐", "云南蓝莓初上市花青素之王酸甜可口", "云南·曲靖", "云南", None, "free", None, ["蓝莓", "春季", "水果"], 3), - ("青梅 🍏", "🍏", "青梅煮酒论英雄泡青梅酒正当时", "浙江·长兴", "浙江", None, "free", None, ["青梅", "春季", "水果"], 4), - ("香椿 🌿", "🌿", "谷雨前后香椿最嫩香椿炒蛋春日绝配", "山东·沂蒙", "山东", None, "free", None, ["香椿", "谷雨", "时蔬"], 4), - ("乌米饭 🍚", "🍚", "立夏乌米饭乌叶染米紫黑软糯清香", "浙江·杭州", "浙江", None, "free", None, ["乌米饭", "立夏", "传统美食"], 3), - ("蚕豆 🫘", "🫘", "春蚕豆嫩绿清甜葱油蚕豆鲜嫩可口", "上海·崇明", "上海", None, "free", None, ["蚕豆", "春季", "时蔬"], 3), - ("谷雨茶 🍵", "🍵", "谷雨茶二春茶鲜爽回甘性价比之王", "福建·武夷山", "福建", None, "free", None, ["谷雨茶", "春季", "茶"], 3), - ("芦笋 🌱", "🌱", "崇明岛芦笋鲜嫩翠绿白灼清炒皆宜", "上海·崇明", "上海", None, "free", None, ["芦笋", "春季", "时蔬"], 2), - ("草莓 🍓", "🍓", "春季草莓尾声红颜章姬最后一波", "辽宁·丹东", "辽宁", None, "free", None, ["草莓", "春季", "水果"], 2), - ("椰子 🥥", "🥥", "海南椰子水清甜解渴椰肉炖鸡滋补", "海南·文昌", "海南", None, "free", None, ["椰子", "春季", "热带水果"], 2), - ("白茶 🍵", "🍵", "福鼎白茶春日开采白毫银针鲜爽回甘", "福建·福鼎", "福建", None, "free", None, ["白茶", "春季", "茶"], 3), - ("豌豆黄 🍨", "🍨", "北京豌豆黄细腻甜糯春日宫廷小点", "北京·仿膳", "北京", None, "free", None, ["豌豆黄", "春季", "北京小吃"], 2), - ("莼菜 🥬", "🥬", "西湖莼菜汤滑嫩清爽春日江南名菜", "浙江·杭州·西湖", "浙江", None, "free", None, ["莼菜", "春季", "江南菜"], 3), - ("鲜花饼 🌸", "🌸", "云南玫瑰鲜花饼酥皮玫瑰馅花香四溢", "云南·昆明", "云南", None, "free", None, ["鲜花饼", "春季", "云南特产"], 3), - ("龙井虾仁 🦐", "🦐", "龙井茶配鲜虾仁茶香鲜嫩春日名菜", "浙江·杭州", "浙江", None, "free", None, ["龙井虾仁", "春季", "杭帮菜"], 3), - ("菠萝蜜 🍈", "🍈", "海南菠萝蜜果肉金黄甜蜜浓郁热带之王", "海南·万宁", "海南", None, "free", None, ["菠萝蜜", "春季", "热带水果"], 2), - ("荔枝蜜 🍯", "🍯", "从化荔枝蜜清甜芳香春日天然甜品", "广东·从化", "广东", None, "free", None, ["荔枝蜜", "春季", "蜂蜜"], 2), - ("苦笋 🎋", "🎋", "四川苦笋苦中回甘凉拌炒肉皆宜", "四川·宜宾", "四川", None, "free", None, ["苦笋", "春季", "时蔬"], 2), - ("艾草青团 🍡", "🍡", "清明青团尾声蛋黄肉松马兰头馅", "江苏·苏州", "江苏", None, "free", None, ["青团", "清明", "传统美食"], 3), - ("竹笋炖鸡 🍗", "🍗", "春笋炖土鸡鲜香浓郁春日滋补", "浙江·临安", "浙江", None, "free", None, ["竹笋炖鸡", "春季", "滋补"], 3), - ("樱桃肉 🍖", "🍖", "苏菜樱桃肉色泽红亮酸甜软糯春日名菜", "江苏·苏州", "江苏", None, "free", None, ["樱桃肉", "春季", "苏菜"], 2), - ("野菜宴 🥬", "🥬", "春日野菜大集合荠菜马兰头蒲公英", "云南·昆明", "云南", None, "free", None, ["野菜", "春季", "时蔬"], 3), - ("春卷 🥟", "🥟", "越南春卷薄皮鲜蔬清爽春日轻食", "广西·东兴", "广西", None, "free", None, ["春卷", "春季", "轻食"], 2), - ("枇杷膏 🍯", "🍯", "自制枇杷膏润肺止咳春日养生佳品", "浙江·塘栖", "浙江", None, "free", None, ["枇杷膏", "春季", "养生"], 2), - ("菠萝咕噜肉 🍖", "🍖", "菠萝季做咕噜肉酸甜酥脆春日开胃", "广东·广州", "广东", None, "free", None, ["咕噜肉", "春季", "粤菜"], 2), - ], - 5: [ - ("小龙虾 🦞", "🦞", "夏季水产之王5月后壳薄肉厚虾黄饱满", "湖北·潜江", "湖北", None, "free", None, ["小龙虾", "夏季", "水产"], 5), - ("杨梅 🫐", "🫐", "仙居杨梅东魁荸荠种酸甜多汁初夏限定", "浙江·仙居", "浙江", None, "free", None, ["杨梅", "初夏", "水果"], 5), - ("芒果 🥭", "🥭", "三亚贵妃芒初上市果肉细腻香甜浓郁", "海南·三亚", "海南", None, "free", None, ["芒果", "初夏", "热带水果"], 3), - ("蓝莓 🫐", "🫐", "云南蓝莓大量上市花青素之王酸甜可口", "云南·曲靖", "云南", None, "free", None, ["蓝莓", "初夏", "水果"], 3), - ("枇杷 🍊", "🍊", "塘栖枇杷尾声果肉细嫩汁多味甜", "浙江·杭州·塘栖", "浙江", None, "free", None, ["枇杷", "初夏", "水果"], 2), - ("桑葚 🫐", "🫐", "紫黑桑葚甜润多汁初夏采摘乐趣", "新疆·和田", "新疆", None, "free", None, ["桑葚", "初夏", "水果"], 3), - ("樱桃 🍒", "🍒", "露天樱桃大量上市果大色红甜度高", "山东·烟台", "山东", None, "free", None, ["樱桃", "初夏", "水果"], 4), - ("青梅酒 🍷", "🍷", "青梅泡酒正当时冰糖青梅酒酸甜醇香", "浙江·长兴", "浙江", None, "free", None, ["青梅酒", "初夏", "果酒"], 3), - ("荔枝 🍒", "🍒", "妃子笑初上市壳薄肉厚清甜多汁", "广东·增城", "广东", None, "free", None, ["荔枝", "初夏", "水果"], 4), - ("莲藕 🪷", "🪷", "初夏鲜藕脆嫩清甜凉拌藕片消暑开胃", "湖北·洪湖", "湖北", None, "free", None, ["莲藕", "初夏", "时蔬"], 2), - ("菠萝 🍍", "🍍", "徐闻菠萝旺季金黄香甜热带风味", "广东·湛江·徐闻", "广东", None, "free", None, ["菠萝", "初夏", "热带水果"], 3), - ("杨梅酒 🍷", "🍷", "杨梅泡酒正当时冰糖杨梅酒酸甜醇香", "浙江·仙居", "浙江", None, "free", None, ["杨梅酒", "初夏", "果酒"], 3), - ("凉皮 🍜", "🍜", "陕西凉皮筋道爽滑夏日消暑开胃", "陕西·西安", "陕西", None, "free", None, ["凉皮", "初夏", "陕西小吃"], 3), - ("冰粉 🍨", "🍨", "四川冰粉清凉甜蜜红糖花生碎夏日解暑", "四川·成都", "四川", None, "free", None, ["冰粉", "初夏", "甜品"], 4), - ("椰子鸡 🥥", "🥥", "海南椰子鸡清甜滋补初夏养生首选", "海南·文昌", "海南", None, "free", None, ["椰子鸡", "初夏", "海南菜"], 3), - ("凉面 🍜", "🍜", "鸡丝凉面麻酱凉面初夏消暑快手餐", "四川·成都", "四川", None, "free", None, ["凉面", "初夏", "面食"], 3), - ("绿豆汤 🥣", "🥣", "冰镇绿豆汤清凉解暑夏日必备", "江苏·苏州", "江苏", None, "free", None, ["绿豆汤", "初夏", "消暑"], 3), - ("酸梅汤 🥤", "🥤", "老北京酸梅汤酸甜开胃乌梅桂花熬制", "北京·信远斋", "北京", None, "free", None, ["酸梅汤", "初夏", "消暑"], 3), - ("小龙虾(蒜蓉)🦞", "🦞", "蒜蓉小龙虾鲜香浓郁初夏夜宵首选", "江苏·盱眙", "江苏", None, "free", None, ["小龙虾", "蒜蓉", "初夏"], 4), - ("西瓜 🍉", "🍉", "初夏西瓜初上市冰镇西瓜消暑解渴", "海南·三亚", "海南", None, "free", None, ["西瓜", "初夏", "水果"], 3), - ("凉糕 🍨", "🍨", "四川凉糕红糖水浇淋软糯清凉", "四川·宜宾", "四川", None, "free", None, ["凉糕", "初夏", "甜品"], 3), - ("龟苓膏 🍨", "🍨", "广西龟苓膏清热解毒初夏养生甜品", "广西·梧州", "广西", None, "free", None, ["龟苓膏", "初夏", "养生"], 2), - ("烧仙草 🍨", "🍨", "福建烧仙草清凉甜蜜初夏消暑", "福建·泉州", "福建", None, "free", None, ["烧仙草", "初夏", "甜品"], 2), - ("杨枝甘露 🥭", "🥭", "芒果西柚西米露港式甜品初夏清爽", "广东·广州", "广东", None, "free", None, ["杨枝甘露", "初夏", "港式甜品"], 3), - ("啤酒 🍺", "🍺", "青岛啤酒初夏畅饮海鲜烧烤绝配", "山东·青岛", "山东", None, "free", None, ["啤酒", "初夏", "饮品"], 3), - ("小龙虾(十三香)🦞", "🦞", "盱眙十三香小龙虾香料丰富层次分明", "江苏·盱眙", "江苏", None, "free", None, ["小龙虾", "十三香", "初夏"], 4), - ("小龙虾(油焖)🦞", "🦞", "潜江油焖大虾浓油赤酱鲜香入味", "湖北·潜江", "湖北", None, "free", None, ["小龙虾", "油焖", "初夏"], 4), - ("双皮奶 🍨", "🍨", "顺德双皮奶香滑细腻初夏甜品经典", "广东·顺德", "广东", None, "free", None, ["双皮奶", "初夏", "甜品"], 2), - ("毛豆 🫛", "🫛", "盐水毛豆配啤酒初夏夜宵绝配", "安徽·合肥", "安徽", None, "free", None, ["毛豆", "初夏", "下酒菜"], 3), - ("凉拌木耳 🍄", "🍄", "凉拌黑木耳清爽开胃初夏小菜", "四川·成都", "四川", None, "free", None, ["凉拌木耳", "初夏", "凉菜"], 2), - ("杨梅干 🫐", "🫐", "自制杨梅干酸甜开胃初夏零食", "浙江·仙居", "浙江", None, "free", None, ["杨梅干", "初夏", "零食"], 2), - ], - 6: [ - ("粽子 🫔", "🫔", "端午粽子肉粽甜粽碱水粽粽叶飘香", "浙江·嘉兴", "浙江", None, "free", None, ["粽子", "端午", "传统美食"], 5), - ("西瓜 🍉", "🍉", "夏日西瓜大量上市冰镇解暑甜蜜多汁", "宁夏·中卫", "宁夏", None, "free", None, ["西瓜", "夏季", "水果"], 5), - ("荔枝 🍒", "🍒", "桂味糯米糍大量上市果肉晶莹清甜", "广东·从化", "广东", None, "free", None, ["荔枝", "夏季", "水果"], 5), - ("杨梅 🫐", "🫐", "杨梅尾声东魁大果最后一批酸甜浓郁", "浙江·仙居", "浙江", None, "free", None, ["杨梅", "夏季", "水果"], 3), - ("小龙虾 🦞", "🦞", "六月小龙虾旺季蒜蓉十三香油焖皆宜", "湖北·潜江", "湖北", None, "free", None, ["小龙虾", "夏季", "水产"], 5), - ("芒果 🥭", "🥭", "广西百色芒果上市台农贵妃金煌轮番登场", "广西·百色", "广西", None, "free", None, ["芒果", "夏季", "热带水果"], 4), - ("黄皮 🍋", "🍋", "岭南黄皮果酸甜开胃消食解暑夏日限定", "广东·云浮", "广东", None, "free", None, ["黄皮", "夏季", "水果"], 3), - ("莲蓬 🪷", "🪷", "新鲜莲蓬清甜脆嫩剥莲子消暑养心", "浙江·建德", "浙江", None, "free", None, ["莲蓬", "夏季", "时蔬"], 3), - ("凉面 🍜", "🍜", "鸡丝凉面麻酱凉面夏日消暑必备", "四川·成都", "四川", None, "free", None, ["凉面", "夏季", "面食"], 3), - ("凉皮 🍜", "🍜", "陕西凉皮筋道爽滑配肉夹馍夏日标配", "陕西·西安", "陕西", None, "free", None, ["凉皮", "夏季", "陕西小吃"], 3), - ("冰粉 🍨", "🍨", "四川冰粉红糖醪糟冰爽甜蜜消暑神器", "四川·成都", "四川", None, "free", None, ["冰粉", "夏季", "甜品"], 5), - ("绿豆汤 🥣", "🥣", "冰镇绿豆汤百合绿豆汤清凉解暑", "江苏·苏州", "江苏", None, "free", None, ["绿豆汤", "夏季", "消暑"], 4), - ("酸梅汤 🥤", "🥤", "老北京酸梅汤乌梅桂花熬制酸甜开胃", "北京·信远斋", "北京", None, "free", None, ["酸梅汤", "夏季", "消暑"], 3), - ("啤酒 🍺", "🍺", "夏日冰啤酒配烧烤小龙虾夜宵灵魂", "山东·青岛", "山东", None, "free", None, ["啤酒", "夏季", "饮品"], 4), - ("椰子 🥥", "🥥", "海南椰子水清甜解暑椰肉炖鸡滋补", "海南·文昌", "海南", None, "free", None, ["椰子", "夏季", "热带水果"], 3), - ("火龙果 🐉", "🐉", "红心火龙果甜度高花青素丰富夏日鲜果", "广西·南宁", "广西", None, "free", None, ["火龙果", "夏季", "水果"], 3), - ("百香果 🍋", "🍋", "广西百香果酸甜浓郁泡蜂蜜水消暑", "广西·百色", "广西", None, "free", None, ["百香果", "夏季", "水果"], 3), - ("哈密瓜 🍈", "🍈", "新疆哈密瓜甜蜜多汁瓜中之王消暑佳品", "新疆·哈密", "新疆", None, "free", None, ["哈密瓜", "夏季", "水果"], 4), - ("龟苓膏 🍨", "🍨", "广西龟苓膏清热解毒炼奶浇淋夏日甜品", "广西·梧州", "广西", None, "free", None, ["龟苓膏", "夏季", "养生"], 3), - ("烧仙草 🍨", "🍨", "福建烧仙草花生红豆奶茶搭配消暑", "福建·泉州", "福建", None, "free", None, ["烧仙草", "夏季", "甜品"], 3), - ("杨枝甘露 🥭", "🥭", "芒果西柚西米露港式甜品夏日经典", "广东·广州", "广东", None, "free", None, ["杨枝甘露", "夏季", "港式甜品"], 3), - ("双皮奶 🍨", "🍨", "顺德双皮奶香滑细腻红豆芒果搭配", "广东·顺德", "广东", None, "free", None, ["双皮奶", "夏季", "甜品"], 2), - ("凉糕 🍨", "🍨", "四川凉糕红糖水浇淋软糯冰凉", "四川·宜宾", "四川", None, "free", None, ["凉糕", "夏季", "甜品"], 3), - ("毛豆 🫛", "🫛", "盐水毛豆配冰啤酒夏日夜宵标配", "安徽·合肥", "安徽", None, "free", None, ["毛豆", "夏季", "下酒菜"], 3), - ("凉拌菜 🥗", "🥗", "凉拌黄瓜木耳腐竹清爽开胃夏日小菜", "四川·成都", "四川", None, "free", None, ["凉拌菜", "夏季", "凉菜"], 2), - ("啤酒鸭 🦆", "🦆", "啤酒鸭鲜香入味夏日啤酒入菜美味", "湖南·长沙", "湖南", None, "free", None, ["啤酒鸭", "夏季", "湘菜"], 3), - ("冬瓜汤 🥣", "🥣", "冬瓜排骨汤清热消暑夏日家常汤品", "广东·广州", "广东", None, "free", None, ["冬瓜汤", "夏季", "消暑"], 2), - ("丝瓜汤 🥣", "🥣", "丝瓜蛋汤清淡鲜甜夏日快手汤", "浙江·杭州", "浙江", None, "free", None, ["丝瓜汤", "夏季", "家常菜"], 2), - ("苦瓜 🥒", "🥒", "夏日吃苦瓜清热降火凉拌炒蛋皆宜", "广东·广州", "广东", None, "free", None, ["苦瓜", "夏季", "时蔬"], 2), - ("荷叶饭 🍚", "🍚", "荷叶糯米饭荷香四溢消暑开胃", "广东·东莞", "广东", None, "free", None, ["荷叶饭", "夏季", "粤菜"], 2), - ("龙眼 🍇", "🍇", "广东龙眼清甜多汁夏日滋补佳果", "广东·高州", "广东", None, "free", None, ["龙眼", "夏季", "水果"], 3), - ], - 7: [ - ("西瓜 🍉", "🍉", "三伏天西瓜冰镇最解暑甜蜜多汁夏日之王", "宁夏·中卫", "宁夏", None, "free", None, ["西瓜", "盛夏", "水果"], 5), - ("水蜜桃 🍑", "🍑", "无锡水蜜桃汁多味甜入口即化夏日仙果", "江苏·无锡·阳山", "江苏", None, "free", None, ["水蜜桃", "盛夏", "水果"], 5), - ("葡萄 🍇", "🍇", "吐鲁番葡萄晶莹剔透甜度爆表夏日鲜果", "新疆·吐鲁番", "新疆", None, "free", None, ["葡萄", "盛夏", "水果"], 4), - ("芒果 🥭", "🥭", "攀枝花芒果凯特芒个大多汁甜蜜浓郁", "四川·攀枝花", "四川", None, "free", None, ["芒果", "盛夏", "热带水果"], 3), - ("火龙果 🐉", "🐉", "红心火龙果甜度高花青素丰富夏日鲜果", "广西·南宁", "广西", None, "free", None, ["火龙果", "盛夏", "水果"], 3), - ("百香果 🍋", "🍋", "百香果蜂蜜水酸甜浓郁维C满满消暑饮品", "广西·百色", "广西", None, "free", None, ["百香果", "盛夏", "水果"], 3), - ("冰淇淋 🍦", "🍦", "夏日冰淇淋香草巧克力抹茶轮番上阵", "上海·光明", "上海", None, "free", None, ["冰淇淋", "盛夏", "甜品"], 4), - ("刨冰 🧊", "🧊", "台式刨冰红豆炼乳花生碎夏日冰爽", "广东·广州", "广东", None, "free", None, ["刨冰", "盛夏", "甜品"], 3), - ("冷面 🍜", "🍜", "延吉冷面酸甜冰爽配辣白菜夏日解暑", "吉林·延吉", "吉林", None, "free", None, ["冷面", "盛夏", "朝鲜族"], 4), - ("凉皮 🍜", "🍜", "陕西凉皮筋道爽滑夏日消暑经典", "陕西·西安", "陕西", None, "free", None, ["凉皮", "盛夏", "陕西小吃"], 3), - ("冰粉 🍨", "🍨", "四川冰粉红糖醪糟冰爽甜蜜三伏天续命", "四川·成都", "四川", None, "free", None, ["冰粉", "盛夏", "甜品"], 5), - ("绿豆汤 🥣", "🥣", "冰镇绿豆汤薄荷绿豆汤三伏天消暑必备", "江苏·苏州", "江苏", None, "free", None, ["绿豆汤", "盛夏", "消暑"], 5), - ("酸梅汤 🥤", "🥤", "老北京酸梅汤冰镇更佳酸甜开胃消暑", "北京·信远斋", "北京", None, "free", None, ["酸梅汤", "盛夏", "消暑"], 4), - ("啤酒 🍺", "🍺", "夏日冰啤酒烧烤小龙虾夜宵三件套", "山东·青岛", "山东", None, "free", None, ["啤酒", "盛夏", "饮品"], 4), - ("椰子 🥥", "🥥", "海南椰子水天然电解质水消暑解渴", "海南·文昌", "海南", None, "free", None, ["椰子", "盛夏", "热带水果"], 3), - ("哈密瓜 🍈", "🍈", "新疆哈密瓜甜蜜多汁瓜中之王", "新疆·哈密", "新疆", None, "free", None, ["哈密瓜", "盛夏", "水果"], 4), - ("黄皮 🍋", "🍋", "岭南黄皮果酸甜消食解暑夏日限定鲜果", "广东·云浮", "广东", None, "free", None, ["黄皮", "盛夏", "水果"], 3), - ("龙眼 🍇", "🍇", "福建龙眼肉厚核小清甜滋补夏日佳果", "福建·莆田", "福建", None, "free", None, ["龙眼", "盛夏", "水果"], 3), - ("莲蓬 🪷", "🪷", "新鲜莲蓬清甜脆嫩夏日赏荷品莲", "浙江·建德", "浙江", None, "free", None, ["莲蓬", "盛夏", "时蔬"], 3), - ("龟苓膏 🍨", "🍨", "龟苓膏清热解毒炼奶浇淋消暑甜品", "广西·梧州", "广西", None, "free", None, ["龟苓膏", "盛夏", "养生"], 3), - ("烧仙草 🍨", "🍨", "烧仙草花生红豆奶茶搭配冰爽甜蜜", "福建·泉州", "福建", None, "free", None, ["烧仙草", "盛夏", "甜品"], 3), - ("杨枝甘露 🥭", "🥭", "芒果西柚西米露港式甜品消暑经典", "广东·广州", "广东", None, "free", None, ["杨枝甘露", "盛夏", "港式甜品"], 3), - ("双皮奶 🍨", "🍨", "顺德双皮奶香滑细腻冰镇更佳", "广东·顺德", "广东", None, "free", None, ["双皮奶", "盛夏", "甜品"], 2), - ("凉糕 🍨", "🍨", "四川凉糕红糖水浇淋软糯冰凉解暑", "四川·宜宾", "四川", None, "free", None, ["凉糕", "盛夏", "甜品"], 3), - ("毛豆 🫛", "🫛", "盐水毛豆配冰啤酒三伏天夜宵标配", "安徽·合肥", "安徽", None, "free", None, ["毛豆", "盛夏", "下酒菜"], 3), - ("凉拌菜 🥗", "🥗", "凉拌黄瓜木耳腐竹清爽开胃消暑小菜", "四川·成都", "四川", None, "free", None, ["凉拌菜", "盛夏", "凉菜"], 2), - ("啤酒鸭 🦆", "🦆", "啤酒鸭鲜香入味夏日啤酒入菜美味", "湖南·长沙", "湖南", None, "free", None, ["啤酒鸭", "盛夏", "湘菜"], 3), - ("冬瓜汤 🥣", "🥣", "冬瓜薏米排骨汤清热消暑三伏天必备", "广东·广州", "广东", None, "free", None, ["冬瓜汤", "盛夏", "消暑"], 3), - ("苦瓜 🥒", "🥒", "三伏天吃苦瓜清热降火凉拌炒蛋皆宜", "广东·广州", "广东", None, "free", None, ["苦瓜", "盛夏", "时蔬"], 3), - ("荷叶粥 🥣", "🥣", "荷叶粥清香消暑夏日养生粥品", "浙江·杭州", "浙江", None, "free", None, ["荷叶粥", "盛夏", "养生"], 2), - ("小龙虾 🦞", "🦞", "三伏天小龙虾冰镇啤酒绝配夜宵之王", "湖北·潜江", "湖北", None, "free", None, ["小龙虾", "盛夏", "水产"], 4), - ], - 8: [ - ("桂花糕 🌼", "🌼", "初秋桂花糕香甜软糯桂花飘香", "江苏·苏州", "江苏", None, "free", None, ["桂花糕", "初秋", "甜品"], 3), - ("月饼 🥮", "🥮", "中秋月饼广式苏式滇式五仁莲蓉蛋黄", "广东·广州", "广东", None, "free", None, ["月饼", "中秋", "传统美食"], 5), - ("葡萄 🍇", "🍇", "秋季葡萄大量上市巨峰玫瑰香甜蜜多汁", "新疆·吐鲁番", "新疆", None, "free", None, ["葡萄", "夏末", "水果"], 4), - ("水蜜桃 🍑", "🍑", "水蜜桃尾声最后一批汁多味甜", "江苏·无锡·阳山", "江苏", None, "free", None, ["水蜜桃", "夏末", "水果"], 2), - ("龙眼 🍇", "🍇", "龙眼大量上市肉厚核小清甜滋补", "福建·莆田", "福建", None, "free", None, ["龙眼", "夏末", "水果"], 3), - ("黄皮 🍋", "🍋", "黄皮果尾声酸甜消食岭南夏日限定", "广东·云浮", "广东", None, "free", None, ["黄皮", "夏末", "水果"], 2), - ("哈密瓜 🍈", "🍈", "新疆哈密瓜甜蜜多汁夏末消暑佳品", "新疆·哈密", "新疆", None, "free", None, ["哈密瓜", "夏末", "水果"], 3), - ("火龙果 🐉", "🐉", "火龙果旺季红心白心甜度爆表", "广西·南宁", "广西", None, "free", None, ["火龙果", "夏末", "水果"], 3), - ("百香果 🍋", "🍋", "百香果蜂蜜水酸甜浓郁维C满满", "广西·百色", "广西", None, "free", None, ["百香果", "夏末", "水果"], 3), - ("西瓜 🍉", "🍉", "西瓜尾声最后一批冰镇消暑", "宁夏·中卫", "宁夏", None, "free", None, ["西瓜", "夏末", "水果"], 2), - ("冰淇淋 🍦", "🍦", "夏末冰淇淋最后疯狂香草巧克力轮番", "上海·光明", "上海", None, "free", None, ["冰淇淋", "夏末", "甜品"], 2), - ("凉面 🍜", "🍜", "夏末凉面鸡丝麻酱清爽收尾", "四川·成都", "四川", None, "free", None, ["凉面", "夏末", "面食"], 2), - ("冰粉 🍨", "🍨", "夏末冰粉红糖醪糟最后消暑", "四川·成都", "四川", None, "free", None, ["冰粉", "夏末", "甜品"], 2), - ("绿豆汤 🥣", "🥣", "绿豆汤尾声清凉消暑告别夏日", "江苏·苏州", "江苏", None, "free", None, ["绿豆汤", "夏末", "消暑"], 2), - ("酸梅汤 🥤", "🥤", "酸梅汤收尾酸甜开胃告别盛夏", "北京·信远斋", "北京", None, "free", None, ["酸梅汤", "夏末", "消暑"], 2), - ("啤酒 🍺", "🍺", "夏末啤酒配烧烤告别夏日夜宵", "山东·青岛", "山东", None, "free", None, ["啤酒", "夏末", "饮品"], 2), - ("小龙虾 🦞", "🦞", "小龙虾尾声最后一批鲜香入味", "湖北·潜江", "湖北", None, "free", None, ["小龙虾", "夏末", "水产"], 2), - ("莲藕 🪷", "🪷", "秋藕开始上市粉糯清甜煲汤最佳", "湖北·洪湖", "湖北", None, "free", None, ["莲藕", "初秋", "时蔬"], 3), - ("秋葵 🌿", "🌿", "秋葵大量上市凉拌白灼营养满分", "广东·湛江", "广东", None, "free", None, ["秋葵", "初秋", "时蔬"], 2), - ("丝瓜 🥒", "🥒", "丝瓜蛋汤清淡鲜甜夏末秋初家常", "浙江·杭州", "浙江", None, "free", None, ["丝瓜", "夏末", "时蔬"], 2), - ("冬瓜 🥒", "🥒", "冬瓜排骨汤清热消暑夏末养生", "广东·广州", "广东", None, "free", None, ["冬瓜", "夏末", "时蔬"], 2), - ("桂花茶 🍵", "🍵", "初秋桂花茶香气扑鼻暖胃养生", "广西·桂林", "广西", None, "free", None, ["桂花茶", "初秋", "茶"], 3), - ("杨枝甘露 🥭", "🥭", "芒果西柚西米露夏末甜品收尾", "广东·广州", "广东", None, "free", None, ["杨枝甘露", "夏末", "港式甜品"], 2), - ("龟苓膏 🍨", "🍨", "龟苓膏清热解毒夏末养生甜品", "广西·梧州", "广西", None, "free", None, ["龟苓膏", "夏末", "养生"], 2), - ("烧仙草 🍨", "🍨", "烧仙草花生红豆奶茶搭配夏末消暑", "福建·泉州", "福建", None, "free", None, ["烧仙草", "夏末", "甜品"], 2), - ("双皮奶 🍨", "🍨", "顺德双皮奶香滑细腻冰镇收尾", "广东·顺德", "广东", None, "free", None, ["双皮奶", "夏末", "甜品"], 2), - ("凉糕 🍨", "🍨", "四川凉糕红糖水浇淋夏末最后清凉", "四川·宜宾", "四川", None, "free", None, ["凉糕", "夏末", "甜品"], 2), - ("啤酒鸭 🦆", "🦆", "啤酒鸭鲜香入味夏末啤酒入菜", "湖南·长沙", "湖南", None, "free", None, ["啤酒鸭", "夏末", "湘菜"], 2), - ("椰子鸡 🥥", "🥥", "海南椰子鸡清甜滋补夏末养生", "海南·文昌", "海南", None, "free", None, ["椰子鸡", "夏末", "海南菜"], 2), - ("芋头 🍠", "🍠", "荔浦芋头粉糯香甜蒸扣肉炖排骨皆宜", "广西·荔浦", "广西", None, "free", None, ["芋头", "初秋", "时蔬"], 3), - ("柚子 🍊", "🍊", "蜜柚初上市酸甜多汁秋日开胃水果", "福建·平和", "福建", None, "free", None, ["柚子", "初秋", "水果"], 3), - ], - 9: [ - ("大闸蟹 🦀", "🦀", "阳澄湖大闸蟹九雌十雄膏黄肥美秋日至味", "江苏·苏州·阳澄湖", "江苏", None, "paid", "时价", ["大闸蟹", "秋季", "河鲜"], 5), - ("月饼 🥮", "🥮", "中秋月饼广式苏式滇式五仁莲蓉蛋黄", "广东·广州", "广东", None, "free", None, ["月饼", "中秋", "传统美食"], 5), - ("桂花糕 🌼", "🌼", "金秋桂花糕香甜软糯桂花飘香满城", "江苏·苏州", "江苏", None, "free", None, ["桂花糕", "秋季", "甜品"], 4), - ("桂花酒 🍶", "🍶", "桂花酿米酒甜润芳香中秋赏月佳酿", "广西·桂林", "广西", None, "free", None, ["桂花酒", "秋季", "果酒"], 3), - ("柿子 🍅", "🍅", "秋季柿子红润软糯甜蜜如蜜挂枝头", "陕西·富平", "陕西", None, "free", None, ["柿子", "秋季", "水果"], 4), - ("石榴 🍎", "🍎", "突尼斯软籽石榴红如宝石酸甜多汁", "四川·会理", "四川", None, "free", None, ["石榴", "秋季", "水果"], 4), - ("板栗 🌰", "🌰", "迁西板栗糖炒飘香软糯香甜秋日手心暖", "河北·唐山·迁西", "河北", None, "free", None, ["板栗", "秋季", "零食"], 4), - ("秋梨 🍐", "🍐", "秋梨膏润肺止咳冰糖雪梨秋日养生", "河北·赵县", "河北", None, "free", None, ["秋梨", "秋季", "水果"], 3), - ("葡萄 🍇", "🍇", "秋季葡萄巨峰玫瑰香甜蜜多汁", "新疆·吐鲁番", "新疆", None, "free", None, ["葡萄", "秋季", "水果"], 3), - ("猕猴桃 🥝", "🥝", "眉县猕猴桃维C之王酸甜可口秋日鲜果", "陕西·眉县", "陕西", None, "free", None, ["猕猴桃", "秋季", "水果"], 3), - ("柚子 🍊", "🍊", "蜜柚大量上市酸甜多汁秋日开胃水果", "福建·平和", "福建", None, "free", None, ["柚子", "秋季", "水果"], 3), - ("白果 🌰", "🌰", "银杏白果炖鸡润肺止咳秋日养生", "江苏·泰兴", "江苏", None, "free", None, ["白果", "秋季", "时蔬"], 2), - ("秋葵 🌿", "🌿", "秋葵凉拌白灼营养满分秋日时蔬", "广东·湛江", "广东", None, "free", None, ["秋葵", "秋季", "时蔬"], 2), - ("莲藕 🪷", "🪷", "秋藕粉糯清甜排骨藕汤秋日暖胃", "湖北·洪湖", "湖北", None, "free", None, ["莲藕", "秋季", "时蔬"], 3), - ("银耳汤 🥣", "🥣", "银耳莲子羹润肺养颜秋日甜品", "福建·古田", "福建", None, "free", None, ["银耳汤", "秋季", "养生"], 3), - ("冰糖雪梨 🥤", "🥤", "冰糖炖雪梨润肺止咳秋日养生饮品", "河北·赵县", "河北", None, "free", None, ["冰糖雪梨", "秋季", "养生"], 3), - ("桂花茶 🍵", "🍵", "金秋桂花茶香气扑鼻暖胃养生", "广西·桂林", "广西", None, "free", None, ["桂花茶", "秋季", "茶"], 3), - ("烤红薯 🍠", "🍠", "秋日烤红薯焦糖香气四溢暖手暖胃", "北京·胡同", "北京", None, "free", None, ["烤红薯", "秋季", "街头小吃"], 3), - ("糖炒栗子 🌰", "🌰", "秋日糖炒栗子软糯香甜手心温暖", "河北·唐山·迁西", "河北", None, "free", None, ["糖炒栗子", "秋季", "零食"], 4), - ("羊肉汤 🍵", "🍵", "秋日羊肉汤浓白如奶鲜而不膻滋补暖身", "山东·菏泽·单县", "山东", None, "free", None, ["羊肉汤", "秋季", "滋补"], 4), - ("火锅 🍲", "🍲", "秋季火锅开锅麻辣鲜香暖身暖胃", "重庆·解放碑", "重庆", None, "free", None, ["火锅", "秋季", "麻辣"], 4), - ("螺蛳粉 🍜", "🍜", "柳州螺蛳粉酸辣鲜爽秋日嗦粉酣畅", "广西·柳州", "广西", None, "free", None, ["螺蛳粉", "秋季", "广西"], 3), - ("过桥米线 🍜", "🍜", "云南过桥米线汤鲜料足秋日暖胃", "云南·蒙自", "云南", None, "free", None, ["过桥米线", "秋季", "云南菜"], 2), - ("砂锅粥 🍲", "🍲", "潮汕砂锅粥鲜香绵密秋日暖胃", "广东·汕头", "广东", None, "free", None, ["砂锅粥", "秋季", "潮汕"], 2), - ("牛肉面 🍜", "🍜", "兰州牛肉面一清二白三红四绿五黄秋日暖身", "甘肃·兰州", "甘肃", None, "free", None, ["牛肉面", "秋季", "面食"], 2), - ("热干面 🍜", "🍜", "武汉热干面芝麻酱拌面香浓醇厚秋晨暖胃", "湖北·武汉", "湖北", None, "free", None, ["热干面", "秋季", "早餐"], 2), - ("豆汁 🥛", "🥛", "老北京豆汁配焦圈酸爽独特秋日清晨", "北京·护国寺", "北京", None, "free", None, ["豆汁", "秋季", "老北京"], 1), - ("胡辣汤 🥣", "🥣", "河南胡辣汤浓稠辛辣秋晨暖身", "河南·周口", "河南", None, "free", None, ["胡辣汤", "秋季", "早餐"], 3), - ("涮羊肉 🍲", "🍲", "老北京铜锅涮肉秋日暖身至味", "北京·牛街", "北京", None, "free", None, ["涮羊肉", "秋季", "北京菜"], 4), - ("姜母鸭 🦆", "🦆", "厦门姜母鸭老姜米酒炖煮秋日驱寒", "福建·厦门", "福建", None, "free", None, ["姜母鸭", "秋季", "闽南菜"], 3), - ("芋头 🍠", "🍠", "荔浦芋头粉糯香甜蒸扣肉炖排骨秋日美味", "广西·荔浦", "广西", None, "free", None, ["芋头", "秋季", "时蔬"], 2), - ], - 10: [ - ("柿子 🍅", "🍅", "深秋柿子红如灯笼软糯甜蜜挂满枝头", "陕西·富平", "陕西", None, "free", None, ["柿子", "深秋", "水果"], 4), - ("石榴 🍎", "🍎", "软籽石榴红如宝石酸甜多汁秋日佳果", "四川·会理", "四川", None, "free", None, ["石榴", "深秋", "水果"], 3), - ("板栗 🌰", "🌰", "糖炒栗子软糯香甜深秋手心温暖", "河北·唐山·迁西", "河北", None, "free", None, ["板栗", "深秋", "零食"], 4), - ("大闸蟹 🦀", "🦀", "十月雄蟹膏满肉肥秋日至味", "江苏·苏州·阳澄湖", "江苏", None, "paid", "时价", ["大闸蟹", "深秋", "河鲜"], 5), - ("秋梨 🍐", "🍐", "秋梨膏润肺止咳深秋干燥养生必备", "河北·赵县", "河北", None, "free", None, ["秋梨", "深秋", "水果"], 3), - ("柚子 🍊", "🍊", "沙田柚蜜柚酸甜多汁深秋开胃水果", "广西·容县", "广西", None, "free", None, ["柚子", "深秋", "水果"], 3), - ("猕猴桃 🥝", "🥝", "猕猴桃维C之王酸甜可口深秋鲜果", "陕西·眉县", "陕西", None, "free", None, ["猕猴桃", "深秋", "水果"], 3), - ("橙子 🍊", "🍊", "赣南脐橙初上市酸甜浓郁果肉饱满", "江西·赣州", "江西", None, "free", None, ["橙子", "深秋", "水果"], 4), - ("山楂 🍒", "🍒", "山楂红果酸甜开胃冰糖葫芦糖雪球", "河北·兴隆", "河北", None, "free", None, ["山楂", "深秋", "水果"], 3), - ("银杏果 🌰", "🌰", "银杏白果炖鸡润肺止咳深秋养生", "江苏·泰兴", "江苏", None, "free", None, ["白果", "深秋", "时蔬"], 2), - ("烤红薯 🍠", "🍠", "深秋烤红薯焦糖香气四溢暖手暖胃", "北京·胡同", "北京", None, "free", None, ["烤红薯", "深秋", "街头小吃"], 4), - ("糖炒栗子 🌰", "🌰", "深秋糖炒栗子软糯香甜手心温暖", "河北·唐山·迁西", "河北", None, "free", None, ["糖炒栗子", "深秋", "零食"], 4), - ("羊肉汤 🍵", "🍵", "深秋羊肉汤浓白如奶鲜而不膻滋补暖身", "山东·菏泽·单县", "山东", None, "free", None, ["羊肉汤", "深秋", "滋补"], 5), - ("火锅 🍲", "🍲", "深秋火锅麻辣鲜香暖身暖胃聚会首选", "重庆·解放碑", "重庆", None, "free", None, ["火锅", "深秋", "麻辣"], 4), - ("螺蛳粉 🍜", "🍜", "柳州螺蛳粉酸辣鲜爽深秋嗦粉酣畅", "广西·柳州", "广西", None, "free", None, ["螺蛳粉", "深秋", "广西"], 3), - ("过桥米线 🍜", "🍜", "云南过桥米线汤鲜料足深秋暖胃", "云南·蒙自", "云南", None, "free", None, ["过桥米线", "深秋", "云南菜"], 2), - ("砂锅粥 🍲", "🍲", "潮汕砂锅粥鲜香绵密深秋暖胃", "广东·汕头", "广东", None, "free", None, ["砂锅粥", "深秋", "潮汕"], 2), - ("牛肉面 🍜", "🍜", "兰州牛肉面一清二白三红四绿五黄深秋暖身", "甘肃·兰州", "甘肃", None, "free", None, ["牛肉面", "深秋", "面食"], 2), - ("热干面 🍜", "🍜", "武汉热干面芝麻酱拌面香浓醇厚秋晨暖胃", "湖北·武汉", "湖北", None, "free", None, ["热干面", "深秋", "早餐"], 2), - ("腊肉 🥩", "🥩", "湘西腊肉开始熏制烟熏味浓肥而不腻", "湖南·湘西", "湖南", None, "free", None, ["腊肉", "深秋", "年味"], 3), - ("臭豆腐 🧈", "🧈", "长沙臭豆腐外焦里嫩闻着臭吃着香", "湖南·长沙·坡子街", "湖南", None, "free", None, ["臭豆腐", "深秋", "街头小吃"], 2), - ("驴肉火烧 🫓", "🫓", "保定驴肉火烧外酥里嫩天上龙肉地下驴肉", "河北·保定", "河北", None, "free", None, ["驴肉火烧", "深秋", "河北"], 2), - ("锅包肉 🥩", "🥩", "东北锅包肉酸甜酥脆外焦里嫩深秋开胃", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["锅包肉", "深秋", "东北菜"], 2), - ("小鸡炖蘑菇 🍄", "🍄", "东北小鸡炖榛蘑鲜香浓郁深秋硬菜", "辽宁·沈阳", "辽宁", None, "free", None, ["小鸡炖蘑菇", "深秋", "东北菜"], 2), - ("酸菜白肉 🥬", "🥬", "东北酸菜炖白肉血肠酸爽解腻深秋硬菜", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["酸菜白肉", "深秋", "东北菜"], 2), - ("杀猪菜 🥬", "🥬", "东北杀猪菜血肠酸菜白肉年关传统大菜", "吉林·长春", "吉林", None, "free", None, ["杀猪菜", "深秋", "东北菜"], 2), - ("涮羊肉 🍲", "🍲", "老北京铜锅涮肉深秋暖身至味", "北京·牛街", "北京", None, "free", None, ["涮羊肉", "深秋", "北京菜"], 4), - ("姜母鸭 🦆", "🦆", "厦门姜母鸭老姜米酒炖煮深秋驱寒", "福建·厦门", "福建", None, "free", None, ["姜母鸭", "深秋", "闽南菜"], 3), - ("冰糖葫芦 🍡", "🍡", "山楂冰糖葫芦酸甜可口深秋街头经典", "北京·王府井", "北京", None, "free", None, ["冰糖葫芦", "深秋", "街头小吃"], 3), - ("豆汁 🥛", "🥛", "老北京豆汁配焦圈酸爽独特秋日清晨", "北京·护国寺", "北京", None, "free", None, ["豆汁", "深秋", "老北京"], 1), - ("胡辣汤 🥣", "🥣", "河南胡辣汤浓稠辛辣深秋晨暖身", "河南·周口", "河南", None, "free", None, ["胡辣汤", "深秋", "早餐"], 3), - ], - 11: [ - ("羊肉汤 🍵", "🍵", "立冬羊肉汤浓白如奶鲜而不膻冬令滋补", "山东·菏泽·单县", "山东", None, "free", None, ["羊肉汤", "秋冬", "滋补"], 5), - ("火锅 🍲", "🍲", "冬季火锅麻辣鲜香暖身暖胃聚会首选", "重庆·解放碑", "重庆", None, "free", None, ["火锅", "秋冬", "麻辣"], 5), - ("腊肉 🥩", "🥩", "湘西腊肉经冬熏制烟熏味浓肥而不腻", "湖南·湘西", "湖南", None, "free", None, ["腊肉", "秋冬", "年味"], 3), - ("烤全羊 🐑", "🐑", "内蒙古烤全羊外焦里嫩豪迈冬日盛宴", "内蒙古·呼和浩特", "内蒙古", None, "free", None, ["烤全羊", "秋冬", "蒙古菜"], 3), - ("糖炒栗子 🌰", "🌰", "迁西板栗糖炒飘香软糯香甜冬日手心暖", "河北·唐山·迁西", "河北", None, "free", None, ["糖炒栗子", "秋冬", "零食"], 4), - ("烤红薯 🍠", "🍠", "冬日烤红薯焦糖香气四溢暖手暖胃", "北京·胡同", "北京", None, "free", None, ["烤红薯", "秋冬", "街头小吃"], 4), - ("涮羊肉 🍲", "🍲", "老北京铜锅涮肉手切鲜羊肉蘸麻酱冬日至味", "北京·牛街", "北京", None, "free", None, ["涮羊肉", "秋冬", "北京菜"], 5), - ("姜母鸭 🦆", "🦆", "厦门姜母鸭老姜米酒炖煮驱寒暖身", "福建·厦门", "福建", None, "free", None, ["姜母鸭", "秋冬", "闽南菜"], 4), - ("螺蛳粉 🍜", "🍜", "柳州螺蛳粉酸辣鲜爽冬日嗦粉酣畅淋漓", "广西·柳州", "广西", None, "free", None, ["螺蛳粉", "秋冬", "广西"], 3), - ("过桥米线 🍜", "🍜", "云南过桥米线汤鲜料足冬日暖胃首选", "云南·蒙自", "云南", None, "free", None, ["过桥米线", "秋冬", "云南菜"], 2), - ("砂锅粥 🍲", "🍲", "潮汕砂锅粥鲜香绵密虾蟹粥暖胃暖心", "广东·汕头", "广东", None, "free", None, ["砂锅粥", "秋冬", "潮汕"], 2), - ("牛肉面 🍜", "🍜", "兰州牛肉面一清二白三红四绿五黄冬日暖身", "甘肃·兰州", "甘肃", None, "free", None, ["牛肉面", "秋冬", "面食"], 2), - ("热干面 🍜", "🍜", "武汉热干面芝麻酱拌面香浓醇厚冬晨暖胃", "湖北·武汉", "湖北", None, "free", None, ["热干面", "秋冬", "早餐"], 2), - ("胡辣汤 🥣", "🥣", "河南胡辣汤浓稠辛辣配油条水煎包冬日暖身", "河南·周口", "河南", None, "free", None, ["胡辣汤", "秋冬", "早餐"], 3), - ("臭豆腐 🧈", "🧈", "长沙臭豆腐外焦里嫩闻着臭吃着香", "湖南·长沙·坡子街", "湖南", None, "free", None, ["臭豆腐", "秋冬", "街头小吃"], 2), - ("驴肉火烧 🫓", "🫓", "保定驴肉火烧外酥里嫩天上龙肉地下驴肉", "河北·保定", "河北", None, "free", None, ["驴肉火烧", "秋冬", "河北"], 2), - ("锅包肉 🥩", "🥩", "东北锅包肉酸甜酥脆外焦里嫩一口上头", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["锅包肉", "秋冬", "东北菜"], 2), - ("小鸡炖蘑菇 🍄", "🍄", "东北小鸡炖榛蘑鲜香浓郁冬日硬菜", "辽宁·沈阳", "辽宁", None, "free", None, ["小鸡炖蘑菇", "秋冬", "东北菜"], 2), - ("酸菜白肉 🥬", "🥬", "东北酸菜炖白肉血肠酸爽解腻冬日硬菜", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["酸菜白肉", "秋冬", "东北菜"], 2), - ("杀猪菜 🥬", "🥬", "东北杀猪菜血肠酸菜白肉年关传统大菜", "吉林·长春", "吉林", None, "free", None, ["杀猪菜", "秋冬", "东北菜"], 2), - ("脐橙 🍊", "🍊", "赣南脐橙大量上市酸甜浓郁果肉饱满汁水丰盈", "江西·赣州", "江西", None, "free", None, ["脐橙", "秋冬", "水果"], 4), - ("柚子 🍊", "🍊", "沙田柚蜜柚酸甜多汁秋冬开胃水果", "广西·容县", "广西", None, "free", None, ["柚子", "秋冬", "水果"], 3), - ("柿子 🍅", "🍅", "秋冬柿子红润软糯甜蜜如蜜挂枝头", "陕西·富平", "陕西", None, "free", None, ["柿子", "秋冬", "水果"], 3), - ("石榴 🍎", "🍎", "软籽石榴尾声红如宝石酸甜多汁", "四川·会理", "四川", None, "free", None, ["石榴", "秋冬", "水果"], 2), - ("板栗 🌰", "🌰", "迁西板栗炖鸡煲汤软糯香甜秋冬滋补", "河北·唐山·迁西", "河北", None, "free", None, ["板栗", "秋冬", "时蔬"], 3), - ("银杏果 🌰", "🌰", "银杏白果炖鸡润肺止咳秋冬养生", "江苏·泰兴", "江苏", None, "free", None, ["白果", "秋冬", "时蔬"], 2), - ("冰糖葫芦 🍡", "🍡", "山楂冰糖葫芦酸甜可口秋冬街头经典", "北京·王府井", "北京", None, "free", None, ["冰糖葫芦", "秋冬", "街头小吃"], 3), - ("豆汁 🥛", "🥛", "老北京豆汁配焦圈酸爽独特冬日清晨", "北京·护国寺", "北京", None, "free", None, ["豆汁", "秋冬", "老北京"], 1), - ("糍粑 🍘", "🍘", "手工打糍粑蘸白糖红糖软糯弹牙年味浓", "贵州·黔东南", "贵州", None, "free", None, ["糍粑", "秋冬", "传统美食"], 2), - ("腊八粥 🥣", "🥣", "腊八节传统美食八宝熬粥暖身祈福", "陕西·西安", "陕西", None, "free", None, ["腊八粥", "秋冬", "传统美食"], 4), - ("冻梨 🍐", "🍐", "东北冻梨黑如墨汁解冻后吸汁如蜜冬日限定", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["冻梨", "秋冬", "东北特产"], 3), - ], - 12: [ - ("冰糖葫芦 🍡", "🍡", "山楂裹冰糖晶莹剔透北方冬日街头经典", "北京·王府井", "北京", None, "free", None, ["冰糖葫芦", "冬季", "街头小吃"], 3), - ("腊肉 🥩", "🥩", "湘西腊肉经冬熏制烟熏味浓肥而不腻", "湖南·湘西", "湖南", None, "free", None, ["腊肉", "冬季", "年味"], 4), - ("火锅 🍲", "🍲", "重庆老火锅麻辣鲜香毛肚鸭肠涮起来", "重庆·解放碑", "重庆", None, "free", None, ["火锅", "冬季", "麻辣"], 5), - ("年糕 🍚", "🍚", "宁波水磨年糕软糯弹牙炒年糕汤年糕皆宜", "浙江·宁波", "浙江", None, "free", None, ["年糕", "冬季", "传统美食"], 3), - ("柑橘 🍊", "🍊", "赣南脐橙酸甜浓郁果肉饱满汁水丰盈", "江西·赣州", "江西", None, "free", None, ["柑橘", "冬季", "水果"], 4), - ("汤圆 🥣", "🥣", "冬至汤圆芝麻馅流心软糯甜蜜暖冬", "浙江·宁波", "浙江", None, "free", None, ["汤圆", "冬至", "传统美食"], 5), - ("烤红薯 🍠", "🍠", "冬日街头烤红薯焦糖香气四溢暖手暖胃", "北京·胡同", "北京", None, "free", None, ["烤红薯", "冬季", "街头小吃"], 4), - ("羊肉汤 🍵", "🍵", "单县羊肉汤浓白如奶鲜而不膻冬令滋补", "山东·菏泽·单县", "山东", None, "free", None, ["羊肉汤", "冬季", "滋补"], 5), - ("糖炒栗子 🌰", "🌰", "迁西板栗糖炒飘香软糯香甜冬日手心暖", "河北·唐山·迁西", "河北", None, "free", None, ["糖炒栗子", "冬季", "零食"], 4), - ("酸菜白肉 🥬", "🥬", "东北酸菜炖白肉血肠酸爽解腻冬日硬菜", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["酸菜白肉", "冬季", "东北菜"], 3), - ("腊八粥 🥣", "🥣", "腊八节传统美食八宝熬粥暖身祈福", "陕西·西安", "陕西", None, "free", None, ["腊八粥", "冬季", "传统美食"], 4), - ("糍粑 🍘", "🍘", "手工打糍粑蘸白糖红糖软糯弹牙年味浓", "贵州·黔东南", "贵州", None, "free", None, ["糍粑", "冬季", "传统美食"], 3), - ("热干面 🍜", "🍜", "武汉过早首选芝麻酱拌面香浓醇厚", "湖北·武汉", "湖北", None, "free", None, ["热干面", "冬季", "早餐"], 2), - ("砂锅粥 🍲", "🍲", "潮汕砂锅粥鲜香绵密虾蟹粥暖胃暖心", "广东·汕头", "广东", None, "free", None, ["砂锅粥", "冬季", "潮汕"], 2), - ("牛肉面 🍜", "🍜", "兰州牛肉面一清二白三红四绿五黄冬日暖身", "甘肃·兰州", "甘肃", None, "free", None, ["牛肉面", "冬季", "面食"], 2), - ("锅包肉 🥩", "🥩", "东北锅包肉酸甜酥脆外焦里嫩一口上头", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["锅包肉", "冬季", "东北菜"], 2), - ("涮羊肉 🍲", "🍲", "老北京铜锅涮肉手切鲜羊肉蘸麻酱冬日至味", "北京·牛街", "北京", None, "free", None, ["涮羊肉", "冬季", "北京菜"], 5), - ("姜母鸭 🦆", "🦆", "厦门姜母鸭老姜米酒炖煮驱寒暖身", "福建·厦门", "福建", None, "free", None, ["姜母鸭", "冬季", "闽南菜"], 4), - ("螺蛳粉 🍜", "🍜", "柳州螺蛳粉酸辣鲜爽冬日嗦粉酣畅淋漓", "广西·柳州", "广西", None, "free", None, ["螺蛳粉", "冬季", "广西"], 3), - ("烤全羊 🐑", "🐑", "内蒙古烤全羊外焦里嫩豪迈冬日盛宴", "内蒙古·呼和浩特", "内蒙古", None, "free", None, ["烤全羊", "冬季", "蒙古菜"], 3), - ("胡辣汤 🥣", "🥣", "河南胡辣汤浓稠辛辣配油条水煎包冬日暖身", "河南·周口", "河南", None, "free", None, ["胡辣汤", "冬季", "早餐"], 3), - ("过桥米线 🍜", "🍜", "云南过桥米线汤鲜料足冬日暖胃首选", "云南·蒙自", "云南", None, "free", None, ["过桥米线", "冬季", "云南菜"], 2), - ("冻梨 🍐", "🍐", "东北冻梨黑如墨汁解冻后吸汁如蜜冬日限定", "黑龙江·哈尔滨", "黑龙江", None, "free", None, ["冻梨", "冬季", "东北特产"], 4), - ("羊杂碎 🍵", "🍵", "宁夏羊杂碎汤浓味鲜冬日暖身暖胃", "宁夏·银川", "宁夏", None, "free", None, ["羊杂碎", "冬季", "西北菜"], 2), - ("小鸡炖蘑菇 🍄", "🍄", "东北小鸡炖榛蘑鲜香浓郁冬日硬菜", "辽宁·沈阳", "辽宁", None, "free", None, ["小鸡炖蘑菇", "冬季", "东北菜"], 2), - ("驴肉火烧 🫓", "🫓", "保定驴肉火烧外酥里嫩天上龙肉地下驴肉", "河北·保定", "河北", None, "free", None, ["驴肉火烧", "冬季", "河北"], 2), - ("麻辣烫 🌶️", "🌶️", "天水麻辣烫香辣过瘾冬日街头暖身神器", "甘肃·天水", "甘肃", None, "free", None, ["麻辣烫", "冬季", "街头小吃"], 3), - ("杀猪菜 🥬", "🥬", "东北杀猪菜血肠酸菜白肉年关传统大菜", "吉林·长春", "吉林", None, "free", None, ["杀猪菜", "冬季", "东北菜"], 2), - ("臭豆腐 🧈", "🧈", "长沙臭豆腐外焦里嫩闻着臭吃着香", "湖南·长沙·坡子街", "湖南", None, "free", None, ["臭豆腐", "冬季", "街头小吃"], 2), - ("豆汁 🥛", "🥛", "老北京豆汁配焦圈酸爽独特冬日清晨", "北京·护国寺", "北京", None, "free", None, ["豆汁", "冬季", "老北京"], 1), - ("饺子 🥟", "🥟", "冬至饺子猪肉白菜韭菜三鲜北方传统", "山东·济南", "山东", None, "free", None, ["饺子", "冬至", "传统美食"], 5), - ], -} - - -# ============================================================ -# 辅助函数 -# ============================================================ - -def date_in_range(m, d, m_start, d_start, m_end, d_end): - if m_start <= m_end: - if m < m_start or m > m_end: - return False - if m == m_start and d < d_start: - return False - if m == m_end and d > d_end: - return False - return True - else: - if m >= m_start or m <= m_end: - if m == m_start and d < d_start: - return False - if m == m_end and d > d_end: - return False - return True - return False - - -def date_in_peak(m, d, pm_s, pd_s, pm_e, pd_e): - if pm_s <= pm_e: - if m < pm_s or m > pm_e: - return False - if m == pm_s and d < pd_s: - return False - if m == pm_e and d > pd_e: - return False - return True - else: - if m >= pm_s or m <= pm_e: - if m == pm_s and d < pd_s: - return False - if m == pm_e and d > pd_e: - return False - return True - return False - - -def calc_flower_heat(m, d, m_s, d_s, m_e, d_e, pm_s, pd_s, pm_e, pd_e): - if date_in_peak(m, d, pm_s, pd_s, pm_e, pd_e): - return 5 - if date_in_range(m, d, m_s, d_s, pm_s, pd_s): - return 3 - if date_in_range(m, d, pm_e, pd_e, m_e, d_e): - return 1 - return 2 - - -def mk_food_card(item, m, d, idx): - title, emoji, desc, loc, prov, alt, pt, pn, tags, heat = item - o = { - "id": f"food_{m:02d}{d:02d}_{idx:02d}", - "title": title, "emoji": emoji, "description": desc, - "location": loc, "province": prov, "altitude": alt, - "priceType": pt, "tags": tags, "riskWarnings": [], - "isFood": True, "heatLevel": heat, - } - if pn: - o["priceNote"] = pn - return o - - -def mk_play_card(item, m, d, idx, heat=3): - title, emoji, desc, loc, prov, alt, pt, pn, tags, rw = item[:10] - o = { - "id": f"play_{m:02d}{d:02d}_{idx:02d}", - "title": title, "emoji": emoji, "description": desc, - "location": loc, "province": prov, "altitude": alt, - "priceType": pt, "tags": tags, "riskWarnings": rw or [], - "isFood": False, "heatLevel": heat, - } - if pn: - o["priceNote"] = pn - return o - - -def mk_flower_card(item, m, d, idx): - title, emoji, desc, loc, prov, alt, pt, pn, tags, rw = item[:10] - m_s, d_s, m_e, d_e = item[10], item[11], item[12], item[13] - if len(item) >= 18: - pm_s, pd_s, pm_e, pd_e = item[14], item[15], item[16], item[17] - else: - pm_s, pd_s, pd_e = item[14], item[15], item[16] - pm_e = pm_s - heat = calc_flower_heat(m, d, m_s, d_s, m_e, d_e, pm_s, pd_s, pm_e, pd_e) - o = { - "id": f"play_{m:02d}{d:02d}_{idx:02d}", - "title": title, "emoji": emoji, "description": desc, - "location": loc, "province": prov, "altitude": alt, - "priceType": pt, "tags": tags, "riskWarnings": rw or [], - "isFood": False, "heatLevel": heat, - } - if pn: - o["priceNote"] = pn - return o - - -def mk_seagull_card(item, m, d, idx): - title, emoji, desc, loc, prov, alt, pt, pn, tags, rw = item[:10] - heat = seagull_heat(m) - o = { - "id": f"play_{m:02d}{d:02d}_{idx:02d}", - "title": title, "emoji": emoji, "description": desc, - "location": loc, "province": prov, "altitude": alt, - "priceType": pt, "tags": tags, "riskWarnings": rw or [], - "isFood": False, "heatLevel": heat, - } - if pn: - o["priceNote"] = pn - return o - - -# ============================================================ -# 主生成逻辑 -# ============================================================ - -def get_active_flowers(m, d): - result = [] - for ev in FLOWER_EVENTS: - if date_in_range(m, d, ev[10], ev[11], ev[12], ev[13]): - result.append(ev) - return result - - -def get_active_seagulls(m, d): - result = [] - for ev in SEAGULL_EVENTS: - if date_in_range(m, d, ev[10], ev[11], ev[12], ev[13]): - result.append(ev) - return result - - -def get_active_nature(m, d): - result = [] - for ev in NATURE_EVENTS: - if date_in_range(m, d, ev[10], ev[11], ev[12], ev[13]): - result.append(ev) - return result - - -def gen_month(m): - yr = 2026 - days_in = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m - 1] - sr, ss = SUN[m] - nodes = [] - fl = FOOD_DATA[m] - - for d in range(1, days_in + 1): - dt = datetime(yr, m, d) - wd = WD[dt.weekday()] - iwe = dt.weekday() >= 5 - - food_cards = [] - play_cards = [] - - # --- 美食卡片: 1-2张 --- - fi_idx1 = (d - 1) % len(fl) - food_cards.append(mk_food_card(fl[fi_idx1], m, d, 1)) - - extra_food_prob = 0.6 if iwe else 0.35 - if random.random() < extra_food_prob: - fi_idx2 = (d - 1 + len(fl) // 2 + random.randint(1, 5)) % len(fl) - food_cards.append(mk_food_card(fl[fi_idx2], m, d, 2)) - - # --- 游玩卡片: 1-3张 --- - play_idx = 0 - - # 优先添加花期卡片 - active_flowers = get_active_flowers(m, d) - if active_flowers: - chosen = random.sample(active_flowers, min(2, len(active_flowers))) - for flower in chosen: - play_idx += 1 - play_cards.append(mk_flower_card(flower, m, d, play_idx)) - - # 海鸥卡片 - active_seagulls = get_active_seagulls(m, d) - if active_seagulls: - chosen_sg = random.choice(active_seagulls) - play_idx += 1 - play_cards.append(mk_seagull_card(chosen_sg, m, d, play_idx)) - - # 自然景观/活动卡片 - active_nature = get_active_nature(m, d) - if active_nature: - chosen_n = random.choice(active_nature) - play_idx += 1 - play_cards.append(mk_play_card(chosen_n, m, d, play_idx, heat=3)) - - # 如果没有play卡片,从自然景观中随机选一个 - if not play_cards and active_nature: - chosen_n = random.choice(active_nature) - play_idx += 1 - play_cards.append(mk_play_card(chosen_n, m, d, play_idx, heat=3)) - - # 确保至少1个play卡片 - if not play_cards: - fallback_nature = random.choice(NATURE_EVENTS) - play_idx += 1 - play_cards.append(mk_play_card(fallback_nature, m, d, play_idx, heat=2)) - - node = { - "date": f"2026-{m:02d}-{d:02d}", - "month": m, "day": d, "weekday": wd, "isWeekend": iwe, - "season": sn(m), "sunrise": sr, "sunset": ss, - "cards": { - "food": food_cards, - "play": play_cards, - } - } - nodes.append(node) - - return {"year": yr, "month": m, "version": "3.0.0", "updatedAt": "2026-05-28", "nodes": nodes} - - -# ============================================================ -# 执行生成 -# ============================================================ - -print(f"Flower events: {len(FLOWER_EVENTS)}") -print(f"Seagull events: {len(SEAGULL_EVENTS)}") -print(f"Nature events: {len(NATURE_EVENTS)}") -print(f"Food data: {sum(len(FOOD_DATA[m]) for m in FOOD_DATA)} items across {len(FOOD_DATA)} months") -print() - -total_cards = 0 -for m in range(1, 13): - data = gen_month(m) - fp = os.path.join(OUT, f"2026_{m:02d}.json") - with open(fp, "w", encoding="utf-8") as f: - json.dump(data, f, ensure_ascii=False, indent=2) - - cards_count = sum( - len(n["cards"]["food"]) + len(n["cards"]["play"]) - for n in data["nodes"] - ) - total_cards += cards_count - food_avg = sum(len(n["cards"]["food"]) for n in data["nodes"]) / len(data["nodes"]) - play_avg = sum(len(n["cards"]["play"]) for n in data["nodes"]) / len(data["nodes"]) - print(f"✅ {fp}: {len(data['nodes'])} days, avg {food_avg:.1f} food + {play_avg:.1f} play = {cards_count} cards") - -print(f"\n🎉 Done! Total cards: {total_cards}") diff --git a/assets/data/leisure/_gen_data.py b/assets/data/leisure/_gen_data.py deleted file mode 100644 index 449e1c9d..00000000 --- a/assets/data/leisure/_gen_data.py +++ /dev/null @@ -1,179 +0,0 @@ -F = {} -P = {} - -F[1] = [ -("冰糖葫芦 🍡","🍡","山楂裹冰糖晶莹剔透北方冬日街头经典","北京·王府井","北京",["冰糖葫芦","冬季","街头小吃"],None,"free",None), -("腊肉 🥩","🥩","湘西腊肉经冬熏制烟熏味浓肥而不腻","湖南·湘西","湖南",["腊肉","冬季","年味"],None,"free",None), -("火锅 🍲","🍲","重庆老火锅麻辣鲜香毛肚鸭肠涮起来","重庆·解放碑","重庆",["火锅","冬季","麻辣"],None,"free",None), -("年糕 🍚","🍚","宁波水磨年糕软糯弹牙炒年糕汤年糕皆宜","浙江·宁波","浙江",["年糕","冬季","传统美食"],None,"free",None), -("柑橘 🍊","🍊","赣南脐橙酸甜浓郁果肉饱满汁水丰盈","江西·赣州","江西",["柑橘","冬季","水果"],None,"free",None), -("汤圆 🥣","🥣","宁波猪油汤圆芝麻馅流心软糯甜蜜暖冬","浙江·宁波","浙江",["汤圆","冬季","传统美食"],None,"free",None), -("烤红薯 🍠","🍠","冬日街头烤红薯焦糖香气四溢暖手暖胃","北京·胡同","北京",["烤红薯","冬季","街头小吃"],None,"free",None), -("羊肉汤 🍵","🍵","单县羊肉汤浓白如奶鲜而不膻冬令滋补","山东·菏泽·单县","山东",["羊肉汤","冬季","滋补"],None,"free",None), -("糖炒栗子 🌰","🌰","迁西板栗糖炒飘香软糯香甜冬日手心暖","河北·唐山·迁西","河北",["糖炒栗子","冬季","零食"],None,"free",None), -("酸菜白肉 🥬","🥬","东北酸菜炖白肉血肠酸爽解腻冬日硬菜","黑龙江·哈尔滨","黑龙江",["酸菜白肉","冬季","东北菜"],None,"free",None), -("腊八粥 🥣","🥣","腊八节传统美食八宝熬粥暖身祈福","陕西·西安","陕西",["腊八粥","冬季","传统美食"],None,"free",None), -("糍粑 🍘","🍘","手工打糍粑蘸白糖红糖软糯弹牙年味浓","贵州·黔东南","贵州",["糍粑","冬季","传统美食"],None,"free",None), -("热干面 🍜","🍜","武汉过早首选芝麻酱拌面香浓醇厚","湖北·武汉","湖北",["热干面","冬季","早餐"],None,"free",None), -("砂锅粥 🍲","🍲","潮汕砂锅粥鲜香绵密虾蟹粥暖胃暖心","广东·汕头","广东",["砂锅粥","冬季","潮汕"],None,"free",None), -("牛肉面 🍜","🍜","兰州牛肉面一清二白三红四绿五黄冬日暖身","甘肃·兰州","甘肃",["牛肉面","冬季","面食"],None,"free",None), -("锅包肉 🥩","🥩","东北锅包肉酸甜酥脆外焦里嫩一口上头","黑龙江·哈尔滨","黑龙江",["锅包肉","冬季","东北菜"],None,"free",None), -("涮羊肉 🍲","🍲","老北京铜锅涮肉手切鲜羊肉蘸麻酱冬日至味","北京·牛街","北京",["涮羊肉","冬季","北京菜"],None,"free",None), -("姜母鸭 🦆","🦆","厦门姜母鸭老姜米酒炖煮驱寒暖身","福建·厦门","福建",["姜母鸭","冬季","闽南菜"],None,"free",None), -("螺蛳粉 🍜","🍜","柳州螺蛳粉酸辣鲜爽冬日嗦粉酣畅淋漓","广西·柳州","广西",["螺蛳粉","冬季","广西"],None,"free",None), -("烤全羊 🐑","🐑","内蒙古烤全羊外焦里嫩豪迈冬日盛宴","内蒙古·呼和浩特","内蒙古",["烤全羊","冬季","蒙古菜"],None,"free",None), -("胡辣汤 🥣","🥣","河南胡辣汤浓稠辛辣配油条水煎包冬日暖身","河南·周口","河南",["胡辣汤","冬季","早餐"],None,"free",None), -("过桥米线 🍜","🍜","云南过桥米线汤鲜料足冬日暖胃首选","云南·蒙自","云南",["过桥米线","冬季","云南菜"],None,"free",None), -("冻梨 🍐","🍐","东北冻梨黑如墨汁解冻后吸汁如蜜冬日限定","黑龙江·哈尔滨","黑龙江",["冻梨","冬季","东北特产"],None,"free",None), -("羊杂碎 🍵","🍵","宁夏羊杂碎汤浓味鲜冬日暖身暖胃","宁夏·银川","宁夏",["羊杂碎","冬季","西北菜"],None,"free",None), -("小鸡炖蘑菇 🍄","🍄","东北小鸡炖榛蘑鲜香浓郁冬日硬菜","辽宁·沈阳","辽宁",["小鸡炖蘑菇","冬季","东北菜"],None,"free",None), -("驴肉火烧 🫓","🫓","保定驴肉火烧外酥里嫩天上龙肉地下驴肉","河北·保定","河北",["驴肉火烧","冬季","河北"],None,"free",None), -("麻辣烫 🌶️","🌶️","天水麻辣烫香辣过瘾冬日街头暖身神器","甘肃·天水","甘肃",["麻辣烫","冬季","街头小吃"],None,"free",None), -("杀猪菜 🥬","🥬","东北杀猪菜血肠酸菜白肉年关传统大菜","吉林·长春","吉林",["杀猪菜","冬季","东北菜"],None,"free",None), -("臭豆腐 🧈","🧈","长沙臭豆腐外焦里嫩闻着臭吃着香","湖南·长沙·坡子街","湖南",["臭豆腐","冬季","街头小吃"],None,"free",None), -("豆汁 🥛","🥛","老北京豆汁配焦圈酸爽独特冬日清晨","北京·护国寺","北京",["豆汁","冬季","老北京"],None,"free",None), -("糖葫芦(草莓)🍓","🍓","草莓冰糖葫芦鲜红欲滴酸甜可口","天津·古文化街","天津",["糖葫芦","冬季","草莓"],None,"free",None), -] - -F[2] = [ -("春卷 🥟","🥟","立春吃春卷薄皮裹鲜蔬咬一口春意盎然","上海·城隍庙","上海",["春卷","立春","传统美食"],None,"free",None), -("元宵 🥣","🥣","元宵节吃元宵芝麻花生馅滚圆甜蜜","浙江·宁波","浙江",["元宵","元宵节","传统美食"],None,"free",None), -("甘蔗 🌿","🌿","广西黑皮甘蔗清甜多汁冬末春初最佳","广西·玉林","广西",["甘蔗","冬末","水果"],None,"free",None), -("年糕 🍚","🍚","春节年糕寓意年年高炒煮炸皆美味","浙江·宁波","浙江",["年糕","春节","传统美食"],None,"free",None), -("腊肉 🥩","🥩","四川腊肉经冬熏制麻辣烟熏风味独特","四川·成都","四川",["腊肉","冬末","川味"],None,"free",None), -("饺子 🥟","🥟","北方过年吃饺子猪肉白菜韭菜三鲜","山东·济南","山东",["饺子","春节","传统美食"],None,"free",None), -("春笋初探 🎋","🎋","岭南早春第一笋鲜嫩脆爽油焖最佳","广东·韶关","广东",["春笋","早春","时蔬"],None,"free",None), -("柑橘 🍊","🍊","春见柑橘甜蜜收官果肉细嫩化渣","四川·蒲江","四川",["柑橘","冬末","水果"],None,"free",None), -("冰糖葫芦 🍡","🍡","寒冬腊月一串红艳艳北方人最深的冬日记忆","北京·南锣鼓巷","北京",["冰糖葫芦","冬季","街头小吃"],None,"free",None), -("八宝饭 🍚","🍚","春节传统甜品糯米八宝甜糯软滑年味十足","江苏·苏州","江苏",["八宝饭","春节","甜品"],None,"free",None), -("汤圆 🥣","🥣","元宵节汤圆黑芝麻馅流心甜蜜团团圆圆","四川·成都","四川",["汤圆","元宵节","传统美食"],None,"free",None), -("火锅 🍲","🍲","成都火锅麻辣鲜香冬日聚会首选","四川·成都","四川",["火锅","冬末","麻辣"],None,"free",None), -("枇杷(云南早熟)🍊","🍊","春日第一鲜金黄饱满酸甜多汁润肺止咳","云南·蒙自","云南",["枇杷","早春","水果"],1300,"free",None), -("锅盔 🫓","🫓","陕西锅盔外酥里软夹肉夹菜皆宜","陕西·宝鸡","陕西",["锅盔","冬末","面食"],None,"free",None), -("烤鱼 🐟","🐟","万州烤鱼香辣鲜嫩冬夜围炉烤鱼暖身","重庆·万州","重庆",["烤鱼","冬末","川渝菜"],None,"free",None), -("豆腐脑 🥣","🥣","北方咸豆腐脑配卤汁冬晨暖胃","北京·护国寺","北京",["豆腐脑","冬末","早餐"],None,"free",None), -("炸酱面 🍜","🍜","老北京炸酱面黄酱肉丁拌面冬日扎实","北京·前门","北京",["炸酱面","冬末","北京菜"],None,"free",None), -("红糖糍粑 🍘","🍘","四川红糖糍粑外酥内糯红糖流心","四川·成都","四川",["糍粑","冬末","甜品"],None,"free",None), -("羊肉泡馍 🍲","🍲","西安羊肉泡馍浓汤鲜香掰馍泡汤冬日暖身","陕西·西安","陕西",["羊肉泡馍","冬末","西北菜"],None,"free",None), -("菠萝 🍍","🍍","徐闻菠萝初上市春日热带鲜果酸甜可口","广东·湛江·徐闻","广东",["菠萝","早春","热带水果"],None,"free",None), -("草莓 🍓","🍓","丹东99草莓个大香甜冬末春初最佳赏味","辽宁·丹东","辽宁",["草莓","冬末","水果"],None,"free",None), -("米线 🍜","🍜","云南小锅米线鲜香热辣冬春之交暖胃","云南·昆明","云南",["米线","冬末","云南菜"],None,"free",None), -("馄饨 🥟","🥟","上海小馄饨皮薄馅鲜冬晨一碗暖到心","上海·城隍庙","上海",["馄饨","冬末","早餐"],None,"free",None), -("酸辣粉 🌶️","🌶️","重庆酸辣粉酸辣爽滑冬末开胃解馋","重庆·磁器口","重庆",["酸辣粉","冬末","重庆小吃"],None,"free",None), -("青团 🍡","🍡","江南青团初上市艾草清香豆沙甜蜜","浙江·杭州","浙江",["青团","早春","传统美食"],None,"free",None), -("糖油果子 🍩","🍩","成都糖油果子外酥内糯红糖裹身甜蜜暖冬","四川·成都","四川",["糖油果子","冬末","成都小吃"],None,"free",None), -("卤煮 🍲","🍲","北京卤煮火烧肠肺豆腐浸浓汤冬日硬核早餐","北京·南横街","北京",["卤煮","冬末","北京小吃"],None,"free",None), -("烤红薯 🍠","🍠","冬末烤红薯焦糖香浓暖手暖胃","河南·郑州","河南",["烤红薯","冬末","街头小吃"],None,"free",None), -] - -F[3] = [ -("春笋 🎋","🎋","惊蛰春笋破土出鲜嫩脆甜腌笃鲜上品","浙江·临安","浙江",["春笋","惊蛰","时蔬"],None,"free",None), -("青团 🍡","🍡","清明青团艾草香豆沙蛋黄肉松馅江南春味","上海·杏花楼","上海",["青团","清明","传统美食"],None,"free",None), -("荠菜 🥬","🥬","三月三荠菜赛灵丹荠菜馄饨春卷鲜掉眉毛","江苏·南京","江苏",["荠菜","春季","时蔬"],None,"free",None), -("香椿 🌿","🌿","香椿芽炒鸡蛋春日限定美味香气浓郁","山东·沂蒙","山东",["香椿","春季","时蔬"],None,"free",None), -("菠萝 🍍","🍍","徐闻菠萝金黄香甜春日热带鲜果","广东·湛江·徐闻","广东",["菠萝","春季","热带水果"],None,"free",None), -("明前茶 🍵","🍵","明前龙井一芽一叶嫩绿清香春日雅饮","浙江·杭州·西湖","浙江",["明前茶","龙井","春季"],None,"free",None), -("枇杷 🍊","🍊","云南蒙自枇杷金黄饱满春日第一鲜果","云南·蒙自","云南",["枇杷","春季","水果"],1300,"free",None), -("螺蛳 🐚","🐚","清明螺蛳赛肥鹅紫苏爆炒鲜嫩入味","江苏·苏州","江苏",["螺蛳","清明","河鲜"],None,"free",None), -("豌豆尖 🌱","🌱","春日豌豆尖鲜嫩翠绿清炒煮汤皆宜","四川·成都","四川",["豌豆尖","春季","时蔬"],None,"free",None), -("草莓 🍓","🍓","春季草莓大量上市红润饱满香甜多汁","辽宁·丹东","辽宁",["草莓","春季","水果"],None,"free",None), -("腌笃鲜 🍲","🍲","春笋咸肉鲜蹄煲汤江南春日第一鲜汤","江苏·苏州","江苏",["腌笃鲜","春季","江南菜"],None,"free",None), -("春饼 🫓","🫓","立春吃春饼卷菜薄饼裹合菜咬春迎新","北京·前门","北京",["春饼","立春","传统美食"],None,"free",None), -("马兰头 🥬","🥬","马兰头拌香干春日野菜清香爽口","浙江·杭州","浙江",["马兰头","春季","野菜"],None,"free",None), -("河豚 🐡","🐡","扬中河豚鲜嫩肥美春日至味","江苏·扬中","江苏",["河豚","春季","河鲜"],None,"paid","时价"), -("蚕豆 🫘","🫘","春蚕豆嫩绿清甜葱油蚕豆鲜嫩可口","上海·崇明","上海",["蚕豆","春季","时蔬"],None,"free",None), -("碧螺春 🍵","🍵","洞庭碧螺春花果香春日品茗雅事","江苏·苏州·洞庭","江苏",["碧螺春","春季","茶"],None,"free",None), -("槐花 🌸","🌸","槐花麦饭清香甜糯春日限定乡野美味","陕西·渭南","陕西",["槐花","春季","时蔬"],None,"free",None), -("樱桃 🍒","🍒","大棚樱桃初上市红润饱满酸甜可口","山东·烟台","山东",["樱桃","春季","水果"],None,"free",None), -("油焖笋 🎋","🎋","临安春笋油焖浓油赤酱鲜嫩入味","浙江·临安","浙江",["油焖笋","春季","时蔬"],None,"free",None), -("蒜薹 🧄","🧄","春日蒜薹鲜嫩脆甜炒腊肉绝配","山东·金乡","山东",["蒜薹","春季","时蔬"],None,"free",None), -("春茶 🍵","🍵","安吉白茶春日开采鲜爽甘醇春味入茶","浙江·安吉","浙江",["白茶","春季","茶"],None,"free",None), -("韭菜 🥬","🥬","春韭鲜嫩赛过肉韭菜盒子炒蛋春日限定","河南·驻马店","河南",["韭菜","春季","时蔬"],None,"free",None), -("蕨菜 🌿","🌿","春日蕨菜鲜嫩凉拌蕨菜清脆爽口","贵州·黔南","贵州",["蕨菜","春季","野菜"],None,"free",None), -("竹筒饭 🍚","🍚","云南竹筒饭竹香四溢糯米腊肉春日野趣","云南·西双版纳","云南",["竹筒饭","春季","云南"],None,"free",None), -("荠菜馄饨 🥟","🥟","荠菜猪肉馄饨春日鲜香暖胃","上海·弄堂","上海",["荠菜馄饨","春季","江南"],None,"free",None), -("鲜花饼 🌸","🌸","云南玫瑰鲜花饼酥皮玫瑰馅花香四溢","云南·昆明","云南",["鲜花饼","春季","云南特产"],None,"free",None), -("龙井虾仁 🦐","🦐","龙井茶配鲜虾仁茶香鲜嫩春日名菜","浙江·杭州","浙江",["龙井虾仁","春季","杭帮菜"],None,"free",None), -("乌米饭 🍚","🍚","立夏前乌米饭乌叶染米紫黑软糯","浙江·杭州","浙江",["乌米饭","春季","传统美食"],None,"free",None), -("榆钱 🌿","🌿","榆钱窝窝头清甜软糯春日乡野限定","河北·保定","河北",["榆钱","春季","野菜"],None,"free",None), -("枸杞芽 🌿","🌿","宁夏枸杞芽清肝明目凉拌炒蛋皆宜","宁夏·中宁","宁夏",["枸杞芽","春季","时蔬"],None,"free",None), -("菠萝饭 🍍","🍍","菠萝蒸饭果香四溢酸甜软糯热带风味","云南·西双版纳","云南",["菠萝饭","春季","云南"],None,"free",None), -] - -# Months 4-12 follow the same pattern - using compact data -# Due to size, we use a rotation approach with 28-31 items per month - -F[4] = [ -("樱桃 🍒","🍒","初夏红宝石烟台大连饱满圆润","山东·烟台","山东",["樱桃","春季","水果"],None,"free",None), -("枇杷 🍊","🍊","果中之皇金黄饱满酸甜多汁润肺止咳","浙江·黄岩","浙江",["枇杷","春季","水果"],None,"free",None), -("明前茶 🍵","🍵","清明前后龙井茶最佳一芽一叶嫩绿清香","浙江·杭州·西湖","浙江",["明前茶","春季","茶"],None,"free",None), -("桑葚 🫐","🫐","紫黑桑葚甜润多汁春日采摘乐趣","新疆·和田","新疆",["桑葚","春季","水果"],None,"free",None), -("春笋 🎋","🎋","天目雷笋壳薄肉肥春笋上品赏味期极短","浙江·安吉","浙江",["春笋","春季","时蔬"],None,"free",None), -("芒果 🥭","🥭","三亚贵妃芒初上市果肉细腻香甜浓郁","海南·三亚","海南",["芒果","春季","热带水果"],None,"free",None), -("蓝莓 🫐","🫐","云南蓝莓初上市花青素之王酸甜可口","云南·曲靖","云南",["蓝莓","春季","水果"],None,"free",None), -("青梅 🍏","🍏","青梅煮酒论英雄泡青梅酒正当时","浙江·长兴","浙江",["青梅","春季","水果"],None,"free",None), -("香椿 🌿","🌿","谷雨前后香椿最嫩香椿炒蛋春日绝配","山东·沂蒙","山东",["香椿","谷雨","时蔬"],None,"free",None), -("乌米饭 🍚","🍚","立夏乌米饭乌叶染米紫黑软糯清香","浙江·杭州","浙江",["乌米饭","立夏","传统美食"],None,"free",None), -("蚕豆 🫘","🫘","春蚕豆嫩绿清甜葱油蚕豆鲜嫩可口","上海·崇明","上海",["蚕豆","春季","时蔬"],None,"free",None), -("谷雨茶 🍵","🍵","谷雨茶二春茶鲜爽回甘性价比之王","福建·武夷山","福建",["谷雨茶","春季","茶"],None,"free",None), -("芦笋 🌱","🌱","崇明岛芦笋鲜嫩翠绿白灼清炒皆宜","上海·崇明","上海",["芦笋","春季","时蔬"],None,"free",None), -("草莓 🍓","🍓","春季草莓尾声红颜章姬最后一波","辽宁·丹东","辽宁",["草莓","春季","水果"],None,"free",None), -("椰子 🥥","🥥","海南椰子水清甜解渴椰肉炖鸡滋补","海南·文昌","海南",["椰子","春季","热带水果"],None,"free",None), -("白茶 🍵","🍵","福鼎白茶春日开采白毫银针鲜爽回甘","福建·福鼎","福建",["白茶","春季","茶"],None,"free",None), -("豌豆黄 🍨","🍨","北京豌豆黄细腻甜糯春日宫廷小点","北京·仿膳","北京",["豌豆黄","春季","北京小吃"],None,"free",None), -("莼菜 🥬","🥬","西湖莼菜汤滑嫩清爽春日江南名菜","浙江·杭州·西湖","浙江",["莼菜","春季","江南菜"],None,"free",None), -("鲜花饼 🌸","🌸","云南玫瑰鲜花饼酥皮玫瑰馅花香四溢","云南·昆明","云南",["鲜花饼","春季","云南特产"],None,"free",None), -("龙井虾仁 🦐","🦐","龙井茶配鲜虾仁茶香鲜嫩春日名菜","浙江·杭州","浙江",["龙井虾仁","春季","杭帮菜"],None,"free",None), -("菠萝蜜 🍈","🍈","海南菠萝蜜果肉金黄甜蜜浓郁热带之王","海南·万宁","海南",["菠萝蜜","春季","热带水果"],None,"free",None), -("荔枝蜜 🍯","🍯","从化荔枝蜜清甜芳香春日天然甜品","广东·从化","广东",["荔枝蜜","春季","蜂蜜"],None,"free",None), -("苦笋 🎋","🎋","四川苦笋苦中回甘凉拌炒肉皆宜","四川·宜宾","四川",["苦笋","春季","时蔬"],None,"free",None), -("艾草青团 🍡","🍡","清明青团尾声蛋黄肉松马兰头馅","江苏·苏州","江苏",["青团","清明","传统美食"],None,"free",None), -("竹笋炖鸡 🍗","🍗","春笋炖土鸡鲜香浓郁春日滋补","浙江·临安","浙江",["竹笋炖鸡","春季","滋补"],None,"free",None), -("樱桃肉 🍖","🍖","苏菜樱桃肉色泽红亮酸甜软糯春日名菜","江苏·苏州","江苏",["樱桃肉","春季","苏菜"],None,"free",None), -("野菜宴 🥬","🥬","春日野菜大集合荠菜马兰头蒲公英","云南·昆明","云南",["野菜","春季","时蔬"],None,"free",None), -("春卷 🥟","🥟","越南春卷薄皮鲜蔬清爽春日轻食","广西·东兴","广西",["春卷","春季","轻食"],None,"free",None), -("枇杷膏 🍯","🍯","自制枇杷膏润肺止咳春日养生佳品","浙江·塘栖","浙江",["枇杷膏","春季","养生"],None,"free",None), -("菠萝咕噜肉 🍖","🍖","菠萝季做咕噜肉酸甜酥脆春日开胃","广东·广州","广东",["咕噜肉","春季","粤菜"],None,"free",None), -] - -# Months 5-12: reuse similar patterns with seasonal variations -# 5=初夏, 6=夏季, 7=盛夏, 8=夏末, 9=初秋, 10=深秋, 11=秋冬, 12=冬季 - -F[5] = F.get(5, [ -("小龙虾 🦞","🦞","夏季水产之王5月后壳薄肉厚虾黄饱满","湖北·潜江","湖北",["小龙虾","夏季","水产"],None,"free",None), -("杨梅 🫐","🫐","仙居杨梅东魁荸荠种酸甜多汁初夏限定","浙江·仙居","浙江",["杨梅","初夏","水果"],None,"free",None), -("芒果 🥭","🥭","三亚贵妃芒初上市果肉细腻香甜浓郁","海南·三亚","海南",["芒果","热带水果","初夏"],None,"free",None), -("蓝莓 🫐","🫐","云南蓝莓大量上市花青素之王酸甜可口","云南·曲靖","云南",["蓝莓","初夏","水果"],None,"free",None), -("枇杷 🍊","🍊","塘栖枇杷尾声果肉细嫩汁多味甜","浙江·杭州·塘栖","浙江",["枇杷","初夏","水果"],None,"free",None), -("桑葚 🫐","🫐","紫黑桑葚甜润多汁初夏采摘乐趣","新疆·和田","新疆",["桑葚","初夏","水果"],None,"free",None), -("樱桃 🍒","🍒","露天樱桃大量上市果大色红甜度高","山东·烟台","山东",["樱桃","初夏","水果"],None,"free",None), -("青梅酒 🍷","🍷","青梅泡酒正当时冰糖青梅酒酸甜醇香","浙江·长兴","浙江",["青梅酒","初夏","果酒"],None,"free",None), -("荔枝 🍒","🍒","妃子笑初上市壳薄肉厚清甜多汁","广东·增城","广东",["荔枝","初夏","水果"],None,"free",None), -("莲藕 🪷","🪷","初夏鲜藕脆嫩清甜凉拌藕片消暑开胃","湖北·洪湖","湖北",["莲藕","初夏","时蔬"],None,"free",None), -("菠萝 🍍","🍍","徐闻菠萝旺季金黄香甜热带风味","广东·湛江·徐闻","广东",["菠萝","初夏","热带水果"],None,"free",None), -("杨梅酒 🍷","🍷","杨梅泡酒正当时冰糖杨梅酒酸甜醇香","浙江·仙居","浙江",["杨梅酒","初夏","果酒"],None,"free",None), -("凉皮 🍜","🍜","陕西凉皮筋道爽滑夏日消暑开胃","陕西·西安","陕西",["凉皮","初夏","陕西小吃"],None,"free",None), -("冰粉 🍨","🍨","四川冰粉清凉甜蜜红糖花生碎夏日解暑","四川·成都","四川",["冰粉","初夏","甜品"],None,"free",None), -("椰子鸡 🥥","🥥","海南椰子鸡清甜滋补初夏养生首选","海南·文昌","海南",["椰子鸡","初夏","海南菜"],None,"free",None), -("凉面 🍜","🍜","鸡丝凉面麻酱凉面初夏消暑快手餐","四川·成都","四川",["凉面","初夏","面食"],None,"free",None), -("绿豆汤 🥣","🥣","冰镇绿豆汤清凉解暑夏日必备","江苏·苏州","江苏",["绿豆汤","初夏","消暑"],None,"free",None), -("酸梅汤 🥤","🥤","老北京酸梅汤酸甜开胃乌梅桂花熬制","北京·信远斋","北京",["酸梅汤","初夏","消暑"],None,"free",None), -("小龙虾(蒜蓉)🦞","🦞","蒜蓉小龙虾鲜香浓郁初夏夜宵首选","江苏·盱眙","江苏",["小龙虾","蒜蓉","初夏"],None,"free",None), -("西瓜 🍉","🍉","初夏西瓜初上市冰镇西瓜消暑解渴","海南·三亚","海南",["西瓜","初夏","水果"],None,"free",None), -("凉糕 🍨","🍨","四川凉糕红糖水浇淋软糯清凉","四川·宜宾","四川",["凉糕","初夏","甜品"],None,"free",None), -("龟苓膏 🍨","🍨","广西龟苓膏清热解毒初夏养生甜品","广西·梧州","广西",["龟苓膏","初夏","养生"],None,"free",None), -("烧仙草 🍨","🍨","福建烧仙草清凉甜蜜初夏消暑","福建·泉州","福建",["烧仙草","初夏","甜品"],None,"free",None), -("杨枝甘露 🥭","🥭","芒果西柚西米露港式甜品初夏清爽","广东·广州","广东",["杨枝甘露","初夏","港式甜品"],None,"free",None), -("啤酒 🍺","🍺","青岛啤酒初夏畅饮海鲜烧烤绝配","山东·青岛","山东",["啤酒","初夏","饮品"],None,"free",None), -("小龙虾(十三香)🦞","🦞","盱眙十三香小龙虾香料丰富层次分明","江苏·盱眙","江苏",["小龙虾","十三香","初夏"],None,"free",None), -("小龙虾(油焖)🦞","🦞","潜江油焖大虾浓油赤酱鲜香入味","湖北·潜江","湖北",["小龙虾","油焖","初夏"],None,"free",None), -("双皮奶 🍨","🍨","顺德双皮奶香滑细腻初夏甜品经典","广东·顺德","广东",["双皮奶","初夏","甜品"],None,"free",None), -("毛豆 🫛","🫛","盐水毛豆配啤酒初夏夜宵绝配","安徽·合肥","安徽",["毛豆","初夏","下酒菜"],None,"free",None), -("凉拌木耳 🍄","🍄","凉拌黑木耳清爽开胃初夏小菜","四川·成都","四川",["凉拌木耳","初夏","凉菜"],None,"free",None), -("杨梅干 🫐","🫐","自制杨梅干酸甜开胃初夏零食","浙江·仙居","浙江",["杨梅干","初夏","零食"],None,"free",None), -]) - -# For months 6-12, we'll generate data inline in the generator -# This keeps the data file manageable - -print("Food data for months 1-5 loaded") diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png index 072326b9..ed63914c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 05c8b201..78b48e95 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 0890bd07..c7d934e5 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index d17f11f3..666b2294 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index e56e0444..f13686cb 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index e568037a..4b4d7b4b 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index ad9ea9c5..abf65b39 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 0890bd07..c7d934e5 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index adc6ffc2..c4724a43 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index cdb03fed..1c9a167b 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index cdb03fed..1c9a167b 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index d65dbd80..4cc5481c 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index cf929739..0766769b 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 5f2cd5ab..9106575a 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 09e948f4..039d6bf7 100644 Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png index 9da19eac..dccae5a1 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png index 9da19eac..670f8bf7 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png index 9da19eac..f1d16899 100644 Binary files a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index ce5be335..3f6bee7f 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -48,6 +48,8 @@ NSBluetoothAlwaysUsageDescription 闲言需要使用蓝牙以发现和配对附近设备进行文件传输 + NSCalendarsUsageDescription + 闲言需要访问日历以将闲情逸致活动添加到您的日程提醒 NSCameraUsageDescription 闲言需要使用相机以拍照制作壁纸、扫描二维码和文件传输扫码配对 NSDocumentsFolderUsageDescription @@ -56,6 +58,8 @@ 闲言需要本地网络权限以发现和连接局域网设备 NSMicrophoneUsageDescription 闲言需要使用麦克风录制语音消息 + NSSpeechRecognitionUsageDescription + 闲言需要语音识别以将您的语音转换为文字输入 NSPhotoLibraryAddUsageDescription 闲言需要保存编辑好的卡片到您的相册 NSPhotoLibraryUsageDescription diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements index e991dae7..aa03d7a1 100644 --- a/ios/Runner/Runner.entitlements +++ b/ios/Runner/Runner.entitlements @@ -4,7 +4,6 @@ com.apple.developer.nfc.readersession.formats - NDEF TAG com.apple.security.application-groups diff --git a/ios/XianyanWidget/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024.png b/ios/XianyanWidget/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024.png index 072326b9..f1d16899 100644 Binary files a/ios/XianyanWidget/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024.png and b/ios/XianyanWidget/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 072326b9..f1d16899 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index 0597eace..46154446 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index 4c1c3a87..dccae5a1 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index fa885a3c..0212f735 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index 4828b8cf..670f8bf7 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 50ab1dbe..5dcc53c0 100644 Binary files a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/ohos/AppScope/resources/base/media/app_icon.png b/ohos/AppScope/resources/base/media/app_icon.png index 072326b9..f1d16899 100644 Binary files a/ohos/AppScope/resources/base/media/app_icon.png and b/ohos/AppScope/resources/base/media/app_icon.png differ diff --git a/ohos/AppScope/resources/base/media/foreground_icon.png b/ohos/AppScope/resources/base/media/foreground_icon.png index 51266a76..f1d16899 100644 Binary files a/ohos/AppScope/resources/base/media/foreground_icon.png and b/ohos/AppScope/resources/base/media/foreground_icon.png differ diff --git a/ohos/entry/src/main/resources/base/media/foreground_icon.png b/ohos/entry/src/main/resources/base/media/foreground_icon.png index 51266a76..f1d16899 100644 Binary files a/ohos/entry/src/main/resources/base/media/foreground_icon.png and b/ohos/entry/src/main/resources/base/media/foreground_icon.png differ diff --git a/ohos/entry/src/main/resources/base/media/icon.png b/ohos/entry/src/main/resources/base/media/icon.png index 072326b9..f1d16899 100644 Binary files a/ohos/entry/src/main/resources/base/media/icon.png and b/ohos/entry/src/main/resources/base/media/icon.png differ diff --git a/tools/check_icon_sizes.py b/tools/check_icon_sizes.py new file mode 100644 index 00000000..110986ad --- /dev/null +++ b/tools/check_icon_sizes.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 +""" +Created: 2026-06-02 +Updated: 2026-06-02 +Name: check_icon_sizes.py +Desc: Check actual sizes of all platform icons +""" + +from PIL import Image +import os + +BASE = '/Users/wushu/Documents/trae_projects/project/xianyan' + +# iOS icons +ios_dir = os.path.join(BASE, 'ios/Runner/Assets.xcassets/AppIcon.appiconset') +print('=== iOS Runner AppIcon ===') +for f in sorted(os.listdir(ios_dir)): + if f.endswith('.png'): + img = Image.open(os.path.join(ios_dir, f)) + print(f' {f}: {img.size[0]}x{img.size[1]}') + +# iOS Widget icons +widget_dir = os.path.join(BASE, 'ios/XianyanWidget/Assets.xcassets/AppIcon.appiconset') +print('\n=== iOS Widget AppIcon ===') +for f in sorted(os.listdir(widget_dir)): + if f.endswith('.png'): + img = Image.open(os.path.join(widget_dir, f)) + print(f' {f}: {img.size[0]}x{img.size[1]}') + +# macOS icons +macos_dir = os.path.join(BASE, 'macos/Runner/Assets.xcassets/AppIcon.appiconset') +print('\n=== macOS AppIcon ===') +for f in sorted(os.listdir(macos_dir)): + if f.endswith('.png'): + img = Image.open(os.path.join(macos_dir, f)) + print(f' {f}: {img.size[0]}x{img.size[1]}') + +# Android icons +print('\n=== Android mipmap ===') +for density in ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi']: + d = os.path.join(BASE, f'android/app/src/main/res/mipmap-{density}') + if os.path.exists(d): + for f in os.listdir(d): + if f.endswith('.png'): + img = Image.open(os.path.join(d, f)) + print(f' mipmap-{density}/{f}: {img.size[0]}x{img.size[1]}') + +# OHOS icons +print('\n=== OHOS icons ===') +ohos_paths = [ + 'ohos/AppScope/resources/base/media/app_icon.png', + 'ohos/AppScope/resources/base/media/foreground_icon.png', + 'ohos/entry/src/main/resources/base/media/icon.png', + 'ohos/entry/src/main/resources/base/media/foreground_icon.png', +] +for p in ohos_paths: + full = os.path.join(BASE, p) + if os.path.exists(full): + img = Image.open(full) + print(f' {p}: {img.size[0]}x{img.size[1]}') + else: + print(f' {p}: NOT FOUND') diff --git a/tools/replace_platform_icons.py b/tools/replace_platform_icons.py new file mode 100644 index 00000000..b071a501 --- /dev/null +++ b/tools/replace_platform_icons.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python3 +""" +Created: 2026-06-02 +Updated: 2026-06-02 +Name: replace_platform_icons.py +Desc: Replace app icons for iOS, macOS, Android, OHOS platforms + using processed icons from assets/templates/resized folder. + Original icons are backed up before replacement. +""" + +import os +import shutil +from PIL import Image + +BASE = '/Users/wushu/Documents/trae_projects/project/xianyan' +SOURCE_DIR = os.path.join(BASE, 'assets/templates/resized') +BACKUP_ROOT = os.path.join(BASE, 'assets/templates/backup_platform_icons') + + +def get_source_icon(size): + """Get source icon path for a given pixel size.""" + filename = f'icon_{size}x{size}.png' + path = os.path.join(SOURCE_DIR, filename) + if os.path.exists(path): + return path + print(f" WARNING: Source icon {filename} not found!") + return None + + +def backup_and_replace(target_path, source_path): + """Backup original icon and replace with new one.""" + if not os.path.exists(target_path): + print(f" SKIP: Target not found: {target_path}") + return False + + # Create backup path maintaining directory structure + rel_path = os.path.relpath(target_path, BASE) + backup_path = os.path.join(BACKUP_ROOT, rel_path) + backup_dir = os.path.dirname(backup_path) + os.makedirs(backup_dir, exist_ok=True) + + # Backup if not already backed up + if not os.path.exists(backup_path): + shutil.copy2(target_path, backup_path) + + # Copy source to target + shutil.copy2(source_path, target_path) + + # Verify + new_img = Image.open(target_path) + src_img = Image.open(source_path) + if new_img.size == src_img.size: + return True + else: + print(f" ERROR: Size mismatch after copy! {new_img.size} vs {src_img.size}") + return False + + +def replace_ios_runner(): + """Replace iOS Runner app icons.""" + print("\n=== iOS Runner AppIcon ===") + ios_dir = os.path.join(BASE, 'ios/Runner/Assets.xcassets/AppIcon.appiconset') + + # Mapping: target_filename -> source_pixel_size + mapping = { + 'Icon-App-1024x1024@1x.png': 1024, + 'Icon-App-20x20@1x.png': 20, + 'Icon-App-20x20@2x.png': 40, + 'Icon-App-20x20@3x.png': 60, + 'Icon-App-29x29@1x.png': 29, + 'Icon-App-29x29@2x.png': 58, + 'Icon-App-29x29@3x.png': 87, + 'Icon-App-40x40@1x.png': 40, + 'Icon-App-40x40@2x.png': 80, + 'Icon-App-40x40@3x.png': 120, + 'Icon-App-60x60@2x.png': 120, + 'Icon-App-60x60@3x.png': 180, + 'Icon-App-76x76@1x.png': 76, + 'Icon-App-76x76@2x.png': 152, + 'Icon-App-83.5x83.5@2x.png': 167, + } + + count = 0 + for target_name, size in mapping.items(): + source = get_source_icon(size) + if source: + target = os.path.join(ios_dir, target_name) + if backup_and_replace(target, source): + print(f" OK: {target_name} <- icon_{size}x{size}.png") + count += 1 + print(f" Replaced: {count}/{len(mapping)}") + return count + + +def replace_ios_widget(): + """Replace iOS Widget app icon.""" + print("\n=== iOS Widget AppIcon ===") + widget_dir = os.path.join(BASE, 'ios/XianyanWidget/Assets.xcassets/AppIcon.appiconset') + + mapping = { + 'Icon-App-1024x1024.png': 1024, + } + + count = 0 + for target_name, size in mapping.items(): + source = get_source_icon(size) + if source: + target = os.path.join(widget_dir, target_name) + if backup_and_replace(target, source): + print(f" OK: {target_name} <- icon_{size}x{size}.png") + count += 1 + print(f" Replaced: {count}/{len(mapping)}") + return count + + +def replace_macos(): + """Replace macOS app icons.""" + print("\n=== macOS AppIcon ===") + macos_dir = os.path.join(BASE, 'macos/Runner/Assets.xcassets/AppIcon.appiconset') + + mapping = { + 'app_icon_16.png': 16, + 'app_icon_32.png': 32, + 'app_icon_64.png': 64, + 'app_icon_128.png': 128, + 'app_icon_256.png': 256, + 'app_icon_512.png': 512, + 'app_icon_1024.png': 1024, + } + + count = 0 + for target_name, size in mapping.items(): + source = get_source_icon(size) + if source: + target = os.path.join(macos_dir, target_name) + if backup_and_replace(target, source): + print(f" OK: {target_name} <- icon_{size}x{size}.png") + count += 1 + print(f" Replaced: {count}/{len(mapping)}") + return count + + +def replace_android(): + """Replace Android launcher icons.""" + print("\n=== Android mipmap ===") + res_dir = os.path.join(BASE, 'android/app/src/main/res') + + # Android density -> pixel size + mapping = { + 'mipmap-mdpi': 48, + 'mipmap-hdpi': 72, + 'mipmap-xhdpi': 96, + 'mipmap-xxhdpi': 144, + 'mipmap-xxxhdpi': 192, + } + + count = 0 + for density, size in mapping.items(): + source = get_source_icon(size) + if source: + target = os.path.join(res_dir, density, 'ic_launcher.png') + if backup_and_replace(target, source): + print(f" OK: {density}/ic_launcher.png <- icon_{size}x{size}.png") + count += 1 + print(f" Replaced: {count}/{len(mapping)}") + return count + + +def replace_ohos(): + """Replace OHOS (HarmonyOS) app icons.""" + print("\n=== OHOS icons ===") + + # All OHOS icons are 1024x1024 + paths = [ + 'ohos/AppScope/resources/base/media/app_icon.png', + 'ohos/AppScope/resources/base/media/foreground_icon.png', + 'ohos/entry/src/main/resources/base/media/icon.png', + 'ohos/entry/src/main/resources/base/media/foreground_icon.png', + ] + + source = get_source_icon(1024) + count = 0 + if source: + for rel_path in paths: + target = os.path.join(BASE, rel_path) + if backup_and_replace(target, source): + print(f" OK: {rel_path} <- icon_1024x1024.png") + count += 1 + print(f" Replaced: {count}/{len(paths)}") + return count + + +def main(): + os.makedirs(BACKUP_ROOT, exist_ok=True) + print(f"Source: {SOURCE_DIR}") + print(f"Backup: {BACKUP_ROOT}") + + total = 0 + total += replace_ios_runner() + total += replace_ios_widget() + total += replace_macos() + total += replace_android() + total += replace_ohos() + + print(f"\n{'='*60}") + print(f"Total icons replaced: {total}") + print(f"Backup location: {BACKUP_ROOT}") + print("Done!") + + +if __name__ == '__main__': + main()