ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Tandoor 相关工具与生态导览:recipe-scrapers 深度集成与周边应用盘点

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),仅供参考
返回列表