Repository: hhursev/recipe-scrapers
Pull request #509 (2022-03-12 16:26:46)

Add support for akispetretzikis.com
Add support for recipe site https://akispetretzikis.com

coveralls: 
[![Coverage Status](https://coveralls.io/builds/47306800/badge)](https://coveralls.io/builds/47306800)

Coverage decreased (-3.6%) to 91.655% when pulling **c248fe51e420bcc159df76d822ccf85884a1ce28 on hilmarp:akispetretzikis-scraper** into **6441750f649e02b33fdd60ccfa924b021e6c472c on hhursev:main**.

hhursev: Thanks! Merging and will bump version later today 😉 🍻 

Patch:
diff --git a/README.rst b/README.rst
index 06c79ec9..647318b2 100644
--- a/README.rst
+++ b/README.rst
@@ -82,6 +82,7 @@ Scrapers available for:
 - `https://claudia.abril.com.br/ <https://claudia.abril.com.br>`_
 - `https://www.acouplecooks.com <https://acouplecooks.com/>`_
 - `http://www.afghankitchenrecipes.com/ <http://www.afghankitchenrecipes.com/>`_
+- `https://akispetretzikis.com/ <https://akispetretzikis.com/>`_
 - `https://allrecipes.com/ <https://allrecipes.com/>`_
 - `https://alltommat.se/ <https://alltommat.se/>`_
 - `https://amazingribs.com/ <https://amazingribs.com/>`_
diff --git a/recipe_scrapers/__init__.py b/recipe_scrapers/__init__.py
index 31aa4dda..0db471c8 100644
--- a/recipe_scrapers/__init__.py
+++ b/recipe_scrapers/__init__.py
@@ -4,6 +4,7 @@ from ._utils import get_host_name
 from .abril import Abril
 from .acouplecooks import ACoupleCooks
 from .afghankitchenrecipes import AfghanKitchenRecipes
+from .akispetretzikis import AkisPetretzikis
 from .allrecipes import AllRecipes
 from .alltomat import AllTomat
 from .amazingribs import AmazingRibs
@@ -186,6 +187,7 @@ SCRAPERS = {
     ACoupleCooks.host(): ACoupleCooks,
     Abril.host(): Abril,
     AfghanKitchenRecipes.host(): AfghanKitchenRecipes,
+    AkisPetretzikis.host(): AkisPetretzikis,
     AllRecipes.host(): AllRecipes,
     AllTomat.host(): AllTomat,
     AmazingRibs.host(): AmazingRibs,
diff --git a/recipe_scrapers/akispetretzikis.py b/recipe_scrapers/akispetretzikis.py
new file mode 100644
index 00000000..260410ed
--- /dev/null
+++ b/recipe_scrapers/akispetretzikis.py
@@ -0,0 +1,85 @@
+import json
+
+from ._abstract import AbstractScraper
+from ._exceptions import SchemaOrgException
+from ._utils import normalize_string
+
+
+class AkisPetretzikis(AbstractScraper):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.recipe_json = json.loads(
+            self.soup.find("script", {"id": "__NEXT_DATA__"}).get_text()
+        )
+
+    @classmethod
+    def host(cls):
+        return "akispetretzikis.com"
+
+    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):
+        make_time = self.recipe_json["props"]["pageProps"]["ssRecipe"]["data"][
+            "make_time"
+        ]
+        bake_time = self.recipe_json["props"]["pageProps"]["ssRecipe"]["data"][
+            "bake_time"
+        ]
+        return make_time + bake_time
+
+    def yields(self):
+        return self.recipe_json["props"]["pageProps"]["ssRecipe"]["data"]["shares"]
+
+    def image(self):
+        return self.schema.image()
+
+    def ingredients(self):
+        ingredient_sections = self.recipe_json["props"]["pageProps"]["ssRecipe"][
+            "data"
+        ]["ingredient_sections"]
+        ingredients_list = []
+        if len(ingredient_sections) == 0:
+            return ingredients_list
+        for ingredient in ingredient_sections[0]["ingredients"]:
+            parts = []
+            if ingredient["quantity"]:
+                parts.append(ingredient["quantity"])
+            if ingredient["unit"]:
+                parts.append(ingredient["unit"])
+            parts.append(ingredient["title"])
+            ingredients_list.append(" ".join(parts))
+        return ingredients_list
+
+    def instructions(self):
+        method = self.recipe_json["props"]["pageProps"]["ssRecipe"]["data"]["method"]
+        if len(method) == 0:
+            return ""
+        instructions_list = [
+            normalize_string(step["step"]) for step in method[0]["steps"]
+        ]
+        return "\n".join(instructions_list)
+
+    def ratings(self):
+        average_score = self.recipe_json["props"]["pageProps"]["ssRecipe"]["data"][
+            "average_score"
+        ]
+        return round(float(average_score), 2)
+
+    def cuisine(self):
+        try:
+            return self.schema.cuisine()
+        except SchemaOrgException:
+            return None
+
+    def description(self):
+        return self.schema.description()
+
+    def language(self):
+        return self.recipe_json["locale"]


Test patch:
diff --git a/tests/test_akispetretzikis.py b/tests/test_akispetretzikis.py
new file mode 100644
index 00000000..cbe73da4
--- /dev/null
+++ b/tests/test_akispetretzikis.py
@@ -0,0 +1,84 @@
+from recipe_scrapers.akispetretzikis import AkisPetretzikis
+from tests import ScraperTest
+
+
+class TestAkisPetretzikisScraper(ScraperTest):
+
+    scraper_class = AkisPetretzikis
+
+    def test_host(self):
+        self.assertEqual("akispetretzikis.com", self.harvester_class.host())
+
+    def test_author(self):
+        self.assertEqual("Akis Petretzikis", self.harvester_class.author())
+
+    def test_title(self):
+        self.assertEqual("Lemon chicken with artichokes", self.harvester_class.title())
+
+    def test_category(self):
+        self.assertEqual(None, self.harvester_class.category())
+
+    def test_total_time(self):
+        self.assertEqual(40, self.harvester_class.total_time())
+
+    def test_yields(self):
+        self.assertEqual("8-10", self.harvester_class.yields())
+
+    def test_image(self):
+        self.assertEqual(
+            "https://d3fch0cwivr6nf.cloudfront.net/system/uploads/medium/data/15973/aginares-lemonates-me-kotopoulo.jpg",
+            self.harvester_class.image(),
+        )
+
+    def test_ingredients(self):
+        self.assertEqual(
+            [
+                "1 1/2 kilo chicken breast fillet",
+                "4-5 tablespoon(s) olive oil",
+                "salt",
+                "pepper",
+                "50 g all-purpose flour",
+                "2 onions",
+                "2 clove(s) of garlic",
+                "750 g artichokes",
+                "80 g white wine",
+                "lemon juice",
+                "400 g water",
+                "1 tablespoon(s) chicken stock pot",
+                "2 tablespoon(s) tarragon",
+            ],
+            self.harvester_class.ingredients(),
+        )
+
+    def test_instructions(self):
+        self.assertEqual(
+            "\n".join(
+                [
+                    "Place a frying pan over high heat and add 2-3 tablespoons olive oil.",
+                    "Cut the chicken into 2-3 cm pieces and add them into a bowl. Add salt, pepper, the flour, and mix.",
+                    "Transfer the chicken to the hot pan and sauté for 3-4 minutes until golden.",
+                    "Place a pot over high heat and add 2 tablespoons olive oil.",
+                    "Finely chop the onions and the garlic, add them to the pot, and sauté.",
+                    "Add the artichokes, the chicken, and deglaze the pot with the wine.",
+                    "Add the lemon juice, the water, the chicken stock pot, the tarragon, and mix.",
+                    "Cover with the lid and simmer over medium heat for 20-25 minutes.",
+                    "Serve with pepper, olive oil, lemon slices, and parsley.",
+                ]
+            ),
+            self.harvester_class.instructions(),
+        )
+
+    def test_ratings(self):
+        self.assertEqual(4.91, self.harvester_class.ratings())
+
+    def test_cuisine(self):
+        self.assertEqual(None, self.harvester_class.cuisine())
+
+    def test_description(self):
+        self.assertEqual(
+            "Lemon chicken with artichokes by the Greek chef Akis Petretzikis. A quick and easy recipe for a hearty lemon chicken with tender artichokes!",
+            self.harvester_class.description(),
+        )
+
+    def test_language(self):
+        self.assertEqual("en", self.harvester_class.language())
diff --git a/tests/test_data/akispetretzikis.testhtml b/tests/test_data/akispetretzikis.testhtml
new file mode 100644
index 00000000..b79a7467
--- /dev/null
+++ b/tests/test_data/akispetretzikis.testhtml
@@ -0,0 +1,23 @@
+<!DOCTYPE html><html lang="en"><head><meta name="application-name" content="Site Akis Petretzikis"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="default"/><meta name="apple-mobile-web-app-title" content="Site Akis Petretzikis"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="theme-color" content="#ffffff"/><link rel="apple-touch-icon" href="/icons/icon-180x180.png"/><link rel="apple-touch-icon" sizes="152x152" href="/icons/icon-180x180.png"/><link rel="apple-touch-icon" sizes="180x180" href="/icons/icon-180x180.png"/><link rel="apple-touch-icon" sizes="167x167" href="/icons/icon-180x180.png"/><link rel="apple-touch-startup-image" sizes="2048x2732" href="/asses/startup/2048x2732.png"/><link rel="apple-touch-startup-image" sizes="1668x2224" href="/asses/startup/1668x2224.png"/><link rel="apple-touch-startup-image" sizes="1536x2048" href="/asses/startup/1536x2048.png"/><link rel="apple-touch-startup-image" sizes="1125x2436" href="/asses/startup/1125x2436.png"/><link rel="apple-touch-startup-image" sizes="1242x2208" href="/asses/startup/1242x2208.png"/><link rel="apple-touch-startup-image" sizes="750x1334" href="/asses/startup/750x1334.png"/><link rel="apple-touch-startup-image" sizes="640x1136" href="/asses/startup/640x1136.png"/><script type="8d38b06c6d76513138a43bc4-text/javascript">(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=
+                                'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
+                                })(window,document,'script','dataLayer','GTM-WLQCBGJ');</script><script async="" src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script type="8d38b06c6d76513138a43bc4-text/javascript">
+							window.googletag = window.googletag || {cmd: []};
+							googletag.cmd.push(function() {
+								googletag.defineSlot('/66012964/Akis_Multisize_1', [[970, 250], [300, 600], [728, 90], [300, 250]], 'div-gpt-ad-1635928417371-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_Multisize_2', [[970, 250], [728, 90], [300, 250], [300, 600]], 'div-gpt-ad-1635928490328-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_Multisize_3', [[300, 600], [300, 250], [728, 90], [970, 250]], 'div-gpt-ad-1635928525395-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_Multisize_4', [[970, 250], [300, 600], [300, 250], [728, 90]], 'div-gpt-ad-1635928564617-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_Multisize_5', [[970, 250], [300, 600], [300, 250], [728, 90]], 'div-gpt-ad-1635928589675-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_300x250_1', [300, 250], 'div-gpt-ad-1635928630857-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_300x600_2', [300, 600], 'div-gpt-ad-1637237067523-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_Skin_1x1', [1, 1], 'div-gpt-ad-1635928666435-0').addService(googletag.pubads());
+								googletag.defineSlot('/66012964/Akis_Prestitial_1x1', [1, 1], 'div-gpt-ad-1635928704988-0').addService(googletag.pubads());
+								googletag.pubads().enableSingleRequest();
+								googletag.enableServices();
+							});
+							</script><script type="8d38b06c6d76513138a43bc4-text/javascript">
+                                (function(d){var s = d.createElement("script");s.setAttribute("data-account", "qfmGqp124o");s.setAttribute("src", "https://accessibilityserver.org/widget.js");(d.body || d.head).appendChild(s);})(document)
+							</script><meta charSet="utf-8"/><title>Lemon chicken with artichokes | Akis Petretzikis</title><meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width, shrink-to-fit=no, user-scalable=no, viewport-fit=cover"/><link rel="manifest" href="/site.webmanifest" crossorigin="use-credentials"/><link href="/icons/favicon-16x16.png" rel="icon" type="image/png" sizes="16x16"/><link href="/icons/favicon-32x32.png" rel="icon" type="image/png" sizes="32x32"/><link rel="apple-touch-icon" href="/apple-icon.png"/><link data-react-helmet="true" rel="icon" href="/favicon.ico"/><meta name="theme-color" content="#4f575a"/><meta name="description" content="Lemon chicken with artichokes by the Greek chef Akis Petretzikis. A quick and easy recipe for a hearty lemon chicken with tender artichokes!"/><link data-react-helmet="true" rel="icon" href="/assets/favicon.ico"/><script type="application/ld+json">{"@context":"https://schema.org/","@type":"Recipe","name":"Lemon chicken with artichokes","image":["https://d3fch0cwivr6nf.cloudfront.net/system/uploads/medium/data/15973/aginares-lemonates-me-kotopoulo.jpg"],"author":{"@type":"Person","name":"Akis Petretzikis"},"datePublished":"2020-05-19T07:11:03.000000Z","description":"Lemon chicken with artichokes by the Greek chef Akis Petretzikis. A quick and easy recipe for a hearty lemon chicken with tender artichokes!"}</script><meta name="robots" content="index,follow"/><meta name="googlebot" content="index,follow"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="akispetretzikis.com"/><meta name="twitter:creator" content="@A_petretzikis"/><meta property="og:title" content="Lemon chicken with artichokes"/><meta property="og:description" content="Lemon chicken with artichokes by the Greek chef Akis Petretzikis. A quick and easy recipe for a hearty lemon chicken with tender artichokes!"/><meta property="og:url" content="https://akispetretzikis.com/en/recipe/5453/kotopoylo-lemonato-me-agkinares"/><meta property="og:image" content="https://d3fch0cwivr6nf.cloudfront.net/system/uploads/medium/data/15973/aginares-lemonates-me-kotopoulo.jpg"/><meta property="og:image:alt" content="Lemon chicken with artichokes"/><meta property="og:site_name" content="Akis Petretzikis"/><meta name="next-head-count" content="23"/><link rel="preload" href="/_next/static/css/92abfc7061ae4e44.css" as="style"/><link rel="stylesheet" href="/_next/static/css/92abfc7061ae4e44.css" data-n-g=""/><link rel="preload" href="/_next/static/css/60522314e4188d74.css" as="style"/><link rel="stylesheet" href="/_next/static/css/60522314e4188d74.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-5cd94c89d3acac5f.js" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/webpack-ab051a85d2188a5f.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/framework-4eadb75fe852504e.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/main-5566b1c420f335b3.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/pages/_app-ff2b396c87f5aaf9.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/6394-c1215b47de1fe68a.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/9622-9f0695012794b340.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/8074-eb1cc5bb40f8e796.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/9441-9de81990f76d967a.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/3553-4427e7e5bbe27d85.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/7351-67d1f99a5276fbdc.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/1460-456f9e7f5aac69a3.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/3977-2bef1ad36880f4c1.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/730-cc7ce52eed9a0418.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/7651-07a581abea88aab9.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/6650-7427b35f5325fe8d.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/3887-6d68424d896a257f.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/7296-48477e8c614028fc.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/2256-35f99ea16ed2ed01.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/1029-eb41adada13b7ce3.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/chunks/pages/recipe/%5B...recId%5D-90ad3a3cc3965b91.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/h0sFBvHf8bMFZ5hzHQwcZ/_buildManifest.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/h0sFBvHf8bMFZ5hzHQwcZ/_ssgManifest.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script src="/_next/static/h0sFBvHf8bMFZ5hzHQwcZ/_middlewareManifest.js" defer="" type="8d38b06c6d76513138a43bc4-text/javascript"></script><script async src='/cdn-cgi/bm/cv/669835187/api.js'></script></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WLQCBGJ" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="__next"><div class="loading"></div></div><script type="8d38b06c6d76513138a43bc4-text/javascript" src="https://ping.contactpigeon.com/bi/js/cpagent141823.js?cid=akispetretzikis&amp;v=001"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"ssRecipe":{"data":{"id":5453,"recipe_category_id":21,"slug":"kotopoylo-lemonato-me-agkinares","video_url":null,"sl_video_url":null,"published":1,"title":"Lemon chicken with artichokes","method":[{"section":"General","steps":[{"id":"54530001","step":"Place a \u003ca href=\"https://akiseshop.com/en/taxonomies/tigania\" target=\"_blank\"\u003e\u003cstrong\u003efrying pan\u003c/strong\u003e\u003c/a\u003e over high heat and add 2-3 tablespoons olive oil."},{"id":"54530002","step":"\u003ca href=\"https://akiseshop.com/en/taxonomies/maxairia\" target=\"_blank\"\u003e\u003cstrong\u003eCut\u003c/strong\u003e\u003c/a\u003e the chicken into 2-3 cm pieces and add them into a bowl. Add salt, pepper, the flour, and mix."},{"id":"54530003","step":"Transfer the chicken to the hot pan and saut\u0026eacute; for 3-4 minutes until golden."},{"id":"54530004","step":"Place a \u003ca href=\"https://akiseshop.com/en/taxonomies/katsaroles-xytres\" target=\"_blank\"\u003e\u003cstrong\u003epot\u003c/strong\u003e\u003c/a\u003e over high heat and add 2 tablespoons olive oil."},{"id":"54530005","step":"Finely chop the onions and the garlic, add them to the pot, and saut\u0026eacute;."},{"id":"54530006","step":"Add the artichokes, the chicken, and deglaze the pot with the wine."},{"id":"54530007","step":"Add the lemon juice, the water, the chicken stock pot, the tarragon, and mix."},{"id":"54530008","step":"Cover with the lid and simmer over medium heat for 20-25 minutes."},{"id":"54530009","step":"Serve with pepper, olive oil, lemon slices, and parsley."}]}],"ingredient_sections":[{"id":33063,"title":"","ingredients":[{"id":224687,"title":"chicken breast fillet","unit":"kilo","quantity":"1 1/2","info":"","internal_link":"","external_link":"","conversions":{"uk":{"unit":"lb","quantity":"2.20"},"us":""}},{"id":224688,"title":"olive oil","unit":"tablespoon(s)","quantity":"4-5","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224689,"title":"salt","unit":"","quantity":"","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224690,"title":"pepper","unit":"","quantity":"","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224691,"title":"all-purpose flour","unit":"g","quantity":"50","info":"","internal_link":"","external_link":"","conversions":{"uk":{"unit":"oz","quantity":"1.76"},"us":""}},{"id":224692,"title":"onions","unit":"","quantity":"2","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224693,"title":"garlic","unit":"clove(s) of","quantity":"2","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224694,"title":"artichokes","unit":"g","quantity":"750","info":"","internal_link":"","external_link":"","conversions":{"uk":{"unit":"oz","quantity":"26.46"},"us":""}},{"id":224695,"title":"white wine","unit":"g","quantity":"80","info":"","internal_link":"","external_link":"","conversions":{"uk":{"unit":"oz","quantity":"2.82"},"us":""}},{"id":224696,"title":"lemon juice","unit":"","quantity":"","info":"of 1 lemon","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224697,"title":"water","unit":"g","quantity":"400","info":"","internal_link":"","external_link":"","conversions":{"uk":{"unit":"oz","quantity":"14.11"},"us":""}},{"id":224698,"title":"chicken stock pot","unit":"tablespoon(s)","quantity":"1","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224699,"title":"tarragon","unit":"tablespoon(s)","quantity":"2","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}}]},{"id":33064,"title":"To serve","ingredients":[{"id":224700,"title":"pepper","unit":"","quantity":"","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224701,"title":"olive oil","unit":"","quantity":"","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224702,"title":"lemon","unit":"","quantity":"","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}},{"id":224703,"title":"parsley","unit":"","quantity":"","info":"","internal_link":"","external_link":"","conversions":{"uk":"","us":""}}]}],"tip":null,"nutrition_tips":null,"make_time":15,"bake_time":25,"localized_wait_time":"","shares":"8-10","difficulty":"Easy peasy","fb_video":"","average_score":4.91,"rates_sum":157,"one":0,"two":0,"three":0,"four":3,"five":29,"nutrition":{"nutrition_per":"portion","sections":[{"id":"nutrition-section-0","title":"For the whole recipe","kcal_portion_abs":231,"kcal_portion_per":12,"kcal_grams_abs":0,"kcal_grams_per":0,"fat_portion_abs":4.8,"fat_portion_per":7,"fat_grams_abs":0,"fat_grams_per":0,"satfat_portion_abs":1.1,"satfat_portion_per":6,"satfat_grams_abs":0,"satfat_grams_per":0,"carbs_portion_abs":9.1,"carbs_portion_per":4,"carbs_grams_abs":0,"carbs_grams_per":0,"sugars_portion_abs":3.2,"sugars_portion_per":4,"sugars_grams_abs":0,"sugars_grams_per":0,"protein_portion_abs":37,"protein_portion_per":74,"protein_grams_abs":0,"protein_grams_per":0,"fiber_portion_abs":1.7,"fiber_portion_per":7,"fiber_grams_abs":0,"fiber_grams_per":0,"sodium_portion_abs":1.2,"sodium_portion_per":20,"sodium_grams_abs":0,"sodium_grams_per":0}]},"is_ve":0,"is_vg":0,"is_gf":0,"is_df":1,"is_ef":1,"is_sf":0,"is_nf":1,"is_ls":1,"video_schedule":"2020-05-19 10:00:00","extra_asterisk":1,"seo_title":null,"seo_description":"Lemon chicken with artichokes by the Greek chef Akis Petretzikis. A quick and easy recipe for a hearty lemon chicken with tender artichokes!","short_url":null,"assets":[{"id":7041,"assetable_id":5453,"filename":"aginares-lemonates-me-kotopoulo.jpg","content_type":"image/jpeg","extra":null,"ordering":1,"created_at":"2021-09-06T12:10:02.000000Z","updated_at":"2021-11-13T14:00:10.000000Z","url":"https://d3fch0cwivr6nf.cloudfront.net/system/uploads/medium/data/15973/aginares-lemonates-me-kotopoulo.jpg"}],"sponsor_logo":null,"category":{"id":21,"old_id":null,"slug":"kotopulo","is_video_category":0,"is_main_category":0,"lft":39,"rgt":40,"parent_id":20,"depth":4,"created_at":"2021-09-06T12:41:57.000000Z","updated_at":"2021-11-23T13:11:29.000000Z"},"created_at":"2020-05-19T07:11:03.000000Z","updated_at":"2022-02-28T06:57:27.000000Z"}}},"__N_SSP":true},"page":"/recipe/[...recId]","query":{"recId":["5453","kotopoylo-lemonato-me-agkinares"]},"buildId":"h0sFBvHf8bMFZ5hzHQwcZ","isFallback":false,"gssp":true,"appGip":true,"locale":"en","locales":["el","en"],"defaultLocale":"el","scriptLoader":[]}</script><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="8d38b06c6d76513138a43bc4-|49" defer=""></script><script type="text/javascript">(function(){window['__CF$cv$params']={r:'6eadc04d4d1671a4',m:'esNDtFeEJgKiLO56vWy5xNQ94qC9ujM1tw6BlDkKNX8-1647100914-0-AVT1ddDUVdx51q2/SE3AD5IJK79GWM1hj9ZeP6wEyjtsM9JBNoJrQYWTZNhrTJLFjMFMug6M0WgGHRHEaSW7hkRXaHm3wi8whx6mPw1qw1vbTf3BTk9jINjAxx1HImCPqstrnIDGTDZ5cxJPd+67ULXLLSw07HvFLRSOnalCEch/',s:[0x12db9b2af7,0x14abe79f4d],}})();</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"6eadc04d4d1671a4","token":"990ddee355c2433685d6aff8b379f192","version":"2021.12.0","si":100}' crossorigin="anonymous"></script>
+</body></html>
\ No newline at end of file