Skip to content

Instantly share code, notes, and snippets.

@matiaskorhonen
Last active August 24, 2022 01:24
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matiaskorhonen/40d46b122f061420787dde414b238260 to your computer and use it in GitHub Desktop.
Save matiaskorhonen/40d46b122f061420787dde414b238260 to your computer and use it in GitHub Desktop.
A rough Crouton (https://crouton.app) to Mela (https://mela.recipes) recipe converter. The imported recipes may require some clean-up…
#!/usr/bin/env ruby
require "bundler/inline"
gemfile do
source "https://rubygems.org"
gem "tty-logger", "~> 0.6"
gem "pry"
gem "dotiw"
end
require "json"
require "uri"
include DOTIW::Methods
logger = TTY::Logger.new
crumbs = Dir.glob("./crouton/*.crumb")
crumbs.each do |file|
logger.info "Processing #{file}"
crumb = JSON.parse(File.read(file))
uri = URI.parse(crumb["webLink"])
totalTime = crumb["duration"].to_i + crumb["cookingDuration"].to_i
mela = {
id: "#{uri.host}#{uri.path.gsub(/\/\z/, "")}",
title: crumb["name"],
categories: [],
nutrition: "",
favorite: false,
link: crumb["webLink"],
prepTime: crumb["duration"].to_i > 0 ? distance_of_time(crumb["duration"]*60) : "",
totalTime: totalTime > 0 ? distance_of_time(totalTime*60) : "",
date: Time.now.to_i - 978307200,
images: crumb["images"],
wantToCook: false,
ingredients: crumb["ingredients"].map { |ingredient|
amount = ingredient.dig("quantity", "amount")
unit = case ingredient.dig("quantity", "quantityType")&.downcase
when "grams"
"g"
when "kgs"
"kg"
when "litres"
"l"
when "mills"
"ml"
when "teaspoon"
"tsp"
when "tablespoon"
"tbsp"
when "cup"
"cups"
when "pound"
"lb"
when "ounce"
"oz"
when "pinches"
"pinch"
when "section"
"#"
when nil, "item"
nil
else
raise "Unknown unit: #{ingredient.dig("quantity", "quantityType").inspect}"
end
name = ingredient.dig("ingredient", "name").downcase
amount_and_unit = if %w(g kg ml l lb oz).include?(unit)
[amount, unit].compact.join
elsif amount.nil? && unit.nil?
nil
else
[amount, unit].compact.join(" ")
end
[amount_and_unit, name].compact.join(" ")
}.join("\n"),
text: "",
instructions: crumb["steps"].map { |step| step["step"] }.join("\n"),
notes: crumb["notes"]
}
File.write("./mela/#{File.basename(file, ".*")}.melarecipe", JSON.pretty_generate(mela))
end
# Mela format:
#
# {
# "id": "rasamalaysia.com/asian-cucumber-salad",
# "categories": [],
# "nutrition": "**Serving size** 2 people\n**Calories** 95 calories\n**Fat** 3.9 grams fat\n**Saturated fat** 0.6 grams saturated fat\n**Sodium** 889 grams sodium\n**Carbohydrates** 16.2 grams carbohydrates\n**Fiber** 1.3 grams fiber\n**Sugar** 11.6 grams sugar\n**Protein** 1.3 grams protein",
# "favorite": false,
# "link": "https://rasamalaysia.com/asian-cucumber-salad/",
# "totalTime": "20min",
# "title": "Asian Cucumber Salad",
# "notes": "",
# "date": 651490594.572202,
# "ingredients": "1 cucumber (about 225 g)\n3/4 teaspoon salt or to taste\n2 cloves garlic, minced\n1 teaspoon apple cider vinegar\n1 1/2 tablespoons sugar\n1 teaspoon Korean chili powder or regular chili powder\n1 teaspoon chili oil\n1/2 teaspoon sesame oil\nsesame seeds for garnishing",
# "text": "Asian Cucumber Salad – healthy cucumber salad with Asian spices. So refreshing and easy. A perfect appetizer for any meals!",
# "prepTime": "5min",
# "images": ["base64 images""],
# "wantToCook": false,
# "instructions": "Rinse the cucumber thoroughly and slice it into pieces. Add the salt to the cucumber, stir gently to combine well. Chill in the refrigerator for 15 minutes.\nCombine the garlic, vinegar, sugar, chili powder, chili oil, and sesame oil together, stir to mix well. Make sure that the sugar is completely dissolved.\nDrain the salt water from the cucumber. Add the dressing to the cucumber, toss well. Top with sesame seeds and serve immediately."
# }
# Crouton format:
#
# {
# "serves": 2,
# "folderIDs": [],
# "ingredients": [
# {
# "quantity": {
# "amount": 225,
# "quantityType": "GRAMS"
# },
# "ingredient": {
# "name": "Cucumber",
# "uuid": "9B4B7DF5-64E6-4171-88E0-1C29A938D253"
# },
# "order": 0,
# "uuid": "A3914182-15E4-4D09-AE37-A2DAA10E534B"
# },
# {
# "quantity": {
# "amount": 1,
# "quantityType": "TEASPOON"
# },
# "ingredient": {
# "name": "Chili oil",
# "uuid": "0C216EAD-A361-40F8-BC3C-4D6B21ED2265"
# },
# "order": 1,
# "uuid": "CC6EE54E-2DB0-4A03-819A-B2BE815B430C"
# },
# {
# "quantity": {
# "amount": 2,
# "quantityType": "ITEM"
# },
# "ingredient": {
# "name": "Cloves garlic, minced",
# "uuid": "2748943A-7E97-4538-988E-80D77388D146"
# },
# "order": 2,
# "uuid": "74755E17-DA10-4CCC-A3DB-53186063540F"
# }
# ],
# "webLink": "https://rasamalaysia.com/asian-cucumber-salad/",
# "steps": [
# {
# "step": "Rinse the cucumber thoroughly and slice it into pieces. Add the salt to the cucumber, stir gently to combine well. Chill in the refrigerator for 15 minutes.",
# "order": 0,
# "uuid": "22923C03-9CEB-415E-BF1B-C101A384623A"
# },
# {
# "step": "Combine the garlic, vinegar, sugar, chili powder, chili oil, and sesame oil together, stir to mix well. Make sure that the sugar is completely dissolved.",
# "order": 1,
# "uuid": "BE6CE7E5-DD74-4852-9CB8-293D55CE9400"
# },
# {
# "step": "Drain the salt water from the cucumber. Add the dressing to the cucumber, toss well. Top with sesame seeds and serve immediately.",
# "order": 2,
# "uuid": "FE7BEC18-761B-425F-9622-4392DD7A674B"
# }
# ],
# "images": [
# "base64 images"
# ],
# "uuid": "F5A15C33-A664-4E5C-BD24-93803AD37EE7",
# "duration": 5,
# "cookingDuration": 15,
# "name": "Asian Cucumber Salad"
# }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment