尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Tandoor 相关工具与生态导览:recipe-scrapers 深度集成与周边应用盘点
Tandoor 相关工具与生态导览recipe-scrapers 深度集成与周边应用盘点【免费下载链接】recipesApplication for managing recipes, planning meals, building shopping lists and much much more!项目地址: https://gitcode.com/GitHub_Trending/re/recipes本文聚焦 Tandoor当前仓库与外部生态工具的关系一方面深入剖析 Tandoor 对第三方配方抓取库recipe-scrapers的源码级集成方式URL 导入的核心链路、字段映射与测试保障另一方面系统盘点围绕 Tandoor 衍生的非官方移动客户端kitshn、Untare、AI 配方导入工具GPT Recipe、菜单生成器Tandoor Menu Generator以及自动化膳食规划工具Morsl。读完本文你将清楚 Tandoor 的配方抓取功能是如何借用社区力量实现的也能全面了解官方仓库之外有哪些值得关注的下游工具。1. Recipe ScraperTandoor 抓取能力的基石docs/contribute/related.md明确指出虽然 recipe-scrapers 与 Tandoor 本身没有直接开发关系但 Tandoor大量使用了 hhursev 维护的recipe-scrapers包。这个包的价值在于它把从世界各地食谱网站提取结构化配方数据这一繁琐工作抽象为统一接口Tandoor 只需要消费它输出的规范化对象即可。1.1 依赖版本与使用范围当前仓库在 requirements.txt 中固定了该依赖版本recipe-scrapers15.12.0recipe_scrapers符号出现在仓库多处构成完整的抓取-转换-落库链路cookbook/helper/recipe_url_import.py核心转换逻辑把抓取对象转为 Tandoor 内部 JSONcookbook/views/api.pyURL 导入 API 端点api_recipe_from_source负责发起 HTTP 请求并调用scrape_htmlcookbook/integration/cooklang.py 与 cookbook/integration/gourmet.py其他导入路径同样复用了recipe_scrapers的工具函数cookbook/tests/other/test_url_import.py针对 15 个真实网站的回归测试。1.2 核心转换函数get_from_scraperrecipe-scrapers返回的Scraper对象提供的是面向抓取网站的接口title()、ingredients()、instructions_list()、image()、prep_time()等。Tandoor 通过 get_from_scraper(scrape, request) 将这些方法逐一映射为 Tandoor 自身的配方 JSON 结构recipe_json其字段映射关系如下Tandoor 内部字段抓取对象来源回退逻辑source_urlscrape.canonical_url()失败时回退scrape.urlhttps://urlnotfound.none时置空namescrape.title()截断 128 字符回退scrape.schema.data.get(name)descriptionscrape.description()回退 schema 中的description并截断为 512 字符servings/servings_textscrape.schema.data.get(recipeYield)通过正则提取数字working_time/waiting_timescrape.prep_time()/scrape.cook_time()回退 schema 的prepTime/cookTime二者为 0 时尝试total_time()image_urlscrape.image()回退 schema 的image仅接受http开头的 URLkeywordsschema 的keywords、category()、cuisine()、author()统一大小写去重后写入stepsscrape.instructions_list()逐条清洗失败则保留空步骤ingredientsscrape.ingredients()交由IngredientParser解析出数量/单位/食材/备注值得注意的实现细节自动化引擎介入名称、描述、指令都会经过AutomationEngine.apply_regex_replace_automation(...)也就是说用户配置的自动化规则如名称正则替换在抓取阶段即可生效见 recipe_url_import.py。营养信息映射get_recipe_properties()会把 schema 中的calories、carbohydrateContent、proteinContent、fatContent按开放数据 slugproperty-calories等匹配到空间的属性类型上换算为单位份量的营养值见 recipe_url_import.py。Thermomix 特殊字符处理clean_instruction_string()专门处理 Cookidoo、Rezeptwelt 等 Thermomix 系网站指令中出现的私有 Unicode 字符如反向搅拌、慢炖、揉面等逐个替换为可读文本见 recipe_url_import.py。1.3 URL 导入端点的调用链路在 cookbook/views/api.py 的api_recipe_from_source视图中scrape_html是抓取入口。整个流程可概括为接收url与可选data原始 HTML/JSON 字符串也可通过bookmarklet参数间接注入 URL 与 HTMLYouTube 特判URL 匹配youtube.com/youtu.be时改走get_from_youtube_scraper()使用pytubefix提取标题、缩略图与描述Tandoor 站间导入特判URL 形如/recipe/id/?shareuuid或/view/recipe/id/uuid时改写为/api/recipe/路径并携带 share 参数走标准 API 导入常规网站抓取以safe_request(GET, url)拉取 HTML请求头携带User-Agent优先透传浏览器 UA与Accept头响应非 2xx 时返回 400 与状态码提示调用scrape_html(org_urlurl, htmlhtml, supported_onlyFalse)—— 注意supported_onlyFalse允许对未收录的网站启用通配模式wild mode捕获NoSchemaFoundInWildMode若通配模式也找不到 schema则静默跳过最终返回没有可用数据错误导入纯 JSON 时代码会把缺失的context/type补全为schema.org/Recipe包进script typeapplication/ldjson后再交给scrape_html抓取成功后在响应中附带images来自get_images_from_soup()处理相对路径与//协议相对 URL和duplicates同source_url的已有配方提示。1.4 测试如何保障抓取质量cookbook/tests/other/test_url_import.py 从相似网站排行榜与历史缺陷中挑选了 15 个代表性网站Allrecipes、Americas Test Kitchen、Chefkoch、Cookpad、Food Network、Giallo Zafferano、Marmiton、The Spruce Eats 等将每个站点的真实 HTML 快照保存在cookbook/tests/other/test_data/下参数化执行test_recipe_importPOST 到api_recipe_from_source再用validate_recipe校验转换后的配方 JSON。测试注释还标注了选样意图例如 Chefkoch2 用于验证空食材处理、Madame Dessert 是纯 JSON 源、The Spruce Eats 是非 JSON 源的代表。另有test_url_import_returns_error_on_non_ok_response验证非 2xx 响应返回 400、test_url_import_sends_accept_header验证请求携带Accept头。由此可以推断只要 recipe-scrapers 社区持续新增站点、修复解析器Tandoor 的 URL 导入能力就会同步受益——这正是相关文档所说你有能力新增站点或协助解决 issues就是在间接帮助 Tandoor的技术含义。2. 非官方移动客户端kitshnkitshn是 Aimo 维护的非官方 Tandoor 客户端Unofficial Tandoor recipes client是目前文档重点推荐的移动端方案。定位在手机和平板上访问 Tandoor 配方库的第三方客户端官方入口项目官网 kitshn.app分发渠道覆盖 Apple App Store应用名 kitshn for Tandoor与 Google Play包名de.kitshn.android使用建议如果你主要使用移动设备管理配方可以在安装后按官方说明填入自建 Tandoor 实例地址完成对接。3. 非官方移动客户端Untare已停止维护Untare由 phantomate 维护同样是非官方 Tandoor 客户端曾提供 iPhone 与 Android 两个平台的安装入口。文档明确标注其为discontinued已停止维护因此新用户不应再将其作为首选方案历史用户如遇到兼容性问题建议迁移到仍在活跃维护的 kitshn这一条目也提示了一个现实第三方生态工具的生命周期需要在使用前自行评估维护活跃度。4. GPT Recipe图片配方转结构化数据GPT Recipe由 John Pedrie 维护解决的是纸质/截图配方数字化场景通过 ChatGPT 将配方图片转换为可直接导入 Tandoor 的结构化数据。这与 Tandoor 仓库内的 AI 导入能力方向一致——在 cookbook/views/api.py 的AiImportView中同样支持给定图片或 PDF 文件利用 AI 与抓取系统转换出结构化配方AiImportSerializerAiEndpointThrottle限流。区别在于GPT Recipe 是独立于仓库运行的社区工具由用户在外部发起转换AiImportView是 Tandoor 服务端原生端点要求空间启用 AI 功能并具备相应权限。两者可以互为补充不依赖 Tandoor AI 配置的用户可选用 GPT Recipe而希望在服务端一体化处理的用户可直接使用内置 AI 导入接口。5. Tandoor Menu Generator基于复杂条件的菜单生成Tandoor Menu Generator由 smilerz 维护核心能力是依据复杂筛选条件如评分、收藏、标签、最近烹饪记录等自动生成一周/一月的膳食计划可选将生成的菜单插入 SVG 菜单模板输出可直接打印或分享的菜单图片。该工具与 Tandoor 的 Meal Plan膳食计划与 Meal Type 概念天然衔接适合有固定饮食结构、希望自动化排餐的家庭用户。使用时需要在 Tandoor 中预先维护好配方标签、评分与收藏等元数据筛选条件才能发挥作用。6. Morsl自动化膳食规划与家庭共享菜单Morsl由 featurecreep-cron 维护是文档收录的最新工具面向想彻底托管排餐流程的用户档案式筛选规则可基于评分、食谱书、标签、最近烹饪记录等维度建立多个过滤档案profiles自动生成按档案规则自动产出膳食计划并直接同步回 Tandoor的 Meal Plan家庭共享生成可分享的菜单供家庭成员共同查看。与 Tandoor Menu Generator 相比Morsl 强调持续自动化 同步回写适合希望每周零干预获得排餐结果的场景而 Menu Generator 更偏向一次性生成并导出美观菜单。7. 生态地图小结工具类型维护状态主要能力recipe-scrapers抓取库Tandoor 内置依赖活跃社区驱动数百个食谱网站的配方结构化抓取kitshn移动客户端活跃iOS/Android 访问 Tandoor 配方库Untare移动客户端已停止维护历史 iOS/Android 客户端GPT RecipeAI 辅助导入社区工具配方图片 → 可导入结构化数据Tandoor Menu Generator菜单生成社区工具复杂条件排餐 SVG 菜单模板导出Morsl排餐自动化社区工具档案化筛选、自动生成并同步 Meal Plan、家庭共享菜单如果你希望为 Tandoor 生态做贡献最直接的入口仍然是 recipe-scrapers在该库中新增站点支持或修复解析 bug会通过 get_from_scraper 这条经过 测试 保障的链路间接惠及所有 Tandoor 用户。【免费下载链接】recipesApplication for managing recipes, planning meals, building shopping lists and much much more!项目地址: https://gitcode.com/GitHub_Trending/re/recipes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

VMD最佳模态数怎么选?基于中心频率相近原则的MATLAB自动定阶法

VMD最佳模态数怎么选?基于中心频率相近原则的MATLAB自动定阶法

简介:VMD(变分模态分解)算法是信号处理与故障诊断中的常用分解工具,这份资源面向使用MATLAB开展模态分解、中心频率分析的研究者与工程师,重点解决VMD分解阶数难以确定的问题——通过观察各模态中心频率的相近程度&…

📅 2026/9/16 12:48:18
MATLAB实现极化码CA-SCL译码器的完整指南

MATLAB实现极化码CA-SCL译码器的完整指南

简介:本资源为极化码在高斯信道下CA-SCL译码算法的完整MATLAB仿真实现,面向电子信息工程、计算机与数学等专业的本科生及研究生,适用于课程设计、期末大作业与毕业设计等实践环节。代码基于参数化编程思想构建,支持灵活调整码长、…

📅 2026/9/16 12:43:17
微信小程序连连看开发:Canvas状态驱动与触控反馈实现

微信小程序连连看开发:Canvas状态驱动与触控反馈实现

简介:本资源是一套基于微信小程序平台开发的连连看休闲游戏完整源码,面向前端初学者与小程序开发者,旨在提供可直接运行、便于理解与二次开发的游戏实践范例。压缩包共21个文件,含6个JavaScript逻辑文件(实现匹配算法、…

📅 2026/9/16 12:43:17
MORE NEWS

更多资讯

📰

STM32F767与lwIP网络移植全解析:从HAL库ETH到TCP调优

简介:面向STM32F7系列单片机开发者,这套资料以STM32F767为例,演示基于HAL库的TCP网络通信实现。内容覆盖以太网MAC/PHY硬件初始化、lwIP协议栈移植、TCP套接字创建与收发数据等关键环节,并配有Lan8720等常见PHY芯片的配置思路&…

📰

Karpenter 监控 Amazon EC2 API 用量与节流实践指南

Karpenter 监控 Amazon EC2 API 用量与节流实践指南 【免费下载链接】karpenter-provider-aws Karpenter is a Kubernetes Node Autoscaler built for flexibility, performance, and simplicity. 项目地址: https://gitcode.com/GitHub_Trending/ka/karpenter-provider-aws …

📰

LifeOS WriteStory 技能中的 Storr 叙事科学框架:神圣缺陷、控制理论与戏剧性问题的完整实战指南

LifeOS WriteStory 技能中的 Storr 叙事科学框架:神圣缺陷、控制理论与戏剧性问题的完整实战指南 【免费下载链接】LifeOS ⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in lif…

📰

Marin评估系统架构完全设计:从45份Serving配置到数据迁移机制

Marin评估系统架构完全设计:从45份Serving配置到数据迁移机制 【免费下载链接】marin Open-source framework for the research and development of foundation models. 项目地址: https://gitcode.com/GitHub_Trending/ma/marin Marin 是一个面向基础模型研…

📰

Shaka Player 模糊语言匹配(Fuzzy Locale Matching)机制解析:从设计策略到源码实现

Shaka Player 模糊语言匹配(Fuzzy Locale Matching)机制解析:从设计策略到源码实现 【免费下载链接】shaka-player JavaScript player library / DASH & HLS client / MSE-EME player 项目地址: https://gitcode.com/GitHub_Trending/s…

📰

STC15单片机超声波测距OLED显示实战:从原理到原理图设计

简介:这份面向STC15单片机初学者的超声波测距项目,集成了测距算法、OLED显示与硬件原理图,适用于嵌入式课程设计、竞赛备赛或实际避障模块开发,也可作为毕业设计参考。方案基于IAP15系列8051内核MCU,通过HC-SR04类超声…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬