Repository: hhursev/recipe-scrapers
Pull request #888 (2023-10-05 10:42:30)

Maintenance: add py3.12 to unittest matrix
:tada: [Python 3.12 was released on 2023-10-02](https://pythoninsider.blogspot.com/2023/10/python-3120-final-now-available.html) - let's add it to our continuous integration test matrix when possible.

Currently I expect that the `unittest` workflow will fail due to the [removal of the `imp` module from Python 3.12](https://docs.python.org/3/whatsnew/3.12.html#imp), a dependency of the current latest version of [`pyrdfa3`](https://pypi.org/project/pyRdfa3/) (v3.5.3, uploaded to PyPi on 2019-05-10), a transitive dependency that is required through our dependency on `extruct`.

~~Work has already been merged to [remove the `imp` module dependency from `pyrdfa3`](https://github.com/RDFLib/pyrdfa3/commit/d4b91f81d75150abaa8587f93d53dc7130e09f6a), however this is not yet available in a released version of that library.~~  An updated v3.6.2 release of `pyrdfa3` has been made available that no longer has a dependency on the Python `imp` module.

Related:

  * https://github.com/RDFLib/pyrdfa3/issues/37
  * https://github.com/scrapinghub/extruct/issues/158


Patch:
diff --git a/README.rst b/README.rst
index 2f7e90d3..3ff04cb6 100644
--- a/README.rst
+++ b/README.rst
@@ -56,8 +56,9 @@ then:
     scraper.yields()
     scraper.to_json()
     scraper.links()
-    scraper.nutrients()  # if available
-    scraper.canonical_url()  # also not always available
+    scraper.nutrients()  # not always available
+    scraper.canonical_url()  # not always available
+    scraper.equipment()  # not always available
 
 You also have an option to scrape html-like content
 
@@ -302,6 +303,7 @@ Scrapers available for:
 - `https://rainbowplantlife.com/ <https://rainbowplantlife.com/>`_
 - `https://realfood.tesco.com/ <https://realfood.tesco.com>`_
 - `https://realsimple.com/ <https://www.realsimple.com>`_
+- `https://recept.se/ <https://recept.se/>`_
 - `https://www.receitasnestle.com.br <https://www.receitasnestle.com.br>`_
 - `https://reciperunner.com/ <https://www.reciperunner.com>`_
 - `https://recipetineats.com/ <https://www.recipetineats.com/>`_
diff --git a/docs/in-depth-guide-scraper-functions.md b/docs/in-depth-guide-scraper-functions.md
index 82ed2be0..22249648 100644
--- a/docs/in-depth-guide-scraper-functions.md
+++ b/docs/in-depth-guide-scraper-functions.md
@@ -304,3 +304,12 @@ scraper.ratings()
 ### `reviews() -> List[Dict[str, str]]`
 
 Returns a `list` of reviews about the recipe from the website. Each review is a `dict` containing the reviewer's name (`str`) and their review (`str`).
+
+### `equipment() -> List[str] | None`
+
+Returns a list of cooking equipment needed for provided recipe.
+
+```py
+>>> scraper.equipment()
+['Mixing Bowl', 'Whisk', 'Baking Tray']
+```
diff --git a/recipe_scrapers/__init__.py b/recipe_scrapers/__init__.py
index 9027eb35..1c87330b 100644
--- a/recipe_scrapers/__init__.py
+++ b/recipe_scrapers/__init__.py
@@ -214,6 +214,7 @@ from .rainbowplantlife import RainbowPlantLife
 from .realfoodtesco import RealFoodTesco
 from .realsimple import RealSimple
 from .receitasnestlebr import ReceitasNestleBR
+from .recept import Recept
 from .reciperunner import RecipeRunner
 from .recipetineats import RecipeTinEats
 from .redhousespice import RedHouseSpice
@@ -370,6 +371,7 @@ SCRAPERS = {
     MundoDeReceitasBimby.host(): MundoDeReceitasBimby,
     NutritionFacts.host(): NutritionFacts,
     PinchOfYum.host(): PinchOfYum,
+    Recept.host(): Recept,
     RicettePerBimby.host(): RicettePerBimby,
     StrongrFastr.host(): StrongrFastr,
     ThePalatableLife.host(): ThePalatableLife,
diff --git a/recipe_scrapers/__version__.py b/recipe_scrapers/__version__.py
index d6bf134f..065633e8 100644
--- a/recipe_scrapers/__version__.py
+++ b/recipe_scrapers/__version__.py
@@ -1,1 +1,1 @@
-__version__ = "14.53.0"
+__version__ = "14.54.0"
diff --git a/recipe_scrapers/_abstract.py b/recipe_scrapers/_abstract.py
index 2bac3d5d..4d31d987 100644
--- a/recipe_scrapers/_abstract.py
+++ b/recipe_scrapers/_abstract.py
@@ -53,7 +53,7 @@ class AbstractScraper:
 
         # attach the plugins as instructed in settings.PLUGINS
         if not hasattr(self.__class__, "plugins_initialized"):
-            for name, func in inspect.getmembers(self, inspect.ismethod):
+            for name, _ in inspect.getmembers(self, inspect.ismethod):
                 current_method = getattr(self.__class__, name)
                 for plugin in reversed(settings.PLUGINS):
                     if plugin.should_run(self.host(), name):
@@ -164,6 +164,9 @@ class AbstractScraper:
     def reviews(self):
         raise NotImplementedError("This should be implemented.")
 
+    def equipment(self):
+        raise NotImplementedError("This should be implemented.")
+
     def links(self):
         invalid_href = {"#", ""}
         links_html = self.soup.findAll("a", href=True)
diff --git a/recipe_scrapers/_utils.py b/recipe_scrapers/_utils.py
index 6434c23b..4b9a3e20 100644
--- a/recipe_scrapers/_utils.py
+++ b/recipe_scrapers/_utils.py
@@ -171,6 +171,17 @@ def get_yields(element):
     return "{} serving{}".format(matched, "" if int(matched) == 1 else "s")
 
 
+def get_equipment(equipment_items):
+    # Removes duplicates from results and sorts them in order they appear on site.
+    seen = set()
+    unique_equipment = []
+    for item in equipment_items:
+        if item not in seen:
+            seen.add(item)
+            unique_equipment.append(item)
+    return unique_equipment
+
+
 def normalize_string(string):
     # Convert all named and numeric character references (e.g. &gt;, &#62;)
     unescaped_string = html.unescape(string)
diff --git a/recipe_scrapers/addapinch.py b/recipe_scrapers/addapinch.py
index 54277d49..e1d74c87 100644
--- a/recipe_scrapers/addapinch.py
+++ b/recipe_scrapers/addapinch.py
@@ -49,3 +49,14 @@ class AddAPinch(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        return list(
+            dict.fromkeys(
+                (equip.find("a").get_text())
+                for equip in self.soup.find_all(
+                    "div", class_="wprm-recipe-equipment-name"
+                )
+                if equip.find("a") and equip.find("a").get_text()
+            )
+        )
diff --git a/recipe_scrapers/altonbrown.py b/recipe_scrapers/altonbrown.py
index 8828ed67..d5629560 100644
--- a/recipe_scrapers/altonbrown.py
+++ b/recipe_scrapers/altonbrown.py
@@ -48,3 +48,13 @@ class AltonBrown(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        return list(
+            dict.fromkeys(
+                (equip.get_text())
+                for equip in self.soup.find_all(
+                    "div", class_="wprm-recipe-equipment-name"
+                )
+            )
+        )
diff --git a/recipe_scrapers/amazingribs.py b/recipe_scrapers/amazingribs.py
index 7c9c7713..065d86a8 100644
--- a/recipe_scrapers/amazingribs.py
+++ b/recipe_scrapers/amazingribs.py
@@ -2,6 +2,7 @@
 
 from ._abstract import AbstractScraper
 from ._grouping_utils import group_ingredients
+from ._utils import get_equipment, normalize_string
 
 
 class AmazingRibs(AbstractScraper):
@@ -34,3 +35,10 @@ class AmazingRibs(AbstractScraper):
 
     def instructions(self):
         return self.schema.instructions()
+
+    def equipment(self):
+        equipment_items = [
+            normalize_string(e.get_text())
+            for e in self.soup.find_all("div", class_="wprm-recipe-equipment-name")
+        ]
+        return sorted(get_equipment(equipment_items))
diff --git a/recipe_scrapers/bakingsense.py b/recipe_scrapers/bakingsense.py
index 8725f513..8609c770 100644
--- a/recipe_scrapers/bakingsense.py
+++ b/recipe_scrapers/bakingsense.py
@@ -1,6 +1,7 @@
 # mypy: disallow_untyped_defs=False
 from ._abstract import AbstractScraper
 from ._grouping_utils import group_ingredients
+from ._utils import get_equipment
 
 
 class BakingSense(AbstractScraper):
@@ -45,3 +46,11 @@ class BakingSense(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        equipment_items = [
+            equip.get_text()
+            for equip in self.soup.find_all("div", class_="wprm-recipe-equipment-name")
+            if equip.get_text()
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/bowlofdelicious.py b/recipe_scrapers/bowlofdelicious.py
index 5f4bc0c7..06f6f078 100644
--- a/recipe_scrapers/bowlofdelicious.py
+++ b/recipe_scrapers/bowlofdelicious.py
@@ -1,5 +1,6 @@
 # mypy: disallow_untyped_defs=False
 from ._abstract import AbstractScraper
+from ._utils import get_equipment
 
 
 class BowlOfDelicious(AbstractScraper):
@@ -30,3 +31,12 @@ class BowlOfDelicious(AbstractScraper):
 
     def ratings(self):
         return self.schema.ratings()
+
+    def equipment(self):
+        equipment_items = [
+            link.get_text()
+            for link in self.soup.select(
+                "div.wprm-recipe-equipment-name a.wprm-recipe-equipment-link"
+            )
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/budgetbytes.py b/recipe_scrapers/budgetbytes.py
index d9126b93..741318b9 100644
--- a/recipe_scrapers/budgetbytes.py
+++ b/recipe_scrapers/budgetbytes.py
@@ -1,6 +1,7 @@
 # mypy: disallow_untyped_defs=False
 from ._abstract import AbstractScraper
 from ._grouping_utils import group_ingredients
+from ._utils import get_equipment
 
 
 class BudgetBytes(AbstractScraper):
@@ -36,3 +37,12 @@ class BudgetBytes(AbstractScraper):
 
     def ratings(self):
         return self.schema.ratings()
+
+    def equipment(self):
+        equipment_items = [
+            link.get_text()
+            for link in self.soup.select(
+                "div.wprm-recipe-equipment-name a.wprm-recipe-equipment-link"
+            )
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/downshiftology.py b/recipe_scrapers/downshiftology.py
index 54fe33da..b2db6013 100644
--- a/recipe_scrapers/downshiftology.py
+++ b/recipe_scrapers/downshiftology.py
@@ -1,5 +1,6 @@
 # mypy: disallow_untyped_defs=False
 from ._abstract import AbstractScraper
+from ._utils import get_equipment
 
 
 class Downshiftology(AbstractScraper):
@@ -30,3 +31,11 @@ class Downshiftology(AbstractScraper):
 
     def ratings(self):
         return self.schema.ratings()
+
+    def equipment(self):
+        equipment_items = [
+            item.find("a", class_="wprm-recipe-equipment-link").get_text()
+            for item in self.soup.find_all("div", class_="wprm-recipe-equipment-name")
+            if item.find("a", class_="wprm-recipe-equipment-link")
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/elavegan.py b/recipe_scrapers/elavegan.py
index 5819a2fa..a42f1960 100644
--- a/recipe_scrapers/elavegan.py
+++ b/recipe_scrapers/elavegan.py
@@ -2,6 +2,7 @@
 
 from ._abstract import AbstractScraper
 from ._grouping_utils import group_ingredients
+from ._utils import get_equipment
 
 
 class ElaVegan(AbstractScraper):
@@ -49,3 +50,14 @@ class ElaVegan(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        equipment_items = [
+            item.find("div", class_="wprm-recipe-equipment-name")
+            .get_text()
+            .rstrip("*")
+            .strip()
+            for item in self.soup.find_all("div", class_="wprm-recipe-equipment-item")
+            if item.find("div", class_="wprm-recipe-equipment-name")
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/fattoincasadabenedetta.py b/recipe_scrapers/fattoincasadabenedetta.py
index 8ab2fa39..a04f743d 100644
--- a/recipe_scrapers/fattoincasadabenedetta.py
+++ b/recipe_scrapers/fattoincasadabenedetta.py
@@ -46,3 +46,10 @@ class FattoInCasaDaBenedetta(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        return list(
+            dict.fromkeys(
+                (item.get_text()) for item in self.soup.find_all("p", class_="name")
+            )
+        )
diff --git a/recipe_scrapers/forktospoon.py b/recipe_scrapers/forktospoon.py
index db554915..a7a04095 100644
--- a/recipe_scrapers/forktospoon.py
+++ b/recipe_scrapers/forktospoon.py
@@ -40,3 +40,12 @@ class ForkToSpoon(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        seen = set()
+        return [
+            equip.get_text()
+            for equip in self.soup.find_all("div", class_="wprm-recipe-equipment-name")
+            if equip.get_text()
+            and (equip.get_text() not in seen and not seen.add(equip.get_text()))
+        ]
diff --git a/recipe_scrapers/herseyland.py b/recipe_scrapers/herseyland.py
index 5d5696c9..2f910f8e 100644
--- a/recipe_scrapers/herseyland.py
+++ b/recipe_scrapers/herseyland.py
@@ -1,6 +1,7 @@
 # mypy: allow-untyped-defs
 
 from ._abstract import AbstractScraper
+from ._utils import get_equipment
 
 
 class HerseyLand(AbstractScraper):
@@ -37,3 +38,11 @@ class HerseyLand(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        equipment_items = [
+            item.find("span", class_="h6").get_text()
+            for item in self.soup.find_all("div", class_="equipment-item")
+            if item.find("span", class_="h6")
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/joyfoodsunshine.py b/recipe_scrapers/joyfoodsunshine.py
index d4b829c3..7833c42a 100644
--- a/recipe_scrapers/joyfoodsunshine.py
+++ b/recipe_scrapers/joyfoodsunshine.py
@@ -1,6 +1,6 @@
 # mypy: disallow_untyped_defs=False
 from ._abstract import AbstractScraper
-from ._utils import normalize_string
+from ._utils import get_equipment, normalize_string
 
 
 class Joyfoodsunshine(AbstractScraper):
@@ -33,3 +33,11 @@ class Joyfoodsunshine(AbstractScraper):
 
     def ratings(self):
         return self.schema.ratings()
+
+    def equipment(self):
+        equipment_items = [
+            item.find("a", class_="wprm-recipe-equipment-link").get_text()
+            for item in self.soup.find_all("div", class_="wprm-recipe-equipment-name")
+            if item.find("a", class_="wprm-recipe-equipment-link")
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/lifestyleofafoodie.py b/recipe_scrapers/lifestyleofafoodie.py
index 720f6c17..4bdec6d8 100644
--- a/recipe_scrapers/lifestyleofafoodie.py
+++ b/recipe_scrapers/lifestyleofafoodie.py
@@ -49,3 +49,13 @@ class LifestyleOfAFoodie(AbstractScraper):
             "div.wprm-recipe-ingredient-group h4",
             "ul.wprm-recipe-ingredients li",
         )
+
+    def equipment(self):
+        return list(
+            dict.fromkeys(
+                (item.get_text())
+                for item in self.soup.find_all(
+                    "div", class_="wprm-recipe-equipment-name"
+                )
+            )
+        )
diff --git a/recipe_scrapers/ministryofcurry.py b/recipe_scrapers/ministryofcurry.py
index 7a7bf8b4..acf8d0c7 100644
--- a/recipe_scrapers/ministryofcurry.py
+++ b/recipe_scrapers/ministryofcurry.py
@@ -37,3 +37,13 @@ class MinistryOfCurry(AbstractScraper):
 
     def description(self):
         return self.schema.description()
+
+    def equipment(self):
+        return list(
+            {
+                (item.get_text())
+                for item in self.soup.find_all(
+                    "div", class_="wprm-recipe-equipment-name"
+                )
+            }
+        )
diff --git a/recipe_scrapers/momswithcrockpots.py b/recipe_scrapers/momswithcrockpots.py
index 0393dce0..63a56c12 100644
--- a/recipe_scrapers/momswithcrockpots.py
+++ b/recipe_scrapers/momswithcrockpots.py
@@ -1,5 +1,6 @@
 # mypy: disallow_untyped_defs=False
 from ._abstract import AbstractScraper
+from ._utils import get_equipment
 
 
 class MomsWithCrockPots(AbstractScraper):
@@ -24,3 +25,11 @@ class MomsWithCrockPots(AbstractScraper):
 
     def ratings(self):
         return self.schema.ratings()
+
+    def equipment(self):
+        equipment_items = [
+            item.find("a", class_="wprm-recipe-equipment-link").get_text()
+            for item in self.soup.find_all("div", class_="wprm-recipe-equipment-name")
+            if item.find("a", class_="wprm-recipe-equipment-link")
+        ]
+        return get_equipment(equipment_items)
diff --git a/recipe_scrapers/mykitchen101.py b/recipe_scrapers/mykitchen101.py
index ac438fa4..cc3729d9 100644
--- a/recipe_scrapers/mykitchen101.py
+++ b/recipe_scrapers/mykitchen101.py
@@ -41,3 +41,13 @@ class MyKitchen101(AbstractScraper):
                 if instruction.get_text()[:1].isdigit()
             ]
         )
+
+    def equipment(self):
+        return list(
+            {
+                normalize_string("".join(item.stripped_strings).split("(")[0].strip())
+                for item in self.soup.find_all(
+                    "div", class_="wprm-recipe-equipment-name"
+                )
+            }
+        )
diff --git a/recipe_scrapers/mykitchen101en.py b/recipe_scrapers/mykitchen101en.py
index 5a09e453..8e3037e0 100644
--- a/recipe_scrapers/mykitchen101en.py
+++ b/recipe_scrapers/mykitchen101en.py
@@ -24,3 +24,13 @@ class MyKitchen101en(AbstractScraper):
 
     def instructions(self):
         return self.schema.instructions()
+
+    def equipment(self):
+        return list(
+            {
+                ("".join(item.stripped_strings).split("(")[0].strip())
+                for item in self.soup.find_all(
+                    "div", class_="wprm-recipe-equipment-name"
+                )
+            }
+        )
diff --git a/recipe_scrapers/recept.py b/recipe_scrapers/recept.py
new file mode 100644
index 00000000..4b26b8d5
--- /dev/null
+++ b/recipe_scrapers/recept.py
@@ -0,0 +1,42 @@
+# mypy: allow-untyped-defs
+
+from ._abstract import AbstractScraper
+
+
+class Recept(AbstractScraper):
+    @classmethod
+    def host(cls):
+        return "recept.se"
+
+    def author(self):
+        return self.schema.author()
+
+    def title(self):
+        return self.schema.title()
+
+    def category(self):
+        return self.schema.category()
+
+    def total_time(self):
+        return self.schema.total_time()
+
+    def yields(self):
+        return self.schema.yields()
+
+    def image(self):
+        return self.schema.image()
+
+    def ingredients(self):
+        return self.schema.ingredients()
+
+    def instructions(self):
+        return self.schema.instructions()
+
+    def ratings(self):
+        return self.schema.ratings()
+
+    def cuisine(self):
+        return self.schema.cuisine()
+
+    def description(self):
+        return self.schema.description()


Test patch:
diff --git a/.github/workflows/unittests.yaml b/.github/workflows/unittests.yaml
index 36b19dcd..a996f2d1 100644
--- a/.github/workflows/unittests.yaml
+++ b/.github/workflows/unittests.yaml
@@ -14,7 +14,7 @@ jobs:
       fail-fast: false
       matrix:
         os: [ubuntu-latest, macos-13, windows-latest]
-        python-version: ["3.8", "3.9", "3.10", "3.11"]
+        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
         include:
           # set toxenv to workaround-darwin on macos (check tox.ini)
           - toxenv: py
diff --git a/tests/__init__.py b/tests/__init__.py
index 2ed51a30..08e4b812 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -31,6 +31,7 @@ OPTIONAL_TESTS = [
     "prep_time",
     "ratings",
     "reviews",
+    "equipment",
 ]
 
 
diff --git a/tests/library/test_utils.py b/tests/library/test_utils.py
index f561d0d2..92b1a22e 100644
--- a/tests/library/test_utils.py
+++ b/tests/library/test_utils.py
@@ -105,6 +105,7 @@ class TestUtils(unittest.TestCase):
                 "cook_time",
                 "cuisine",
                 "description",
+                "equipment",
                 "host",
                 "image",
                 "ingredient_groups",
diff --git a/tests/test_data/addapinch.com/addapinch_2.json b/tests/test_data/addapinch.com/addapinch_2.json
index dd922a75..3734f0a7 100644
--- a/tests/test_data/addapinch.com/addapinch_2.json
+++ b/tests/test_data/addapinch.com/addapinch_2.json
@@ -75,5 +75,9 @@
   "site_name": "Add a Pinch",
   "title": "Citrus Scones Recipe with Orange Glaze",
   "total_time": 30,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "equipment": [
+    "Pastry Blender",
+    "Grater/ Zester"
+  ]
 }
diff --git a/tests/test_data/altonbrown.com/altonbrown_1.json b/tests/test_data/altonbrown.com/altonbrown_1.json
index d744bf39..7384f6e2 100644
--- a/tests/test_data/altonbrown.com/altonbrown_1.json
+++ b/tests/test_data/altonbrown.com/altonbrown_1.json
@@ -49,5 +49,10 @@
   "site_name": "Alton Brown",
   "title": "A Far, Far Better Cake",
   "total_time": 210,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "equipment": [
+    "Digital kitchen scale",
+    "Digital instant-read thermometer",
+    "2 (9-inch) round aluminum cake pans"
+  ]
 }
diff --git a/tests/test_data/altonbrown.com/altonbrown_2.json b/tests/test_data/altonbrown.com/altonbrown_2.json
index 6660c611..da7f790f 100644
--- a/tests/test_data/altonbrown.com/altonbrown_2.json
+++ b/tests/test_data/altonbrown.com/altonbrown_2.json
@@ -73,5 +73,10 @@
   "site_name": "Alton Brown",
   "title": "Filipino-Style Pork Skewers with Vinegar Sauce",
   "total_time": 280,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "equipment": [
+    "1-gallon zip top bag",
+    "Charcoal grill (See note)",
+    "12 8-inch wooden skewers, smoked in water (See other note)"
+  ]
 }
diff --git a/tests/test_data/amazingribs.com/amazingribs_1.json b/tests/test_data/amazingribs.com/amazingribs_1.json
index 7fb4264a..244dde55 100644
--- a/tests/test_data/amazingribs.com/amazingribs_1.json
+++ b/tests/test_data/amazingribs.com/amazingribs_1.json
@@ -53,5 +53,9 @@
   "site_name": "Meathead's AmazingRibs.com",
   "title": "Texas Hot Guts Recipe",
   "total_time": 165,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "equipment": [
+    "sausage grinder",
+    "sausage stuffer"
+  ]
 }
diff --git a/tests/test_data/amazingribs.com/amazingribs_2.json b/tests/test_data/amazingribs.com/amazingribs_2.json
index 7a17ebb4..0fd82e38 100644
--- a/tests/test_data/amazingribs.com/amazingribs_2.json
+++ b/tests/test_data/amazingribs.com/amazingribs_2.json
@@ -47,5 +47,8 @@
   "site_name": "Meathead's AmazingRibs.com",
   "title": "Brisket Burnt Ends Recipe",
   "total_time": 610,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "equipment": [
+    "4 cups wood chunks or chips (about 8 ounces (226 g))"
+  ]
 }
diff --git a/tests/test_data/baking-sense.com/bakingsense_1.json b/tests/test_data/baking-sense.com/bakingsense_1.json
index 20542b85..c93f4696 100644
--- a/tests/test_data/baking-sense.com/bakingsense_1.json
+++ b/tests/test_data/baking-sense.com/bakingsense_1.json
@@ -80,5 +80,12 @@
   "site_name": "Baking Sense®",
   "title": "Sourdough Bundt Cake with Buttermilk Glaze",
   "total_time": 60,
-  "yields": "16 servings"
+  "yields": "16 servings",
+  "equipment": [
+    "My Book",
+    "KA Stand Mixer",
+    "Bundt Pan",
+    "Cooling Rack",
+    "Half Sheet Pans"
+  ]
 }
diff --git a/tests/test_data/baking-sense.com/bakingsense_2.json b/tests/test_data/baking-sense.com/bakingsense_2.json
index e6f18dbf..31b4c770 100644
--- a/tests/test_data/baking-sense.com/bakingsense_2.json
+++ b/tests/test_data/baking-sense.com/bakingsense_2.json
@@ -76,5 +76,14 @@
   "site_name": "Baking SenseÂ®",
   "title": "Chocolate Cake with Strawberry Mousse Recipe",
   "total_time": 250,
-  "yields": "12 servings"
+  "yields": "12 servings",
+  "equipment": [
+    "My Book",
+    "9″ Cake Pan",
+    "KA Stand Mixer",
+    "Food Processor",
+    "Revolving Cake Stand",
+    "Cake Boards",
+    "Sieve"
+  ]
 }
diff --git a/tests/test_data/bowlofdelicious.com/bowlofdelicious.json b/tests/test_data/bowlofdelicious.com/bowlofdelicious.json
index faf90f13..de9e23cb 100644
--- a/tests/test_data/bowlofdelicious.com/bowlofdelicious.json
+++ b/tests/test_data/bowlofdelicious.com/bowlofdelicious.json
@@ -56,5 +56,8 @@
   "site_name": "Bowl of Delicious",
   "title": "Six-Minute Seared Ahi Tuna Steaks",
   "total_time": 6,
-  "yields": "2 servings"
+  "yields": "2 servings",
+  "equipment": [
+    "Nonstick Skillet"
+  ]
 }
diff --git a/tests/test_data/budgetbytes.com/budgetbytes.json b/tests/test_data/budgetbytes.com/budgetbytes.json
index 03b35e7f..a2c3b6c8 100644
--- a/tests/test_data/budgetbytes.com/budgetbytes.json
+++ b/tests/test_data/budgetbytes.com/budgetbytes.json
@@ -51,5 +51,8 @@
   "site_name": "Budget Bytes",
   "title": "Smash Burgers",
   "total_time": 40,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "equipment": [
+    "Cast Iron Skillet"
+  ]
 }
diff --git a/tests/test_data/downshiftology.com/downshiftology.json b/tests/test_data/downshiftology.com/downshiftology.json
index 78c55e75..eb4515ee 100644
--- a/tests/test_data/downshiftology.com/downshiftology.json
+++ b/tests/test_data/downshiftology.com/downshiftology.json
@@ -67,5 +67,9 @@
   "site_name": "Downshiftology",
   "title": "Greek Chicken Kabobs",
   "total_time": 55,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "equipment": [
+    "Metal Skewers",
+    "Lodge Indoor Grill"
+  ]
 }
diff --git a/tests/test_data/elavegan.com/elavegan_2.json b/tests/test_data/elavegan.com/elavegan_2.json
index 53b00d35..1b1b4317 100644
--- a/tests/test_data/elavegan.com/elavegan_2.json
+++ b/tests/test_data/elavegan.com/elavegan_2.json
@@ -89,5 +89,9 @@
   "site_name": "Elavegan",
   "title": "Vegan Coffee Cake",
   "total_time": 55,
-  "yields": "9 servings"
+  "yields": "9 servings",
+  "equipment": [
+    "Kitchen scale",
+    "8x8 pan"
+  ]
 }
diff --git a/tests/test_data/fattoincasadabenedetta.it/fattoincasadabenedetta.json b/tests/test_data/fattoincasadabenedetta.it/fattoincasadabenedetta.json
index 56c05561..01263bb0 100644
--- a/tests/test_data/fattoincasadabenedetta.it/fattoincasadabenedetta.json
+++ b/tests/test_data/fattoincasadabenedetta.it/fattoincasadabenedetta.json
@@ -58,5 +58,10 @@
   "site_name": "Fatto in casa da Benedetta",
   "title": "Torta fredda al limone",
   "total_time": 45.0,
-  "yields": "8 servings"
+  "yields": "8 servings",
+  "equipment": [
+    "Casseruola 16cm con coperchio",
+    "Frusta in silicone 32cm",
+    "Sac à poche"
+  ]
 }
diff --git a/tests/test_data/forktospoon.com/forktospoon.json b/tests/test_data/forktospoon.com/forktospoon.json
index e92f9f66..adb4115a 100644
--- a/tests/test_data/forktospoon.com/forktospoon.json
+++ b/tests/test_data/forktospoon.com/forktospoon.json
@@ -61,5 +61,10 @@
   "site_name": "Fork To Spoon",
   "title": "Air Fryer Parmesan Tomatoes",
   "total_time": 20,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "equipment": [
+    "Air Fryer",
+    "Cooking Spray",
+    "Parchment Paper"
+  ]
 }
diff --git a/tests/test_data/hersheyland.com/herseyland.json b/tests/test_data/hersheyland.com/herseyland.json
index c6c02a57..242455eb 100644
--- a/tests/test_data/hersheyland.com/herseyland.json
+++ b/tests/test_data/hersheyland.com/herseyland.json
@@ -62,5 +62,13 @@
   "site_name": null,
   "title": "HERSHEY'S \"Perfectly Chocolate\" Chocolate Cake Recipe | Hersheyland",
   "total_time": 45,
-  "yields": "1 cake"
+  "yields": "1 cake",
+  "equipment": [
+    "Round Baking Pans",
+    "Measuring Cups and Spoons",
+    "Mixing Bowl",
+    "Mixer",
+    "Oven",
+    "Wire Rack"
+  ]
 }
diff --git a/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json b/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json
index efd70999..df13fd0f 100644
--- a/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json
+++ b/tests/test_data/joyfoodsunshine.com/joyfoodsunshine.json
@@ -59,5 +59,14 @@
   "site_name": "JoyFoodSunshine",
   "title": "Easy Homemade Pizza Dough",
   "total_time": 30,
-  "yields": "14 servings"
+  "yields": "14 servings",
+  "equipment": [
+    "glass batter bowl",
+    "measuring spoons",
+    "measuring cups",
+    "rolling pin",
+    "pizza stone",
+    "Pizza Peel",
+    "Pizza scissors"
+  ]
 }
diff --git a/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json b/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json
index 813e09cb..338070da 100644
--- a/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json
+++ b/tests/test_data/lifestyleofafoodie.com/lifestyleofafoodie_2.json
@@ -38,5 +38,8 @@
   "site_name": "Lifestyle of a Foodie",
   "title": "Crispy air fryer frozen french fries",
   "total_time": 13,
-  "yields": "4 servings"
+  "yields": "4 servings",
+  "equipment": [
+    "Ninja air fryer"
+  ]
 }
diff --git a/tests/test_data/ministryofcurry.com/ministryofcurry.json b/tests/test_data/ministryofcurry.com/ministryofcurry.json
index 4ed41275..1f732533 100644
--- a/tests/test_data/ministryofcurry.com/ministryofcurry.json
+++ b/tests/test_data/ministryofcurry.com/ministryofcurry.json
@@ -76,5 +76,8 @@
   "site_name": "Ministry of Curry",
   "title": "Slow Cooker EASY Chicken Tikka Masala",
   "total_time": 270,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "equipment": [
+    "Slow Cooker"
+  ]
 }
diff --git a/tests/test_data/momswithcrockpots.com/momswithcrockpots.json b/tests/test_data/momswithcrockpots.com/momswithcrockpots.json
index 533df140..92e2832a 100644
--- a/tests/test_data/momswithcrockpots.com/momswithcrockpots.json
+++ b/tests/test_data/momswithcrockpots.com/momswithcrockpots.json
@@ -56,5 +56,8 @@
   "site_name": "Moms with Crockpots",
   "title": "Crockpot Macaroni & Cheese",
   "total_time": 225,
-  "yields": "6 servings"
+  "yields": "6 servings",
+  "equipment": [
+    "6 Qt Crockpot"
+  ]
 }
diff --git a/tests/test_data/mykitchen101.com/mykitchen101.testhtml b/tests/test_data/mykitchen101.com/mykitchen101.testhtml
index 541f9bc2..afcb9cb7 100644
--- a/tests/test_data/mykitchen101.com/mykitchen101.testhtml
+++ b/tests/test_data/mykitchen101.com/mykitchen101.testhtml
@@ -839,4 +839,4 @@ var windowOpen;
 <!-- Dynamic page generated in 0.292 seconds. -->
 <!-- Cached page generated by WP-Super-Cache on 2021-07-03 05:24:56 -->
 
-<!-- super cache -->
+<!-- super cache -->
diff --git a/tests/test_data/mykitchen101en.com/mykitchen101en.json b/tests/test_data/mykitchen101en.com/mykitchen101en.json
index 3d18898b..a3b119a8 100644
--- a/tests/test_data/mykitchen101en.com/mykitchen101en.json
+++ b/tests/test_data/mykitchen101en.com/mykitchen101en.json
@@ -64,5 +64,8 @@
   "site_name": "MyKitchen101en.com",
   "title": "Baked Mini Egg Sponge Cakes",
   "total_time": 55,
-  "yields": "30 servings"
+  "yields": "30 servings",
+  "equipment": [
+    "2 mini muffin pans"
+  ]
 }
diff --git a/tests/test_data/recept.se/recept.json b/tests/test_data/recept.se/recept.json
new file mode 100644
index 00000000..f9919436
--- /dev/null
+++ b/tests/test_data/recept.se/recept.json
@@ -0,0 +1,44 @@
+{
+  "author": "Sandra Palmqvist",
+  "canonical_url": "https://recept.se/recept/chokladbollar-grundrecept",
+  "host": "recept.se",
+  "description": "Klassiska chokladbollar med havregryn, smör, socker, kakao och kaffe. Smaksätt gärna smeten med flingsalt, brynt smör eller likör.",
+  "image": "https://images.recept.se/images/recipes/chokladbollar-grundrecept_13868.jpg?fit=crop&crop=focalpoint&auto=format&fp-x=0.5&fp-y=0.56932862497615&fp-z=1&w=1200&h=1200",
+  "ingredient_groups": [
+    {
+      "ingredients": [
+        "3 dl havregryn",
+        "100 g mjukt och rumstempererat smör",
+        "1 dl strösocker",
+        "2,5 msk kakao",
+        "1,5 tsk vaniljsocker",
+        "2 msk starkt kaffe, typ espresso",
+        "2 dl pärlsocker eller kokosflingor"
+      ],
+      "purpose": null
+    }
+  ],
+  "ingredients": [
+    "3 dl havregryn",
+    "100 g mjukt och rumstempererat smör",
+    "1 dl strösocker",
+    "2,5 msk kakao",
+    "1,5 tsk vaniljsocker",
+    "2 msk starkt kaffe, typ espresso",
+    "2 dl pärlsocker eller kokosflingor"
+  ],
+  "instructions": "Rör smör, socker, kakao och vaniljsocker poröst. Gärna med en elvisp eller köksassistent.\nTillsätt resterande ingredienser och arbeta ihop till en jämn smet med händerna.\nJag kyler aldrig kaffet. Jag bereder det när jag börjar vispa smör och socker och tillsätter det ljummet.\nLåt smeten stå i 15 minuter så den sväller lite.\nRulla bollar av smeten och rulla sedan dessa i pärlsocker eller kokosflingor.\nStäll i kyl för att stelna, men låt gärna rumstempereras innan servering.",
+  "instructions_list": [
+    "Rör smör, socker, kakao och vaniljsocker poröst. Gärna med en elvisp eller köksassistent.",
+    "Tillsätt resterande ingredienser och arbeta ihop till en jämn smet med händerna.",
+    "Jag kyler aldrig kaffet. Jag bereder det när jag börjar vispa smör och socker och tillsätter det ljummet.",
+    "Låt smeten stå i 15 minuter så den sväller lite.",
+    "Rulla bollar av smeten och rulla sedan dessa i pärlsocker eller kokosflingor.",
+    "Ställ i kyl för att stelna, men låt gärna rumstempereras innan servering."
+  ],
+  "language": "se",
+  "site_name": "RECEPT",
+  "title": "Chokladbollar – grundrecept",
+  "total_time": 30,
+  "yields": "25 servings"
+}
diff --git a/tests/test_data/recept.se/recept.testhtml b/tests/test_data/recept.se/recept.testhtml
new file mode 100644
index 00000000..bd75bcbd
--- /dev/null
+++ b/tests/test_data/recept.se/recept.testhtml
@@ -0,0 +1,475 @@
+
+<!doctype html>
+<html lang="se">
+<head>
+<meta charset="utf-8">
+<meta http-equiv="Accept-CH" content="DPR, Width, Viewport-Width">
+<meta http-equiv="X-UA-Compatible" content="IE=edge">
+<meta name="apple-mobile-web-app-capable" content="yes">
+    <title>Chokladbollar – grundrecept</title>
+    <meta name="description" content="Klassiska chokladbollar med havregryn, smör, socker, kakao och kaffe. Smaksätt gärna smeten med flingsalt, brynt smör eller likör.">
+    <meta name="robots" content="index,follow">
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="p:domain_verify" content="581719e9d7cc4f65dcea0eff8aa3e2a8">
+<meta name="google-site-verification" content="hS_EbPr1PbGpoLNmDg_B_AH8LiR0vhqNrWCraobB8Wo" />
+<meta property="og:site_name" content="RECEPT">
+<meta property="og:locale" content="sv_SE">
+<meta property="og:type" content="website">
+        <meta property="og:title" content="Chokladbollar – grundrecept">
+    <meta property="og:description" content="Klassiska chokladbollar med havregryn, smör, socker, kakao och kaffe. Smaksätt gärna smeten med flingsalt, brynt smör eller likör.">
+    <meta property="og:url" content="https://recept.se/recept/chokladbollar-grundrecept">
+            <meta property="og:image" content="https://images.recept.se/images/recipes/chokladbollar-grundrecept_13868.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.56932862497615&amp;fp-z=1&amp;w=1200&amp;h=1200">
+        <meta property="og:image:width" content="1200">
+        <meta property="og:image:height" content="1200">
+    <meta name="ab-value" content="">
+<meta name="ab-group" content="">
+<meta name="msapplication-TileColor" content="#A7D4C3">
+<meta name="msapplication-config" content="/favicon-app/browserconfig.xml">
+<meta name="theme-color" content="#FFFFFF">
+    <link rel="preload" href="https://images.recept.se/images/recipes/chokladbollar-grundrecept_13868.jpg?fit=crop&crop=focalpoint&auto=format&fp-x=0.5&fp-y=0.56932862497615&fp-z=1&w=461&h=461" as="image" media="(max-width: 481px) and (-webkit-max-device-pixel-ratio: 1)">
+    <link rel="preload" href="https://images.recept.se/images/recipes/chokladbollar-grundrecept_13868.jpg?fit=crop&crop=focalpoint&auto=format&fp-x=0.5&fp-y=0.56932862497615&fp-z=1&w=600&h=600" as="image" media="(max-width: 481px) and (-webkit-min-device-pixel-ratio: 1.1)">
+    <link rel="preload" href="https://images.recept.se/images/recipes/chokladbollar-grundrecept_13868.jpg?fit=crop&crop=focalpoint&auto=format&fp-x=0.5&fp-y=0.56932862497615&fp-z=1&w=600&h=600" as="image" media="(min-width: 482px)">
+    <link rel="preload" href="/assets/js/app/PageRecipe.d1055c1e2711c62b.js" as="script">
+<link rel="canonical" href="https://recept.se/recept/chokladbollar-grundrecept">
+<link rel="apple-touch-icon" sizes="180x180" href="/favicon-app/apple-touch-icon.png">
+<link rel="icon" type="image/png" sizes="32x32" href="/favicon-app/favicon-32x32.png">
+<link rel="icon" type="image/png" sizes="16x16" href="/favicon-app/favicon-16x16.png">
+<link rel="manifest" href="/favicon-app/site.webmanifest">
+<link rel="mask-icon" href="/favicon-app/safari-pinned-tab.svg" color="#286859">
+<link rel="shortcut icon" href="/favicon-app/favicon.ico">
+<link rel="preload" href="/assets/css/app.647bdfe87fabd6fad754ca2d79fd2372.css" as="style">
+<link rel="preconnect" href="https://connect.facebook.net">
+<link rel="preconnect" href="https://www.googletagmanager.com">
+<link rel="preconnect" href="https://www.googletagservices.com">
+<style type="text/css">
+    @font-face {
+        font-family: "ITC Cheltenham W05";
+        src: url("/assets/fonts/ITCCheltenham/63133d6d-57a0-4779-b215-8e8f1033c3a7.woff2") format("woff2"), url("/assets/fonts/ITCCheltenham/a3c81da9-7632-4028-a619-463493d2c93c.woff") format("woff");
+        font-weight: 400;
+        font-style: normal;
+        font-display: swap;
+    }
+
+    @font-face {
+        font-family: "ITC Cheltenham W05";
+        src: url("/assets/fonts/ITCCheltenham/e7424697-e8cf-4602-ae7a-7cec29994c2d.woff2") format("woff2"), url("/assets/fonts/ITCCheltenham/0ffea92b-c464-4090-bc7f-c888e0e76126.woff") format("woff");
+        font-weight: 700;
+        font-style: normal;
+        font-display: swap;
+    }
+
+    /* latin-ext */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: italic;
+        font-weight: 400;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXX3I6Li01BKofIMNaNRs7nczIHNHI.woff2) format('woff2');
+        unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+    }
+
+    /* latin */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: italic;
+        font-weight: 400;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXX3I6Li01BKofIMNaDRs7nczIH.woff2) format('woff2');
+        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+    }
+
+    /* latin-ext */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 300;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXW3I6Li01BKofAnsSUb-vIWzgPDEtj.woff2) format('woff2');
+        unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+    }
+
+    /* latin */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 300;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXW3I6Li01BKofAnsSUYevIWzgPDA.woff2) format('woff2');
+        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+    }
+
+    /* latin-ext */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 400;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXV3I6Li01BKofIO-aBTMnFcQIG.woff2) format('woff2');
+        unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+    }
+
+    /* latin */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 400;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXV3I6Li01BKofINeaBTMnFcQ.woff2) format('woff2');
+        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+    }
+
+    /* latin-ext */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 600;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXW3I6Li01BKofA6sKUb-vIWzgPDEtj.woff2) format('woff2');
+        unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+    }
+
+    /* latin */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 600;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXW3I6Li01BKofA6sKUYevIWzgPDA.woff2) format('woff2');
+        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+    }
+
+    /* latin-ext */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 700;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXW3I6Li01BKofAjsOUb-vIWzgPDEtj.woff2) format('woff2');
+        unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+    }
+
+    /* latin */
+    @font-face {
+        font-family: 'Nunito';
+        font-style: normal;
+        font-weight: 700;
+        font-display: swap;
+        src: url(/assets/fonts/NunitoGoogle/XRXW3I6Li01BKofAjsOUYevIWzgPDA.woff2) format('woff2');
+        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+    }
+
+    </style><link rel="stylesheet" media="screen,print" href="/assets/css/app.647bdfe87fabd6fad754ca2d79fd2372.css">
+</head>
+
+<body class="page-recept-chokladbollar-grundrecept ua-firefox ua- has-trending-links   " data-standalone="false" data-overlay="false">
+    <div
+    class="ad-wrapper print:!hidden "
+>
+    <div
+        id="top_ad-1"
+            class="c-ad top_ad print:hidden"
+                data-aduniqueid="1"
+        ad-placement="top_ad"
+    ></div>
+</div>
+    <div id="app">
+        <session-manager
+            :initial-state="{&quot;created&quot;:{&quot;comments&quot;:[],&quot;liked_comments&quot;:[]},&quot;logged_in&quot;:{&quot;server&quot;:false},&quot;routes&quot;:{&quot;change_password&quot;:&quot;https:\/\/login.allermedia.se\/mina-sidor\/andra-losenord?return=https%3A%2F%2Frecept.se%2Fmina-sidor&quot;,&quot;login&quot;:&quot;https:\/\/login.allermedia.se\/?return=https%3A%2F%2Frecept.se%2Fsession%2Fstart&quot;,&quot;register&quot;:&quot;https:\/\/login.allermedia.se\/nytt-konto?return=https%3A%2F%2Frecept.se%2Fsession%2Fstart&quot;,&quot;session_end&quot;:&quot;https:\/\/recept.se\/session\/end&quot;,&quot;login_return_current&quot;:&quot;https:\/\/login.allermedia.se\/?return=https%3A%2F%2Frecept.se%2Fsession%2Fstart%2FaHR0cDovL3JlY2VwdC5zZS9yZWNlcHQvY2hva2xhZGJvbGxhci1ncnVuZHJlY2VwdA%3D%3D&quot;},&quot;saved&quot;:{&quot;articles&quot;:[],&quot;recipes&quot;:[]},&quot;user&quot;:{&quot;new&quot;:false,&quot;id&quot;:null,&quot;server_cc&quot;:null}}"
+            home="https://login.allermedia.se"
+            script-url="https://cdn.aller.se/login-idjs/id.min.js"
+        ></session-manager>
+        <ads-manager
+            :ads="{&quot;responsive_1&quot;:{&quot;placement&quot;:&quot;responsive_1&quot;,&quot;target&quot;:&quot;div-gpt-ad-1359364411177-4&quot;},&quot;responsive_2&quot;:{&quot;placement&quot;:&quot;responsive_2&quot;,&quot;target&quot;:&quot;div-gpt-ad-1359364411177-5&quot;},&quot;responsive_3&quot;:{&quot;placement&quot;:&quot;responsive_3&quot;,&quot;target&quot;:&quot;div-gpt-ad-1359364411177-6&quot;},&quot;responsive_4&quot;:{&quot;placement&quot;:&quot;responsive_4&quot;,&quot;target&quot;:&quot;responsive_4&quot;},&quot;responsive_5&quot;:{&quot;placement&quot;:&quot;responsive_5&quot;,&quot;target&quot;:&quot;responsive_5&quot;},&quot;responsive_6&quot;:{&quot;placement&quot;:&quot;responsive_6&quot;,&quot;target&quot;:&quot;responsive_6&quot;},&quot;responsive_7&quot;:{&quot;placement&quot;:&quot;responsive_7&quot;,&quot;target&quot;:&quot;responsive_7&quot;},&quot;intext_ad_1&quot;:{&quot;placement&quot;:&quot;intext_ad_1&quot;,&quot;target&quot;:&quot;intext_ad_1&quot;},&quot;intext_ad_2&quot;:{&quot;placement&quot;:&quot;intext_ad_2&quot;,&quot;target&quot;:&quot;intext_ad_2&quot;},&quot;intext_ad_3&quot;:{&quot;placement&quot;:&quot;intext_ad_3&quot;,&quot;target&quot;:&quot;intext_ad_3&quot;},&quot;intext_ad_4&quot;:{&quot;placement&quot;:&quot;intext_ad_4&quot;,&quot;target&quot;:&quot;intext_ad_4&quot;},&quot;intext_ad_5&quot;:{&quot;placement&quot;:&quot;intext_ad_5&quot;,&quot;target&quot;:&quot;intext_ad_5&quot;},&quot;intext_ad_6&quot;:{&quot;placement&quot;:&quot;intext_ad_6&quot;,&quot;target&quot;:&quot;intext_ad_6&quot;},&quot;intext_ad_7&quot;:{&quot;placement&quot;:&quot;intext_ad_7&quot;,&quot;target&quot;:&quot;intext_ad_7&quot;},&quot;intext_ad_8&quot;:{&quot;placement&quot;:&quot;intext_ad_8&quot;,&quot;target&quot;:&quot;intext_ad_8&quot;},&quot;responsive_8&quot;:{&quot;placement&quot;:&quot;responsive_8&quot;,&quot;target&quot;:&quot;responsive_8&quot;},&quot;wallp_left&quot;:{&quot;placement&quot;:&quot;wallp_left&quot;,&quot;target&quot;:&quot;div-gpt-ad-1359364411177-2&quot;},&quot;intext_ad_9&quot;:{&quot;placement&quot;:&quot;intext_ad_9&quot;,&quot;target&quot;:&quot;intext_ad_9&quot;},&quot;intext_ad_10&quot;:{&quot;placement&quot;:&quot;intext_ad_10&quot;,&quot;target&quot;:&quot;intext_ad_10&quot;},&quot;responsives_1&quot;:{&quot;placement&quot;:&quot;responsives_1&quot;,&quot;target&quot;:&quot;responsive_1&quot;},&quot;top_ad&quot;:{&quot;placement&quot;:&quot;top_ad&quot;,&quot;target&quot;:&quot;top_ad&quot;},&quot;responsives_2&quot;:{&quot;placement&quot;:&quot;responsives_2&quot;,&quot;target&quot;:&quot;responsive_2&quot;},&quot;responsives_3&quot;:{&quot;placement&quot;:&quot;responsives_3&quot;,&quot;target&quot;:&quot;responsive_3&quot;},&quot;responsive_x&quot;:{&quot;placement&quot;:&quot;responsive_x&quot;,&quot;target&quot;:&quot;responsive_x&quot;},&quot;intext_ad_x&quot;:{&quot;placement&quot;:&quot;intext_ad_x&quot;,&quot;target&quot;:&quot;intext_ad_x&quot;},&quot;test_1&quot;:{&quot;placement&quot;:&quot;test_1&quot;,&quot;target&quot;:&quot;test_1&quot;}}"
+            :dfp-section="'general'"
+            unique-id="1"
+        ></ads-manager>
+        <modal-manager></modal-manager>
+        <organize-recipe-modal></organize-recipe-modal>
+        <remove-recipe-modal></remove-recipe-modal>
+        <top-bar
+    style="min-height: 108px; display: block;"
+    :trending-links="[{&quot;id&quot;:84,&quot;order&quot;:0,&quot;text&quot;:&quot;Veckomeny 5&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/veckomeny\/lattlagade-veckomenyer\/2024-05&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null},{&quot;id&quot;:81,&quot;order&quot;:1,&quot;text&quot;:&quot;Vardagsmat&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/tagg\/vardagsmat&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null},{&quot;id&quot;:83,&quot;order&quot;:2,&quot;text&quot;:&quot;Br\u00f6d&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/sok?tags=typ-av-recept%3A16&amp;sort_by=rating_avg&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null},{&quot;id&quot;:77,&quot;order&quot;:3,&quot;text&quot;:&quot;Popul\u00e4ra matr\u00e4tter&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/artikel\/15-av-vara-popularaste-matratter-2023&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null},{&quot;id&quot;:82,&quot;order&quot;:4,&quot;text&quot;:&quot;Vintips&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/tagg\/vintips&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null},{&quot;id&quot;:71,&quot;order&quot;:5,&quot;text&quot;:&quot;Smart genv\u00e4g&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/artikel\/smart-genvag-till-recept-se-i-din-mobil&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null},{&quot;id&quot;:21,&quot;order&quot;:6,&quot;text&quot;:&quot;Nyhetsbrev&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/nyhetsbrev&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null},{&quot;id&quot;:11,&quot;order&quot;:7,&quot;text&quot;:&quot;Omvandlingstabell&quot;,&quot;href&quot;:&quot;https:\/\/recept.se\/mattomvandlingstabell&quot;,&quot;target&quot;:0,&quot;target_attribute&quot;:null}]"
+></top-bar>
+<div id="site-container" class="site-container">
+                <div class="print:hidden bg-white flex justify-center">
+    <div class="w-full max-w-[120rem] px-1r0 md:px-2r0 bc:px-0">
+            <div class="flex flex-wrap text-ui-greyscale-grey-7 text-1r6 font-semibold my-1r2">
+        <a href="https://recept.se/sok" class="brand-green-sheen-700">Recept</a>
+        <img src="https://images.recept.se/ui/svg/chevron-right.svg" height="10px" width="6px" alt=">" class="mx-0r8 whitespace-nowrap">
+                <a href="https://recept.se/kategori/bak-dessert" class="brand-green-sheen-700">Bak &amp; dessert</a>
+        <img src="https://images.recept.se/ui/svg/chevron-right.svg" height="10px" width="6px" alt=">" class="mx-0r8 whitespace-nowrap">
+                <span class="whitespace-nowrap">Chokladbollar – grundrecept</span>
+    </div>
+    </div>
+</div>
+        <portal-target
+        name="site-container"
+    ></portal-target>
+            <page-recipe
+        :author="{&quot;id&quot;:2,&quot;name&quot;:&quot;Sandra Palmqvist&quot;,&quot;slug&quot;:&quot;sandra-palmqvist&quot;,&quot;title&quot;:&quot;Receptmakare&quot;,&quot;email&quot;:&quot;sandrasskafferi@gmail.com&quot;,&quot;facebook&quot;:&quot;https:\/\/www.facebook.com\/sandrasskafferi\/&quot;,&quot;instagram&quot;:&quot;https:\/\/www.instagram.com\/sandrasskafferi\/&quot;,&quot;tiktok&quot;:null,&quot;youtube&quot;:null,&quot;description&quot;:&quot;&lt;p&gt;Sandra Palmqvist \u00e4r matstylist och receptkreat\u00f6r. Hon startade sin karri\u00e4r i restaurangbranschen och har jobbat som kock i 20 \u00e5r, b\u00e5de i Sverige och internationellt. Hon har t\u00e4vlat i SM f\u00f6r kvinnliga kockar och kommit till final. Sandra skapar recept och stylar matfotograferingar f\u00f6r varum\u00e4rken p\u00e5 Aller Media som Allers, Allas, \u00c5ret Runt, Hemmets Veckotidning, Matmagasinet och M\u00e5Bra.&lt;\/p&gt;&quot;,&quot;is_published&quot;:true,&quot;published_at&quot;:&quot;2023-07-05T08:28:00.000000Z&quot;,&quot;unpublished_at&quot;:null,&quot;created_at&quot;:&quot;2023-07-05T08:28:06.000000Z&quot;,&quot;updated_at&quot;:&quot;2023-07-05T08:33:04.000000Z&quot;,&quot;deleted_at&quot;:null,&quot;image_url&quot;:&quot;https:\/\/images.recept.se\/images\/author-pages\/skribent-sandra-palmqvist.jpeg&quot;,&quot;pinterestImage&quot;:&quot;https:\/\/images.recept.se\/images\/author-pages\/skribent-sandra-palmqvist.jpeg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.5&amp;fp-z=1.0&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;id&quot;:31546,&quot;afp_id&quot;:null,&quot;type&quot;:&quot;image&quot;,&quot;entity_type&quot;:&quot;App\\Models\\AuthorPages\\AuthorPage&quot;,&quot;entity_id&quot;:2,&quot;entity_relation&quot;:null,&quot;description&quot;:null,&quot;copyright&quot;:null,&quot;is_copyright_pristine&quot;:true,&quot;media_path&quot;:&quot;images\/author-pages\/skribent-sandra-palmqvist.jpeg&quot;,&quot;mime_type&quot;:&quot;image\/jpeg&quot;,&quot;file_size&quot;:18579,&quot;width&quot;:200,&quot;height&quot;:200,&quot;length&quot;:null,&quot;crop_data&quot;:null,&quot;is_enabled&quot;:false,&quot;is_primary&quot;:false,&quot;in_gallery&quot;:false,&quot;is_embed&quot;:false,&quot;sort_order&quot;:null,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2023-07-05T08:15:29.000000Z&quot;,&quot;updated_at&quot;:&quot;2023-07-05T08:28:06.000000Z&quot;,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/author-pages\/skribent-sandra-palmqvist.jpeg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.5&amp;fp-z=1.0&quot;,&quot;raw_url&quot;:&quot;https:\/\/s3-eu-west-1.amazonaws.com\/se-recept-assets-prod\/images\/author-pages\/skribent-sandra-palmqvist.jpeg&quot;}}"
+        :comments="{&quot;comments&quot;:[{&quot;author_name&quot;:&quot;Tage&quot;,&quot;body&quot;:&quot;Jag tycker att dessa chokladbollar blev v\u00e4ldigt smakliga!\ud83d\ude01\ud83d\ude0e\ud83d\udca9&quot;,&quot;created_at&quot;:&quot;2024-01-26 11:19:55&quot;,&quot;id&quot;:6224,&quot;is_spam&quot;:false,&quot;likes&quot;:1,&quot;parent_id&quot;:null,&quot;comments&quot;:[{&quot;author_name&quot;:&quot;Rose-Marie S&quot;,&quot;body&quot;:&quot;Vad kul att du gillade dem! \ud83d\ude0a\ud83d\ude4f&quot;,&quot;created_at&quot;:&quot;2024-01-26 11:44:35&quot;,&quot;id&quot;:6225,&quot;is_spam&quot;:false,&quot;likes&quot;:0,&quot;parent_id&quot;:6224,&quot;comments&quot;:null,&quot;user&quot;:{&quot;id&quot;:7,&quot;is_admin&quot;:true}}],&quot;user&quot;:null},{&quot;author_name&quot;:&quot;Parvin&quot;,&quot;body&quot;:&quot;Hej igen .\nKan man frysa in dem?&quot;,&quot;created_at&quot;:&quot;2023-12-20 15:09:33&quot;,&quot;id&quot;:5404,&quot;is_spam&quot;:false,&quot;likes&quot;:0,&quot;parent_id&quot;:null,&quot;comments&quot;:[{&quot;author_name&quot;:&quot;Rose-Marie S&quot;,&quot;body&quot;:&quot;Hej! Chokladbollar g\u00e5r utm\u00e4rkt att frysa. Tina dem varsamt i rumstemperatur, anv\u00e4nd ej mikro eller ugn. Chokladbollar h\u00e5ller ca 2\u20133 veckor i kylen och 3 m\u00e5nader i frysen.&quot;,&quot;created_at&quot;:&quot;2023-12-23 22:57:56&quot;,&quot;id&quot;:5482,&quot;is_spam&quot;:false,&quot;likes&quot;:1,&quot;parent_id&quot;:5404,&quot;comments&quot;:null,&quot;user&quot;:{&quot;id&quot;:7,&quot;is_admin&quot;:true}}],&quot;user&quot;:null},{&quot;author_name&quot;:&quot;Ali&quot;,&quot;body&quot;:&quot;Jag tycker att det blev 25 och de va v\u00e4ldigt goda&quot;,&quot;created_at&quot;:&quot;2023-11-26 15:33:06&quot;,&quot;id&quot;:4912,&quot;is_spam&quot;:false,&quot;likes&quot;:2,&quot;parent_id&quot;:null,&quot;comments&quot;:[{&quot;author_name&quot;:&quot;Rose-Marie S&quot;,&quot;body&quot;:&quot;Vad kul att du gillade dem och att smeten r\u00e4ckte till r\u00e4tt antal enligt receptet.&quot;,&quot;created_at&quot;:&quot;2023-11-27 12:59:15&quot;,&quot;id&quot;:4921,&quot;is_spam&quot;:false,&quot;likes&quot;:0,&quot;parent_id&quot;:4912,&quot;comments&quot;:null,&quot;user&quot;:{&quot;id&quot;:7,&quot;is_admin&quot;:true}}],&quot;user&quot;:null},{&quot;author_name&quot;:&quot;Oscar&quot;,&quot;body&quot;:&quot;Det skulle bli 25 stycken och det blev 13&quot;,&quot;created_at&quot;:&quot;2023-11-11 20:11:47&quot;,&quot;id&quot;:4589,&quot;is_spam&quot;:false,&quot;likes&quot;:1,&quot;parent_id&quot;:null,&quot;comments&quot;:[{&quot;author_name&quot;:&quot;Rose-Marie S&quot;,&quot;body&quot;:&quot;Hoppas att de smakade gott! Antalet chokladbollar kan variera beroende p\u00e5 hur stora eller sm\u00e5 man g\u00f6r. V\u00e5r receptmakare har nog gjort ganska sm\u00e5 bollar.&quot;,&quot;created_at&quot;:&quot;2023-11-12 08:15:45&quot;,&quot;id&quot;:4596,&quot;is_spam&quot;:false,&quot;likes&quot;:0,&quot;parent_id&quot;:4589,&quot;comments&quot;:null,&quot;user&quot;:{&quot;id&quot;:7,&quot;is_admin&quot;:true}}],&quot;user&quot;:null},{&quot;author_name&quot;:&quot;Anna-Lena Larsson&quot;,&quot;body&quot;:&quot;De \u00e4r ju f\u00f6r all del glutenfria, men skulle \u00f6nska andra glutenfria recept fr\u00e5n er.&quot;,&quot;created_at&quot;:&quot;2023-11-02 21:06:16&quot;,&quot;id&quot;:4474,&quot;is_spam&quot;:false,&quot;likes&quot;:1,&quot;parent_id&quot;:null,&quot;comments&quot;:[{&quot;author_name&quot;:&quot;Rose-Marie S&quot;,&quot;body&quot;:&quot;Hej Anna-Lena! Vi har m\u00e5nga [glutenfria recept](https:\/\/recept.se\/sok?q=glutenfri&amp;allergies=3&amp;sort_by=rating_avg) h\u00e4r p\u00e5 recept.se. Anm\u00e4l dig g\u00e4rna till v\u00e5rt [glutenfria nyhetsbrev](https:\/\/recept.se\/nyhetsbrev) s\u00e5 f\u00e5r du regelbundet mail med n\u00e5gra av v\u00e5ra b\u00e4sta glutenfria recept. Klicka p\u00e5 de gr\u00f6na och understrukna l\u00e4nkarna h\u00e4r ovan s\u00e5 hamnar du r\u00e4tt.&quot;,&quot;created_at&quot;:&quot;2023-11-03 11:01:07&quot;,&quot;id&quot;:4479,&quot;is_spam&quot;:false,&quot;likes&quot;:2,&quot;parent_id&quot;:4474,&quot;comments&quot;:null,&quot;user&quot;:{&quot;id&quot;:7,&quot;is_admin&quot;:true}}],&quot;user&quot;:null}],&quot;entity_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;entity_id&quot;:5914,&quot;has_more&quot;:true,&quot;highlight&quot;:0,&quot;allow_new&quot;:true}"
+        :most-read-recipes="[{&quot;comment_cnt&quot;:70,&quot;id&quot;:1772,&quot;title&quot;:&quot;Kesofrallor med havregryn utan mj\u00f6l&quot;,&quot;slug&quot;:&quot;kesofrallor-med-havregryn-utan-mjol&quot;,&quot;total_time&quot;:35,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/kesobullar_3934.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.27313488464583&amp;fp-y=0.49830157753003&amp;fp-z=1.2205472174299&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;Kesofrallor med havregryn och \u00e4gg&quot;,&quot;id&quot;:3934,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/kesobullar_3934.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.27313488464583&amp;fp-y=0.49830157753003&amp;fp-z=1.2205472174299&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;4.7&quot;,&quot;rating_cnt&quot;:141,&quot;badge&quot;:{&quot;id&quot;:7,&quot;name&quot;:&quot;Glutenfritt&quot;,&quot;media&quot;:{&quot;description&quot;:null,&quot;id&quot;:29715,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/badges\/glutenfritt.svg&quot;,&quot;height&quot;:24,&quot;width&quot;:24}}},{&quot;comment_cnt&quot;:80,&quot;id&quot;:3628,&quot;title&quot;:&quot;Ljuvliga vaniljrutor i l\u00e5ngpanna&quot;,&quot;slug&quot;:&quot;ljuvliga-vaniljrutor-i-langpanna&quot;,&quot;total_time&quot;:55,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/ljuvliga-vaniljrutor-i-langpanna_7421.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.45612981465765&amp;fp-z=1&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;Ljuvliga vaniljrutor i l\u00e5ngpanna.&quot;,&quot;id&quot;:7421,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/ljuvliga-vaniljrutor-i-langpanna_7421.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.45612981465765&amp;fp-z=1&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;4.5&quot;,&quot;rating_cnt&quot;:235,&quot;badge&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Popul\u00e4rt&quot;,&quot;media&quot;:{&quot;description&quot;:null,&quot;id&quot;:29709,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/badges\/populart.svg&quot;,&quot;height&quot;:24,&quot;width&quot;:24}}},{&quot;comment_cnt&quot;:71,&quot;id&quot;:6601,&quot;title&quot;:&quot;L\u00e4ttbakat lantbr\u00f6d&quot;,&quot;slug&quot;:&quot;lattbakat-lantbrod&quot;,&quot;total_time&quot;:80,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/lattbakat-lantbrod_15909.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.48883755208531&amp;fp-z=1.0519462719298&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;L\u00e4ttbakat lantbr\u00f6d.&quot;,&quot;id&quot;:15909,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/lattbakat-lantbrod_15909.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.48883755208531&amp;fp-z=1.0519462719298&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;4.6&quot;,&quot;rating_cnt&quot;:156,&quot;badge&quot;:null},{&quot;comment_cnt&quot;:61,&quot;id&quot;:7694,&quot;title&quot;:&quot;H\u00e4rliga tekakor med havregryn&quot;,&quot;slug&quot;:&quot;harliga-tekakor-med-havregryn&quot;,&quot;total_time&quot;:80,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/harliga-tekakor-med-havregryn_18983.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.49240403221225&amp;fp-z=1.0766173245614&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;H\u00e4rliga tekakor med havregryn.&quot;,&quot;id&quot;:18983,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/harliga-tekakor-med-havregryn_18983.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.49240403221225&amp;fp-z=1.0766173245614&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;4.8&quot;,&quot;rating_cnt&quot;:122,&quot;badge&quot;:null}]"
+        :recipe="{&quot;id&quot;:5914,&quot;afp_id&quot;:18579,&quot;brand_id&quot;:9,&quot;title&quot;:&quot;Chokladbollar \u2013 grundrecept&quot;,&quot;slug&quot;:&quot;chokladbollar-grundrecept&quot;,&quot;description&quot;:&quot;Klassiska chokladbollar med havregryn, sm\u00f6r, socker, kakao och kaffe. Smaks\u00e4tt g\u00e4rna smeten med flingsalt, brynt sm\u00f6r eller lik\u00f6r.&quot;,&quot;note_message&quot;:&quot;Tid: ca 15 min + tid i kyl.\nVill du ha glutenfria chokladbollar, anv\u00e4nd ren havre.&quot;,&quot;tip_message&quot;:&quot;* Utan kaffe? Bara uteslut.\n\n* Mer chokladsmak? V\u00e4nd i ca 50 g fint hackad m\u00f6rk choklad eller doppa i sm\u00e4lt m\u00f6rk choklad och str\u00f6 sen \u00f6ver kokos. Att doppa i sm\u00e4lt vit eller ljus choklad \u00e4r ocks\u00e5 gott.\n\n* Rulla i vad du vill: p\u00e4rlsocker, kokosflingor, rostade kokosflingor, str\u00f6ssel, f\u00e4rgad kokos, b\u00e4r- eller fruktpulver.\n\n* Smaks\u00e4ttningar som lite lakritspulver, hallonpulver eller 1 msk punch eller lik\u00f6r kan vara gott att ha i. Eller varf\u00f6r inte n\u00e5gon nypa flingsalt?\n\n* Testa g\u00e4rna att sm\u00e4lta och bryna sm\u00f6ret gyllene och n\u00f6tigt. L\u00e5t svalna i kyl s\u00e5 det stelnar lite, men fortfarande \u00e4r mjukt. Blanda sedan med \u00f6vriga ingredienser. Supergott!&quot;,&quot;difficulty&quot;:&quot;easy&quot;,&quot;serving_size&quot;:25,&quot;serving_size_unit_id&quot;:8,&quot;preparation_time&quot;:null,&quot;cooking_time&quot;:15,&quot;total_time&quot;:30,&quot;author&quot;:&quot;Sandra Palmqvist&quot;,&quot;primary_tag_id&quot;:1,&quot;is_sponsored&quot;:false,&quot;is_processed&quot;:true,&quot;published_at&quot;:&quot;2021-05-10T09:00:00.000000Z&quot;,&quot;is_published&quot;:1,&quot;unpublished_at&quot;:null,&quot;campaign_start_at&quot;:null,&quot;campaign_ends_at&quot;:null,&quot;is_primary_pristine&quot;:true,&quot;jw_src&quot;:&quot;https:\/\/cdn.jwplayer.com\/players\/ypKVhDEj-NoEaZwru.html&quot;,&quot;rating_sum&quot;:870,&quot;rating_cnt&quot;:197,&quot;rating_avg&quot;:&quot;4.4&quot;,&quot;comment_cnt&quot;:14,&quot;related_updated_at&quot;:&quot;2024-01-28T09:48:56.000000Z&quot;,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2021-05-10T08:56:05.000000Z&quot;,&quot;updated_at&quot;:&quot;2024-01-28T09:48:56.000000Z&quot;,&quot;badge_id&quot;:null,&quot;timeGroup&quot;:&quot;0-30 min.&quot;,&quot;cardColor&quot;:&quot;#F2C0B7&quot;,&quot;cuisineTag&quot;:null,&quot;pinterestImage&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/chokladbollar-grundrecept_13868.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.56932862497615&amp;fp-z=1&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;grouped_ingredients&quot;:[{&quot;id&quot;:19607,&quot;recipe_id&quot;:5914,&quot;title&quot;:null,&quot;sort_order&quot;:0,&quot;ingredients&quot;:[{&quot;id&quot;:71121,&quot;recipe_group_id&quot;:19607,&quot;ingredient_id&quot;:44,&quot;ingredient_inflection&quot;:&quot;default&quot;,&quot;prefix&quot;:null,&quot;suffix&quot;:null,&quot;amount&quot;:0.12,&quot;unit_id&quot;:53,&quot;unit_inflection&quot;:&quot;default&quot;,&quot;ingredient&quot;:{&quot;id&quot;:44,&quot;afp_id&quot;:1713,&quot;name_singular&quot;:&quot;havregryn&quot;,&quot;name_plural&quot;:&quot;havregryn&quot;,&quot;sponsored_ingredient&quot;:null},&quot;unit&quot;:{&quot;id&quot;:53,&quot;name_singular&quot;:&quot;deciliter&quot;,&quot;name_plural&quot;:&quot;deciliter&quot;,&quot;abbreviation&quot;:&quot;dl&quot;}},{&quot;id&quot;:71122,&quot;recipe_group_id&quot;:19607,&quot;ingredient_id&quot;:12,&quot;ingredient_inflection&quot;:&quot;default&quot;,&quot;prefix&quot;:&quot;mjukt och rumstempererat&quot;,&quot;suffix&quot;:null,&quot;amount&quot;:4,&quot;unit_id&quot;:48,&quot;unit_inflection&quot;:&quot;default&quot;,&quot;ingredient&quot;:{&quot;id&quot;:12,&quot;afp_id&quot;:1556,&quot;name_singular&quot;:&quot;sm\u00f6r&quot;,&quot;name_plural&quot;:&quot;sm\u00f6r&quot;,&quot;sponsored_ingredient&quot;:null},&quot;unit&quot;:{&quot;id&quot;:48,&quot;name_singular&quot;:&quot;gram&quot;,&quot;name_plural&quot;:&quot;gram&quot;,&quot;abbreviation&quot;:&quot;g&quot;}},{&quot;id&quot;:71123,&quot;recipe_group_id&quot;:19607,&quot;ingredient_id&quot;:7,&quot;ingredient_inflection&quot;:&quot;default&quot;,&quot;prefix&quot;:null,&quot;suffix&quot;:null,&quot;amount&quot;:0.04,&quot;unit_id&quot;:53,&quot;unit_inflection&quot;:&quot;default&quot;,&quot;ingredient&quot;:{&quot;id&quot;:7,&quot;afp_id&quot;:1521,&quot;name_singular&quot;:&quot;str\u00f6socker&quot;,&quot;name_plural&quot;:&quot;str\u00f6socker&quot;,&quot;sponsored_ingredient&quot;:null},&quot;unit&quot;:{&quot;id&quot;:53,&quot;name_singular&quot;:&quot;deciliter&quot;,&quot;name_plural&quot;:&quot;deciliter&quot;,&quot;abbreviation&quot;:&quot;dl&quot;}},{&quot;id&quot;:71124,&quot;recipe_group_id&quot;:19607,&quot;ingredient_id&quot;:48,&quot;ingredient_inflection&quot;:&quot;default&quot;,&quot;prefix&quot;:null,&quot;suffix&quot;:null,&quot;amount&quot;:0.1,&quot;unit_id&quot;:59,&quot;unit_inflection&quot;:&quot;default&quot;,&quot;ingredient&quot;:{&quot;id&quot;:48,&quot;afp_id&quot;:1670,&quot;name_singular&quot;:&quot;kakao&quot;,&quot;name_plural&quot;:&quot;kakao&quot;,&quot;sponsored_ingredient&quot;:null},&quot;unit&quot;:{&quot;id&quot;:59,&quot;name_singular&quot;:&quot;matsked&quot;,&quot;name_plural&quot;:&quot;matskedar&quot;,&quot;abbreviation&quot;:&quot;msk&quot;}},{&quot;id&quot;:71125,&quot;recipe_group_id&quot;:19607,&quot;ingredient_id&quot;:62,&quot;ingredient_inflection&quot;:&quot;default&quot;,&quot;prefix&quot;:null,&quot;suffix&quot;:null,&quot;amount&quot;:0.06,&quot;unit_id&quot;:60,&quot;unit_inflection&quot;:&quot;default&quot;,&quot;ingredient&quot;:{&quot;id&quot;:62,&quot;afp_id&quot;:1642,&quot;name_singular&quot;:&quot;vaniljsocker&quot;,&quot;name_plural&quot;:&quot;vaniljsocker&quot;,&quot;sponsored_ingredient&quot;:null},&quot;unit&quot;:{&quot;id&quot;:60,&quot;name_singular&quot;:&quot;tesked&quot;,&quot;name_plural&quot;:&quot;teskedar&quot;,&quot;abbreviation&quot;:&quot;tsk&quot;}},{&quot;id&quot;:71126,&quot;recipe_group_id&quot;:19607,&quot;ingredient_id&quot;:305,&quot;ingredient_inflection&quot;:&quot;default&quot;,&quot;prefix&quot;:&quot;starkt&quot;,&quot;suffix&quot;:&quot;, typ espresso&quot;,&quot;amount&quot;:0.08,&quot;unit_id&quot;:59,&quot;unit_inflection&quot;:&quot;default&quot;,&quot;ingredient&quot;:{&quot;id&quot;:305,&quot;afp_id&quot;:2008,&quot;name_singular&quot;:&quot;kaffe&quot;,&quot;name_plural&quot;:&quot;kaffe&quot;,&quot;sponsored_ingredient&quot;:null},&quot;unit&quot;:{&quot;id&quot;:59,&quot;name_singular&quot;:&quot;matsked&quot;,&quot;name_plural&quot;:&quot;matskedar&quot;,&quot;abbreviation&quot;:&quot;msk&quot;}}]},{&quot;id&quot;:19608,&quot;recipe_id&quot;:5914,&quot;title&quot;:&quot;Garnering&quot;,&quot;sort_order&quot;:1,&quot;ingredients&quot;:[{&quot;id&quot;:71127,&quot;recipe_group_id&quot;:19608,&quot;ingredient_id&quot;:67,&quot;ingredient_inflection&quot;:&quot;default&quot;,&quot;prefix&quot;:null,&quot;suffix&quot;:&quot;eller kokosflingor&quot;,&quot;amount&quot;:0.08,&quot;unit_id&quot;:53,&quot;unit_inflection&quot;:&quot;default&quot;,&quot;ingredient&quot;:{&quot;id&quot;:67,&quot;afp_id&quot;:1884,&quot;name_singular&quot;:&quot;p\u00e4rlsocker&quot;,&quot;name_plural&quot;:&quot;p\u00e4rlsocker&quot;,&quot;sponsored_ingredient&quot;:null},&quot;unit&quot;:{&quot;id&quot;:53,&quot;name_singular&quot;:&quot;deciliter&quot;,&quot;name_plural&quot;:&quot;deciliter&quot;,&quot;abbreviation&quot;:&quot;dl&quot;}}]}],&quot;grouped_instructions&quot;:[{&quot;id&quot;:19609,&quot;recipe_id&quot;:5914,&quot;title&quot;:null,&quot;sort_order&quot;:0,&quot;instructions&quot;:[{&quot;id&quot;:28954,&quot;recipe_group_id&quot;:19609,&quot;instruction&quot;:&quot;R\u00f6r sm\u00f6r, socker, kakao och vaniljsocker por\u00f6st. G\u00e4rna med en elvisp eller k\u00f6ksassistent.&quot;},{&quot;id&quot;:28955,&quot;recipe_group_id&quot;:19609,&quot;instruction&quot;:&quot;Tills\u00e4tt resterande ingredienser och arbeta ihop till en j\u00e4mn smet med h\u00e4nderna.&quot;},{&quot;id&quot;:28956,&quot;recipe_group_id&quot;:19609,&quot;instruction&quot;:&quot;Jag kyler aldrig kaffet. Jag bereder det n\u00e4r jag b\u00f6rjar vispa sm\u00f6r och socker och tills\u00e4tter det ljummet.&quot;},{&quot;id&quot;:28957,&quot;recipe_group_id&quot;:19609,&quot;instruction&quot;:&quot;L\u00e5t smeten st\u00e5 i 15 minuter s\u00e5 den sv\u00e4ller lite.&quot;},{&quot;id&quot;:28958,&quot;recipe_group_id&quot;:19609,&quot;instruction&quot;:&quot;Rulla bollar av smeten och rulla sedan dessa i p\u00e4rlsocker eller kokosflingor.&quot;},{&quot;id&quot;:28959,&quot;recipe_group_id&quot;:19609,&quot;instruction&quot;:&quot;St\u00e4ll i kyl f\u00f6r att stelna, men l\u00e5t g\u00e4rna rumstempereras innan servering.&quot;}]}],&quot;grouped_equipment&quot;:[],&quot;serving_size_type&quot;:{&quot;id&quot;:8,&quot;name_singular&quot;:&quot;styck&quot;,&quot;name_plural&quot;:&quot;stycken&quot;},&quot;allergies&quot;:[{&quot;id&quot;:3,&quot;afp_id&quot;:10,&quot;name&quot;:&quot;Gluten&quot;,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-10T11:28:07.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-10T11:28:07.000000Z&quot;,&quot;laravel_through_key&quot;:5914}],&quot;preferences&quot;:[{&quot;id&quot;:1,&quot;afp_id&quot;:4,&quot;name&quot;:&quot;Utan fl\u00e4sk&quot;,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-10T11:28:07.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-10T11:28:07.000000Z&quot;,&quot;laravel_through_key&quot;:5914},{&quot;id&quot;:3,&quot;afp_id&quot;:6,&quot;name&quot;:&quot;Vegetarian&quot;,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-10T11:28:07.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-10T11:28:07.000000Z&quot;,&quot;laravel_through_key&quot;:5914}],&quot;nutrition&quot;:{&quot;id&quot;:5857,&quot;recipe_id&quot;:5914,&quot;kilojoules&quot;:365.782544,&quot;calories&quot;:87.4242,&quot;protein&quot;:0.70294,&quot;carbohydrates&quot;:12.60218,&quot;fat&quot;:3.7273,&quot;contains_alcohol&quot;:false,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2021-05-10T08:56:05.000000Z&quot;,&quot;updated_at&quot;:&quot;2024-01-07T00:17:48.000000Z&quot;},&quot;media&quot;:[{&quot;id&quot;:13868,&quot;entity_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;entity_id&quot;:5914,&quot;media_path&quot;:&quot;images\/recipes\/chokladbollar-grundrecept_13868.jpg&quot;,&quot;description&quot;:&quot;Chokladbollar \u2013 grundrecept&quot;,&quot;copyright&quot;:&quot;Christina Uhlin&quot;,&quot;crop_data&quot;:{&quot;x&quot;:0,&quot;y&quot;:884.4700479023002,&quot;width&quot;:2895,&quot;height&quot;:2895,&quot;rotate&quot;:0,&quot;scaleX&quot;:1,&quot;scaleY&quot;:1},&quot;width&quot;:2895,&quot;height&quot;:4096,&quot;is_primary&quot;:true,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/chokladbollar-grundrecept_13868.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.56932862497615&amp;fp-z=1&quot;,&quot;raw_url&quot;:&quot;https:\/\/s3-eu-west-1.amazonaws.com\/se-recept-assets-prod\/images\/recipes\/chokladbollar-grundrecept_13868.jpg&quot;}],&quot;native_content&quot;:null,&quot;tags&quot;:[{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;,&quot;tag_group_id&quot;:1,&quot;image_url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bak-dessert-1.jpg&quot;,&quot;pinterestImage&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bak-dessert-1.jpg&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;pivot&quot;:{&quot;taggable_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;taggable_id&quot;:5914,&quot;tag_id&quot;:1,&quot;created_at&quot;:null,&quot;updated_at&quot;:null},&quot;group&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Huvudkategori&quot;,&quot;slug&quot;:&quot;huvudkategori&quot;,&quot;sort_order&quot;:0,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-10T11:14:44.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-10T11:14:44.000000Z&quot;},&quot;media&quot;:{&quot;id&quot;:8626,&quot;afp_id&quot;:null,&quot;type&quot;:&quot;image&quot;,&quot;entity_type&quot;:&quot;App\\Models\\Tags\\Tag&quot;,&quot;entity_id&quot;:1,&quot;entity_relation&quot;:null,&quot;description&quot;:null,&quot;copyright&quot;:null,&quot;is_copyright_pristine&quot;:true,&quot;media_path&quot;:&quot;images\/categories\/bak-dessert-1.jpg&quot;,&quot;mime_type&quot;:&quot;image\/jpeg&quot;,&quot;file_size&quot;:77847,&quot;width&quot;:520,&quot;height&quot;:520,&quot;length&quot;:null,&quot;crop_data&quot;:null,&quot;is_enabled&quot;:false,&quot;is_primary&quot;:false,&quot;in_gallery&quot;:false,&quot;is_embed&quot;:false,&quot;sort_order&quot;:null,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2020-09-24T05:36:46.000000Z&quot;,&quot;updated_at&quot;:&quot;2020-09-24T05:36:46.000000Z&quot;,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bak-dessert-1.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.5&amp;fp-z=1.0&quot;,&quot;raw_url&quot;:&quot;https:\/\/s3-eu-west-1.amazonaws.com\/se-recept-assets-prod\/images\/categories\/bak-dessert-1.jpg&quot;}},{&quot;id&quot;:17,&quot;name&quot;:&quot;Bakverk&quot;,&quot;slug&quot;:&quot;bakverk&quot;,&quot;tag_group_id&quot;:3,&quot;image_url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bakverk-17.jpg&quot;,&quot;pinterestImage&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bakverk-17.jpg&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;pivot&quot;:{&quot;taggable_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;taggable_id&quot;:5914,&quot;tag_id&quot;:17,&quot;created_at&quot;:null,&quot;updated_at&quot;:null},&quot;group&quot;:{&quot;id&quot;:3,&quot;name&quot;:&quot;Typ av recept&quot;,&quot;slug&quot;:&quot;typ-av-recept&quot;,&quot;sort_order&quot;:2,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-16T13:10:47.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-16T13:10:47.000000Z&quot;},&quot;media&quot;:{&quot;id&quot;:8640,&quot;afp_id&quot;:null,&quot;type&quot;:&quot;image&quot;,&quot;entity_type&quot;:&quot;App\\Models\\Tags\\Tag&quot;,&quot;entity_id&quot;:17,&quot;entity_relation&quot;:null,&quot;description&quot;:null,&quot;copyright&quot;:null,&quot;is_copyright_pristine&quot;:true,&quot;media_path&quot;:&quot;images\/categories\/bakverk-17.jpg&quot;,&quot;mime_type&quot;:&quot;image\/jpeg&quot;,&quot;file_size&quot;:44785,&quot;width&quot;:520,&quot;height&quot;:520,&quot;length&quot;:null,&quot;crop_data&quot;:null,&quot;is_enabled&quot;:false,&quot;is_primary&quot;:false,&quot;in_gallery&quot;:false,&quot;is_embed&quot;:false,&quot;sort_order&quot;:null,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2020-09-24T05:36:48.000000Z&quot;,&quot;updated_at&quot;:&quot;2020-09-24T05:36:48.000000Z&quot;,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bakverk-17.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.5&amp;fp-z=1.0&quot;,&quot;raw_url&quot;:&quot;https:\/\/s3-eu-west-1.amazonaws.com\/se-recept-assets-prod\/images\/categories\/bakverk-17.jpg&quot;}},{&quot;id&quot;:56,&quot;name&quot;:&quot;Dop&quot;,&quot;slug&quot;:&quot;dop&quot;,&quot;tag_group_id&quot;:5,&quot;image_url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/dop-20191216121106.jpg&quot;,&quot;pinterestImage&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/dop-20191216121106.jpg&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;pivot&quot;:{&quot;taggable_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;taggable_id&quot;:5914,&quot;tag_id&quot;:56,&quot;created_at&quot;:null,&quot;updated_at&quot;:null},&quot;group&quot;:{&quot;id&quot;:5,&quot;name&quot;:&quot;H\u00f6gtid&quot;,&quot;slug&quot;:&quot;hogtid&quot;,&quot;sort_order&quot;:4,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-16T13:10:47.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-16T13:10:47.000000Z&quot;},&quot;media&quot;:{&quot;id&quot;:8679,&quot;afp_id&quot;:null,&quot;type&quot;:&quot;image&quot;,&quot;entity_type&quot;:&quot;App\\Models\\Tags\\Tag&quot;,&quot;entity_id&quot;:56,&quot;entity_relation&quot;:null,&quot;description&quot;:null,&quot;copyright&quot;:null,&quot;is_copyright_pristine&quot;:true,&quot;media_path&quot;:&quot;images\/categories\/dop-20191216121106.jpg&quot;,&quot;mime_type&quot;:&quot;image\/jpeg&quot;,&quot;file_size&quot;:58683,&quot;width&quot;:520,&quot;height&quot;:520,&quot;length&quot;:null,&quot;crop_data&quot;:null,&quot;is_enabled&quot;:false,&quot;is_primary&quot;:false,&quot;in_gallery&quot;:false,&quot;is_embed&quot;:false,&quot;sort_order&quot;:null,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2020-09-24T05:36:53.000000Z&quot;,&quot;updated_at&quot;:&quot;2020-09-24T05:36:53.000000Z&quot;,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/dop-20191216121106.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.5&amp;fp-z=1.0&quot;,&quot;raw_url&quot;:&quot;https:\/\/s3-eu-west-1.amazonaws.com\/se-recept-assets-prod\/images\/categories\/dop-20191216121106.jpg&quot;}},{&quot;id&quot;:38,&quot;name&quot;:&quot;F\u00f6delsedag&quot;,&quot;slug&quot;:&quot;fodelsedag&quot;,&quot;tag_group_id&quot;:5,&quot;image_url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/fodelsedag-38-59.jpg&quot;,&quot;pinterestImage&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/fodelsedag-38-59.jpg&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;pivot&quot;:{&quot;taggable_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;taggable_id&quot;:5914,&quot;tag_id&quot;:38,&quot;created_at&quot;:null,&quot;updated_at&quot;:null},&quot;group&quot;:{&quot;id&quot;:5,&quot;name&quot;:&quot;H\u00f6gtid&quot;,&quot;slug&quot;:&quot;hogtid&quot;,&quot;sort_order&quot;:4,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-16T13:10:47.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-16T13:10:47.000000Z&quot;},&quot;media&quot;:{&quot;id&quot;:8661,&quot;afp_id&quot;:null,&quot;type&quot;:&quot;image&quot;,&quot;entity_type&quot;:&quot;App\\Models\\Tags\\Tag&quot;,&quot;entity_id&quot;:38,&quot;entity_relation&quot;:null,&quot;description&quot;:null,&quot;copyright&quot;:null,&quot;is_copyright_pristine&quot;:true,&quot;media_path&quot;:&quot;images\/categories\/fodelsedag-38-59.jpg&quot;,&quot;mime_type&quot;:&quot;image\/jpeg&quot;,&quot;file_size&quot;:93108,&quot;width&quot;:520,&quot;height&quot;:520,&quot;length&quot;:null,&quot;crop_data&quot;:null,&quot;is_enabled&quot;:false,&quot;is_primary&quot;:false,&quot;in_gallery&quot;:false,&quot;is_embed&quot;:false,&quot;sort_order&quot;:null,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2020-09-24T05:36:50.000000Z&quot;,&quot;updated_at&quot;:&quot;2020-09-24T05:36:50.000000Z&quot;,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/fodelsedag-38-59.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.5&amp;fp-z=1.0&quot;,&quot;raw_url&quot;:&quot;https:\/\/s3-eu-west-1.amazonaws.com\/se-recept-assets-prod\/images\/categories\/fodelsedag-38-59.jpg&quot;}}],&quot;seo&quot;:{&quot;entity_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;entity_id&quot;:5914,&quot;title&quot;:&quot;Chokladbollar \u2013 grundrecept&quot;,&quot;description&quot;:&quot;Klassiska chokladbollar med havregryn, sm\u00f6r, socker, kakao och kaffe. Smaks\u00e4tt g\u00e4rna smeten med flingsalt, brynt sm\u00f6r eller lik\u00f6r.&quot;},&quot;brand&quot;:{&quot;id&quot;:9,&quot;afp_id&quot;:8,&quot;name&quot;:&quot;Recept.se&quot;,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-16T23:10:16.000000Z&quot;,&quot;updated_at&quot;:&quot;2019-09-16T23:10:16.000000Z&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;tag_group_id&quot;:1,&quot;tag_type&quot;:&quot;App\\Models\\Recipes\\Recipe&quot;,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;,&quot;description&quot;:&quot;&lt;p&gt;Om du gillar bakning och desserter har du hamnat r&amp;auml;tt! H&amp;auml;r hittar du massor av goda och enkla recept f&amp;ouml;r b&amp;aring;de vardag och fest. Allt fr&amp;aring;n br&amp;ouml;d och bullar till kakor och t&amp;aring;rtor. Varf&amp;ouml;r inte baka en frasig paj eller laga en mumsig efterr&amp;auml;tt?&lt;\/p&gt;&quot;,&quot;color&quot;:&quot;#F2C0B7&quot;,&quot;sort_order&quot;:0,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2019-09-10T11:14:44.000000Z&quot;,&quot;updated_at&quot;:&quot;2024-01-18T00:03:02.000000Z&quot;,&quot;image_url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bak-dessert-1.jpg&quot;,&quot;pinterestImage&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bak-dessert-1.jpg&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;id&quot;:8626,&quot;afp_id&quot;:null,&quot;type&quot;:&quot;image&quot;,&quot;entity_type&quot;:&quot;App\\Models\\Tags\\Tag&quot;,&quot;entity_id&quot;:1,&quot;entity_relation&quot;:null,&quot;description&quot;:null,&quot;copyright&quot;:null,&quot;is_copyright_pristine&quot;:true,&quot;media_path&quot;:&quot;images\/categories\/bak-dessert-1.jpg&quot;,&quot;mime_type&quot;:&quot;image\/jpeg&quot;,&quot;file_size&quot;:77847,&quot;width&quot;:520,&quot;height&quot;:520,&quot;length&quot;:null,&quot;crop_data&quot;:null,&quot;is_enabled&quot;:false,&quot;is_primary&quot;:false,&quot;in_gallery&quot;:false,&quot;is_embed&quot;:false,&quot;sort_order&quot;:null,&quot;deleted_at&quot;:null,&quot;created_at&quot;:&quot;2020-09-24T05:36:46.000000Z&quot;,&quot;updated_at&quot;:&quot;2020-09-24T05:36:46.000000Z&quot;,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/categories\/bak-dessert-1.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.5&amp;fp-z=1.0&quot;,&quot;raw_url&quot;:&quot;https:\/\/s3-eu-west-1.amazonaws.com\/se-recept-assets-prod\/images\/categories\/bak-dessert-1.jpg&quot;}}}"
+        :related-recipes="[{&quot;comment_cnt&quot;:0,&quot;id&quot;:12432,&quot;title&quot;:&quot;Grundrecept lantbr\u00f6d&quot;,&quot;slug&quot;:&quot;grundrecept-lantbrod&quot;,&quot;total_time&quot;:60,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/grundrecept-lantbrod_29425.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.48829663420282&amp;fp-y=0.4469856262207&amp;fp-z=1.1186598699554&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;Grundrecept lantbr\u00f6d.&quot;,&quot;id&quot;:29425,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/grundrecept-lantbrod_29425.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.48829663420282&amp;fp-y=0.4469856262207&amp;fp-z=1.1186598699554&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;5.0&quot;,&quot;rating_cnt&quot;:5,&quot;badge&quot;:null},{&quot;comment_cnt&quot;:0,&quot;id&quot;:1892,&quot;title&quot;:&quot;Grundrecept saffransdeg&quot;,&quot;slug&quot;:&quot;grundrecept-saffransdeg&quot;,&quot;total_time&quot;:90,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/grundrecept-saffransdeg_7250.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.47163120567376&amp;fp-y=0.44148936170213&amp;fp-z=1.25&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;Grundrecept saffransdeg.&quot;,&quot;id&quot;:7250,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/grundrecept-saffransdeg_7250.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.47163120567376&amp;fp-y=0.44148936170213&amp;fp-z=1.25&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;0.0&quot;,&quot;rating_cnt&quot;:0,&quot;badge&quot;:null},{&quot;comment_cnt&quot;:4,&quot;id&quot;:3981,&quot;title&quot;:&quot;Glutenfri sockerkaka \u2013\u00a0bra grundrecept&quot;,&quot;slug&quot;:&quot;glutenfri-sockerkaka-bra-grundrecept&quot;,&quot;total_time&quot;:60,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/glutenfri-sockerkaka-bra-grundrecept_8194.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.48506370919371&amp;fp-y=0.5155402932363&amp;fp-z=1.0330578512397&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;Glutenfri sockerkaka \u2013\u00a0bra grundrecept.&quot;,&quot;id&quot;:8194,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/glutenfri-sockerkaka-bra-grundrecept_8194.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.48506370919371&amp;fp-y=0.5155402932363&amp;fp-z=1.0330578512397&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;4.8&quot;,&quot;rating_cnt&quot;:13,&quot;badge&quot;:null},{&quot;comment_cnt&quot;:0,&quot;id&quot;:3987,&quot;title&quot;:&quot;Glutenfria tortillabr\u00f6d \u2013 enkelt grundrecept&quot;,&quot;slug&quot;:&quot;glutenfria-tortillabrod-enkelt-grundrecept&quot;,&quot;total_time&quot;:45,&quot;is_sponsored&quot;:false,&quot;pinterest_image_url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/glutenfria-tortillabrod-enkelt-grundrecept_8200.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.6666259765625&amp;fp-z=1&amp;w=556&amp;h=556&amp;dpr=2&amp;auto=format&quot;,&quot;media&quot;:{&quot;description&quot;:&quot;Glutenfria tortillabr\u00f6d \u2013 enkelt grundrecept.&quot;,&quot;id&quot;:8200,&quot;url&quot;:&quot;https:\/\/images.recept.se\/images\/recipes\/glutenfria-tortillabrod-enkelt-grundrecept_8200.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.6666259765625&amp;fp-z=1&quot;},&quot;primary_tag&quot;:{&quot;id&quot;:1,&quot;name&quot;:&quot;Bak &amp; dessert&quot;,&quot;slug&quot;:&quot;bak-dessert&quot;},&quot;native_content&quot;:null,&quot;rating_avg&quot;:&quot;4.0&quot;,&quot;rating_cnt&quot;:2,&quot;badge&quot;:null}]"
+        :video="{&quot;before_src&quot;:&quot;https:\/\/cdn.jwplayer.com\/players\/ypKVhDEj-NoEaZwru.html&quot;,&quot;src&quot;:&quot;https:\/\/cdn.jwplayer.com\/players\/yrtKDsVt-BzIUeZ9c.js?search=__CONTEXTUAL__&quot;}"
+    ></page-recipe>
+
+    <page-footer
+        footer-text="Ansvarig utgivare: Cia Jansson"
+    ></page-footer>
+    <button id="cookiePreferences" class="fixed left-0  pl-2r0 pb-2r0 z-10 print:hidden
+            bottom-[13.8rem]
+        " onclick="javascript:OneTrust.ToggleInfoDisplay();" aria-label="Visa inställningar för kakor">
+        <div class="w-3r6 h-3r6 flex items-center justify-center cursor-pointer shadow-cookie rounded-2r0 bg-white md:w-4r0 md:h-4r0">
+            <img
+                src="https://images.recept.se/ui/svg/cookie-preferences.svg"
+                width="24"
+                height="24"
+                alt="Visa inställningar för kakor"
+            >
+        </div>
+    </button>
+</div>
+    </div>
+    <script type="text/javascript">
+    window.env = {
+        release: 'e42cf99f8d3e7d02682182bf638f34f1e61ca34a',
+        environment: 'production'
+    }
+</script>
+<script type="text/javascript" src="/assets/js/app/app.30995be9d3a61172b18560d56a3d15f6.js?x=y&consent=1" async data-cssoverride=""></script>
+
+
+<script type="text/javascript" async>
+    window.allerUserConsent = window.allerUserConsent || {};
+    window.allerUserConsent.queue = allerUserConsent.queue || [];
+</script>
+
+<script type="text/javascript" src="/assets/js/app/consent-2.1.7.js" async></script>
+
+
+<script type="text/javascript" async>
+    window.optimizes = [];
+</script>
+
+<script type="text/javascript" async>
+            window.onetrustId = 'f87718f0-dd17-405b-83f2-8534dc992859';
+            window.displayAds = true;
+            window.isNativeAd = false;
+            window.autoloadAds = false;
+            window.adsUniqueId = 1;
+    </script>
+
+<script async type="text/javascript">
+    var adsmtag = adsmtag || {};
+    adsmtag.cmd = adsmtag.cmd || [];
+</script>
+
+
+<script type="text/javascript" async>
+    window.allerUserConsent.queue.push(() => {
+            window.userConsent.loadTargetingScript('//macro.adnami.io/macro/spec/adsm.macro.747590aa-4758-4281-839e-4b9b65def16a.js', { async: true });
+    
+            window.userConsent.loadTargetingScript('https://micro.rubiconproject.com/prebid/dynamic/13012.js', { async: true });
+    
+        window.userConsent.loadTargetingScript('//securepubads.g.doubleclick.net/tag/js/gpt.js', { async: true });
+        window.userConsent.loadTargetingScript('https://cdn.aller.se/dfp/1.13.40/aller-ads.bundle.min.js', { async: true });
+    });
+</script>
+
+
+<script type="text/javascript" async>
+    window.allerUserConsent.queue.push(() => {
+        window.userConsent.loadTargetingScript('https://cdn.aller.se/cts/v1.11.23/se-recept/bundle.js', { async: true });
+    });
+</script>
+<script type="text/javascript">
+        window.aller_ga = {
+            id: 5914,
+                        isMobile: '0',
+                        contentGroup: 'recipe',
+            postTitle: 'Chokladbollar – grundrecept',
+            postDate: '2021-05-10',
+            postAuthor: 'Sandra Palmqvist',
+            categories: 'Bak & dessert',
+            isAffiliate: '0',
+            isPlusArticle: '0',
+            loggedIn: '0',
+            seoTitle: 'Chokladbollar – grundrecept',
+            seoDescription: 'Klassiska chokladbollar med havregryn, smör, socker, kakao och kaffe. Smaksätt gärna smeten med flingsalt, brynt smör eller likör.',
+            verticals: ['mat']
+                    };
+    </script>
+    <script type="cts/metadata" id="ctsMetaData">
+        {
+            "pageId": "5914",
+            "author": "Sandra Palmqvist",
+            "loggedIn": "0",
+            "contentType": "recipe",
+            "affiliateBool": "0",
+            "publishedTimeUpdated": "2021-05-10",
+            "verticals": ["mat"]
+                    }
+    </script>
+
+<script type="text/javascript">
+  window.cts = window.cts || {};
+  window.cts.config = {
+            tags: [
+        'csMatchingKey',
+        'engagedTime',
+        'mappingId',
+        'scrollDepth'
+      ],
+      ga: {
+        propertyId: 'UA-62477307-75',
+        measurementId: 'G-9E46LT8TNJ'
+      },
+      parsely: {
+        siteId: 'recept.se'
+      },
+      tealium: {
+        account: 'aller-media-sweden',
+        profile: 'main',
+        environment: 'prod'
+      },
+      jwplayer: true
+  };
+</script>
+
+
+<script type="text/javascript" async>
+    window.allerUserConsent.queue.push(() => {
+        window.userConsent.applyForTargeting(() => {
+            try {
+                document.cookie = 'ab-aller=; max-age=34560000; SameSite=Lax; Secure'; 
+            } catch { /* Ignore */ }
+        });
+    });
+</script>
+
+
+<script type="text/javascript" async>
+    window.allerUserConsent.queue.push(() => {
+        window.userConsent.applyForTargeting(() => {
+            window.dataLayer = window.dataLayer || [];
+            dataLayer.push([]);
+            (function (w, d, s, l, i) {
+                w[l] = w[l] || [];
+                w[l].push({
+                    'gtm.start': new Date().getTime(),
+                    event: 'gtm.js'
+                });
+                var f = d.getElementsByTagName(s)[0],
+                    j = d.createElement(s),
+                    dl = l != 'dataLayer' ? '&l=' + l : '';
+                j.async = true;
+                j.src = '//analytics.recept.se/gtm.js?id=' + i + dl;
+                f.parentNode.insertBefore(j,f);
+            })(window, document, 'script', 'dataLayer', 'GTM-N5W5MFB');
+        });
+    });
+</script>
+
+
+<script type="text/javascript" async>
+    window.allerUserConsent.queue.push(() => {
+        window.userConsent.applyForTargeting(() => {
+            !function(f,b,e,v,n,t,s)
+            {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
+            n.callMethod.apply(n,arguments):n.queue.push(arguments)};
+            if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
+            n.queue=[];t=b.createElement(e);t.async=!0;
+            t.src=v;s=b.getElementsByTagName(e)[0];
+            s.parentNode.insertBefore(t,s)}(window, document,'script',
+            'https://connect.facebook.net/en_US/fbevents.js');
+            fbq('init', '715602168975418');
+            fbq('track', 'PageView');
+        });
+    });
+</script>
+<noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=715602168975418&ev=PageView&noscript=1" /></noscript>
+
+
+    <script type="application/ld+json">
+        {"@context":"http:\/\/schema.org","@type":"Recipe","author":{"@type":"Person","name":"Sandra Palmqvist","sameAs":"https:\/\/recept.se\/skribent\/sandra-palmqvist"},"creator":{"@type":"Person","name":"Sandra Palmqvist"},"name":"Chokladbollar \u2013 grundrecept","headline":"Chokladbollar \u2013 grundrecept","totalTime":"PT30M","nutrition":{"@type":"NutritionInformation","calories":"87424 calories","carbohydrateContent":"12.6 g","fatContent":"3.7 g","proteinContent":"0.7 g","servingSize":"1 styck"},"recipeInstructions":[{"@type":"HowToStep","text":"R\u00f6r sm\u00f6r, socker, kakao och vaniljsocker por\u00f6st. G\u00e4rna med en elvisp eller k\u00f6ksassistent."},{"@type":"HowToStep","text":"Tills\u00e4tt resterande ingredienser och arbeta ihop till en j\u00e4mn smet med h\u00e4nderna."},{"@type":"HowToStep","text":"Jag kyler aldrig kaffet. Jag bereder det n\u00e4r jag b\u00f6rjar vispa sm\u00f6r och socker och tills\u00e4tter det ljummet."},{"@type":"HowToStep","text":"L\u00e5t smeten st\u00e5 i 15 minuter s\u00e5 den sv\u00e4ller lite."},{"@type":"HowToStep","text":"Rulla bollar av smeten och rulla sedan dessa i p\u00e4rlsocker eller kokosflingor."},{"@type":"HowToStep","text":"St\u00e4ll i kyl f\u00f6r att stelna, men l\u00e5t g\u00e4rna rumstempereras innan servering."}],"recipeIngredient":["3 dl havregryn","100 g mjukt och rumstempererat sm\u00f6r","1 dl str\u00f6socker","2,5 msk kakao","1,5 tsk vaniljsocker","2 msk starkt kaffe, typ espresso","2 dl p\u00e4rlsocker eller kokosflingor"],"copyrightHolder":"Aller Media AB","url":"https:\/\/recept.se\/recept\/chokladbollar-grundrecept","datePublished":"2021-05-10T09:00:00.000000Z","recipeYield":25,"image":"https:\/\/images.recept.se\/images\/recipes\/chokladbollar-grundrecept_13868.jpg?fit=crop&crop=focalpoint&auto=format&fp-x=0.5&fp-y=0.56932862497615&fp-z=1&w=1200&h=1200","thumbnailUrl":"https:\/\/images.recept.se\/images\/recipes\/chokladbollar-grundrecept_13868.jpg?fit=crop&crop=focalpoint&auto=format&fp-x=0.5&fp-y=0.56932862497615&fp-z=1&w=1200&h=1200","recipeCategory":"Bak & dessert","cookTime":"PT15M","description":"Klassiska chokladbollar med havregryn, sm\u00f6r, socker, kakao och kaffe. Smaks\u00e4tt g\u00e4rna smeten med flingsalt, brynt sm\u00f6r eller lik\u00f6r.","suitableForDiet":"http:\/\/schema.org\/LowLactoseDiet","keywords":"laktosfri,laktosfri,vegetarian,vegetariansk,bak & dessert,bakverk,dop,f\u00f6delsedag,utan fl\u00e4sk,vegetarian","aggregateRating":{"@type":"AggregateRating","ratingValue":"4.4","ratingCount":197,"bestRating":5,"worstRating":1},"reviews":[{"@type":"Review","dateCreated":"2024-01-26","reviewBody":"Jag tycker att dessa chokladbollar blev v\u00e4ldigt smakliga!\ud83d\ude01\ud83d\ude0e\ud83d\udca9","author":{"@type":"Person","name":"Tage"}},{"@type":"Review","dateCreated":"2024-01-26","reviewBody":"Jag tycker att dessa chokladbollar blev v\u00e4ldigt smakliga!\ud83d\ude01\ud83d\ude0e\ud83d\udca9","author":{"@type":"Person","name":"Tage"}},{"@type":"Review","dateCreated":"2023-12-20","reviewBody":"Hej igen .\nKan man frysa in dem?","author":{"@type":"Person","name":"Parvin"}},{"@type":"Review","dateCreated":"2023-12-20","reviewBody":"Hej igen .\nKan man frysa in dem?","author":{"@type":"Person","name":"Parvin"}},{"@type":"Review","dateCreated":"2023-11-26","reviewBody":"Jag tycker att det blev 25 och de va v\u00e4ldigt goda","author":{"@type":"Person","name":"Ali"}},{"@type":"Review","dateCreated":"2023-11-26","reviewBody":"Jag tycker att det blev 25 och de va v\u00e4ldigt goda","author":{"@type":"Person","name":"Ali"}},{"@type":"Review","dateCreated":"2023-11-11","reviewBody":"Det skulle bli 25 stycken och det blev 13","author":{"@type":"Person","name":"Oscar"}},{"@type":"Review","dateCreated":"2023-11-11","reviewBody":"Det skulle bli 25 stycken och det blev 13","author":{"@type":"Person","name":"Oscar"}},{"@type":"Review","dateCreated":"2023-11-02","reviewBody":"De \u00e4r ju f\u00f6r all del glutenfria, men skulle \u00f6nska andra glutenfria recept fr\u00e5n er.","author":{"@type":"Person","name":"Anna-Lena Larsson"}},{"@type":"Review","dateCreated":"2023-11-02","reviewBody":"De \u00e4r ju f\u00f6r all del glutenfria, men skulle \u00f6nska andra glutenfria recept fr\u00e5n er.","author":{"@type":"Person","name":"Anna-Lena Larsson"}}]}
+    </script>
+    <script type="application/ld+json">
+        {"@context":"http:\/\/schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/recept.se\/recept","name":"Recept"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/recept.se\/kategori\/bak-dessert","name":"Bak & dessert"}},{"@type":"ListItem","position":3,"item":{"@id":"https:\/\/recept.se\/recept\/chokladbollar-grundrecept","name":"Chokladbollar \u2013 grundrecept"}}]}
+    </script>
+        <script type="text/javascript">
+        window.additionalTargets = {"ingredients":["havregryn","sm\u00f6r","str\u00f6socker","kakao","vaniljsocker","kaffe","p\u00e4rlsocker"],"allergies":["Gluten"],"preferences":["Utan fl\u00e4sk","Vegetarian"],"tags":["Bak & dessert","Bakverk","Dop","F\u00f6delsedag"]};
+    </script>
+    
+    <!-- Strossle SDK -->
+    <script type="text/javascript" async="async">
+        window.allerUserConsent.queue.push(() => {
+            window.userConsent.loadEssentialScript('https://assets.strossle.com/strossle-widget-sdk/1/strossle-widget-sdk.js', { async: true, defer: true });
+        });
+    </script>
+    <!-- End Strossle SDK -->
+
+    <script type="text/javascript" async="async">
+        window.allerUserConsent.queue.push(() => {
+            window.userConsent.loadSocialMediaScript('https://assets.pinterest.com/js/pinit.js', { async: true, defer: true });
+        });
+    </script>
+        <script type="text/javascript">
+            window.dataLayer = window.dataLayer || [];
+            window.dataLayer.push({
+                'pageType': 'recipe',
+                'advertorial': '0',
+                'articleBodyTextContainerId': 'article-body-text',
+                'articleContainerId': 'recipe-ingredients-instructions-content',
+                'author': 'Sandra Palmqvist',
+                'brandName': 'RECEPT',
+                'brandNameOriginal': 'Recept.se',
+                                'breadCrumbs': 'Recept > Bak &amp; dessert > Chokladbollar – grundrecept',
+                                'country': 'se',
+                'expiryDate': '',
+                'issueDate': '20210510',
+                'language': 'sv-SE',
+                'loggedIn': '0',
+                'pageID': '5914',
+                'pageLicenseType': 'Free',
+                'pagePrimaryHeading': 'Chokladbollar – grundrecept',
+                'pagePrimaryImage': 'https://images.recept.se/images/recipes/chokladbollar-grundrecept_13868.jpg?fit=crop&amp;crop=focalpoint&amp;auto=format&amp;fp-x=0.5&amp;fp-y=0.56932862497615&amp;fp-z=1&amp;w=1200&amp;h=628',
+                'primaryCategory': 'Bak & dessert',
+                'recipeAllergens': 'Gluten',
+                'recipeAmount': '25 stycken',
+                'recipeCategoryCountry': '',
+                'recipeCategoryMeal': '',
+                'recipeCategoryOccasion': 'Dop, Födelsedag',
+                'recipeCategorySeason': '',
+                'recipeCategoryType': 'Bakverk',
+                'recipeIngredients': 'havregryn, smör, strösocker, kakao, vaniljsocker, kaffe, pärlsocker',
+                'recipeSteps': '1',
+                'recipeSuitableForDiet': 'Utan fläsk, Vegetarian',
+                'recipeTotalTime': '30',
+                'wordsCount': '135'
+            });
+        </script>
+    <script type="text/javascript">
+    
+                                                                </script>
+
+
+
+
+
+<script type="text/javascript" async="async">
+    window.allerUserConsent.queue.push(() => {
+        window.userConsent.applyForEssential(() => {
+            var MTIProjectId='773df79d-0c3e-4853-b015-4a0f02039d7f';
+            (function() {
+                    var mtiTracking = document.createElement('script');
+                    mtiTracking.type='text/javascript';
+                    mtiTracking.async='true';
+                    mtiTracking.src='/assets/fonts/ITCCheltenham/mtiFontTrackingCode.js';
+                    (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild( mtiTracking );
+            })();
+        });
+    });
+</script>
+</body>
+</html>