{"id":2265,"date":"2013-08-20T06:09:18","date_gmt":"2013-08-20T06:09:18","guid":{"rendered":"https:\/\/intelligentbee.com\/blog\/?p=2265"},"modified":"2024-09-30T07:40:33","modified_gmt":"2024-09-30T07:40:33","slug":"symfony2-jobeet-day-14-feeds","status":"publish","type":"post","link":"https:\/\/intelligentbee.com\/blog\/symfony2-jobeet-day-14-feeds\/","title":{"rendered":"Symfony2 Jobeet Day 14: Feeds"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_68_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title \" >Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/intelligentbee.com\/blog\/symfony2-jobeet-day-14-feeds\/#_This_article_is_part_of_the_original_Jobeet_Tutorial_created_by_Fabien_Potencier_for_Symfony_14\" title=\"* This article is part of the original Jobeet Tutorial, created by Fabien Potencier, for Symfony 1.4.\">* This article is part of the original Jobeet Tutorial, created by Fabien Potencier, for Symfony 1.4.<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/intelligentbee.com\/blog\/symfony2-jobeet-day-14-feeds\/#Feeds_in_jobeet\" title=\"Feeds in jobeet\">Feeds in jobeet<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/intelligentbee.com\/blog\/symfony2-jobeet-day-14-feeds\/#Template_Formats\" title=\"Template Formats\">Template Formats<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"_This_article_is_part_of_the_original_Jobeet_Tutorial_created_by_Fabien_Potencier_for_Symfony_14\"><\/span><span style=\"font-family: timesnew roman; font-size: 12px;\">* This article is part of the original <a href=\"http:\/\/symfony.com\/legacy\/doc\/jobeet?orm=Doctrine\" target=\"_blank\" rel=\"noopener\">Jobeet Tutorial<\/a>, created by Fabien Potencier, for Symfony 1.4.<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"Feeds_in_jobeet\"><\/span>Feeds in jobeet<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>If you are looking for a job, you will probably want to be informed as soon as a new job is posted. Because it is not very convenient to check the website every other hour, we will add several job feeds here to keep our Jobeet users up-to-date.<span id=\"more-191\"><\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Template_Formats\"><\/span>Template Formats<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Templates are a generic way to render content in any format. And while in most cases you\u2019ll use templates to render HTML content, a template can just as easily generate JavaScript, CSS, XML or any other format.<\/p>\n<p>For example, the same \u201cresource\u201d is often rendered in several different formats. To render an article index page in XML, simply include the format in the template name:<\/p>\n<ul>\n<li>XML template name: <code>AcmeArticleBundle:Article:index.xml.twig<\/code><\/li>\n<li>XML template filename: <code>index.xml.twig<\/code><\/li>\n<\/ul>\n<p>In reality, this is nothing more than a naming convention and the template isn\u2019t actually rendered differently based on its format.<\/p>\n<p>In many cases, you may want to allow a single controller to render multiple different formats based on the \u201crequest format\u201d. For that reason, a common pattern is to do the following:<\/p>\n<pre class=\"toolbar:2 lang:default decode:true \">public function indexAction()\r\n{\r\n    $format = $this-&amp;gt;getRequest()-&amp;gt;getRequestFormat();\r\n\r\n    return $this-&amp;gt;render('AcmeBlogBundle:Blog:index.'.$format.'.twig');\r\n}<\/pre>\n<p>The <code>getRequestFormat<\/code> on the <code>Request<\/code> object defaults to <code>html<\/code>, but can return any other format based on the format requested by the user. The request format is most often managed by the routing, where a route can be configured so that <code>\/contact<\/code> sets the request format to <code>html<\/code> while <code>\/contact.xml<\/code> sets the format to <code>xml<\/code>.<\/p>\n<p>To create links that include the format parameter, include a <code>_format<\/code> key in the parameter hash:<\/p>\n<pre class=\"toolbar:2 lang:default decode:true \">&lt;a href=\"{{ path('article_show', {'id': 123, '_format': 'pdf'}) }}\"&gt;\r\n    PDF Version\r\n&lt;\/a&gt;<\/pre>\n<h3>Feeds<\/h3>\n<h4>LATEST JOBS FEED<\/h4>\n<p>Supporting different formats is as easy as creating different templates. To create an Atom feed for the latest jobs, create an <code>index.atom.twig<\/code> template:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"src\/Ibw\/JobeetBundle\/Resources\/views\/Job\/index.atom.twig\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;feed xmlns=\"http:\/\/www.w3.org\/2005\/Atom\"&gt;\r\n    &lt;title&gt;Jobeet&lt;\/title&gt;\r\n    &lt;subtitle&gt;Latest Jobs&lt;\/subtitle&gt;\r\n    &lt;link href=\"\" rel=\"self\"\/&gt;\r\n    &lt;link href=\"\"\/&gt;\r\n    &lt;updated&gt;&lt;\/updated&gt;\r\n    &lt;author&gt;&lt;name&gt;Jobeet&lt;\/name&gt;&lt;\/author&gt;\r\n    &lt;id&gt;Unique Id&lt;\/id&gt;\r\n\r\n    &lt;entry&gt;\r\n        &lt;title&gt;Job title&lt;\/title&gt;\r\n        &lt;link href=\"\" \/&gt;\r\n        &lt;id&gt;Unique id&lt;\/id&gt;\r\n        &lt;updated&gt;&lt;\/updated&gt;\r\n        &lt;summary&gt;Job description&lt;\/summary&gt;\r\n        &lt;author&gt;&lt;name&gt;Company&lt;\/name&gt;&lt;\/author&gt;\r\n    &lt;\/entry&gt;\r\n&lt;\/feed&gt;<\/pre>\n<p>In the Jobeet footer, update the link to the feed:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"src\/Ibw\/JobeetBundle\/Resources\/views\/layout.html.twig\">&lt;!-- ... --&gt;\r\n\r\n&lt;li class=\"feed\"&gt;&lt;a href=\"{{ path('ibw_job', {'_format': 'atom'}) }}\"&gt;Full feed&lt;\/a&gt;&lt;\/li&gt;\r\n\r\n&lt;!-- ... --&gt;<\/pre>\n<p>Add a <code>&lt;link&gt;<\/code> tag in the head section of the layout to allow automatic discover by the browser of our feed:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"src\/Ibw\/JobeetBundle\/Resources\/views\/layout.html.twig\">&lt;!-- ... --&gt;\r\n\r\n&lt;link rel=\"alternate\" type=\"application\/atom+xml\" title=\"Latest Jobs\" href=\"{{ url('ibw_job', {'_format': 'atom'}) }}\" \/&gt;\r\n\r\n&lt;!-- ... --&gt;<\/pre>\n<p>In the <code>JobController<\/code> change the <code>indexAction<\/code> to render the template according to the <code>_format<\/code>:<\/p>\n<pre class=\"lang:php decode:true \" title=\"src\/Ibw\/JobeetBundle\/Controller\/JobController.php\">\/\/ ...\r\n\r\n$format = $this-&gt;getRequest()-&gt;getRequestFormat();\r\n\r\nreturn $this-&gt;render('IbwJobeetBundle:Job:index.'.$format.'.twig', array(\r\n    'categories' =&gt; $categories\r\n));\r\n\r\n\/\/ ...<\/pre>\n<p>Replace the Atom template header with the following code:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"src\/Ibw\/JobeetBundle\/Resources\/views\/Job\/index.atom.twig\">&lt;!-- ... --&gt;\r\n\r\n    &lt;title&gt;Jobeet&lt;\/title&gt;\r\n    &lt;subtitle&gt;Latest Jobs&lt;\/subtitle&gt;\r\n    &lt;link href=\"{{ url('ibw_job', {'_format': 'atom'}) }}\" rel=\"self\"\/&gt;\r\n    &lt;link href=\"{{ url('ibw_jobeet_homepage') }}\"\/&gt;\r\n    &lt;updated&gt;{{ lastUpdated }}&lt;\/updated&gt;\r\n    &lt;author&gt;&lt;name&gt;Jobeet&lt;\/name&gt;&lt;\/author&gt;\r\n    &lt;id&gt;{{ feedId }}&lt;\/id&gt;\r\n\r\n&lt;!-- ... --&gt;<\/pre>\n<p>From the <code>JobController (index action)<\/code> we have to send the <code>lastUpdated<\/code> and <code>feedId<\/code> to the template:<\/p>\n<pre class=\"lang:php decode:true \" title=\"src\/Ibw\/JobeetBundle\/Controller\/JobController.php\">\/\/ ...\r\n\r\n        $latestJob = $em-&gt;getRepository('IbwJobeetBundle:Job')-&gt;getLatestPost();\r\n\r\n        if($latestJob) {\r\n            $lastUpdated = $latestJob-&gt;getCreatedAt()-&gt;format(DATE_ATOM);\r\n        } else {\r\n            $lastUpdated = new DateTime();\r\n            $lastUpdated = $lastUpdated-&gt;format(DATE_ATOM);\r\n        }\r\n\r\n        $format = $this-&gt;getRequest()-&gt;getRequestFormat();\r\n        return $this-&gt;render('IbwJobeetBundle:Job:index.'.$format.'.twig', array(\r\n               'categories' =&gt; $categories,\r\n               'lastUpdated' =&gt; $lastUpdated,\r\n               'feedId' =&gt; sha1($this-&gt;get('router')-&gt;generate('ibw_job', array('_format'=&gt; 'atom'), true)),\r\n        ));\r\n\/\/ ...<\/pre>\n<p>To get the date of the latest post, we have to create the <code>getLatestPost()<\/code> method in the <code>JobRepository<\/code>:<\/p>\n<pre class=\"lang:php decode:true \" title=\"src\/Ibw\/JobeetBundle\/Repository\/JobRepository.php\">\/\/ ...\r\n\r\n    public function getLatestPost($category_id = null)\r\n    {\r\n        $query = $this-&gt;createQueryBuilder('j')\r\n            -&gt;where('j.expires_at &gt; :date')\r\n            -&gt;setParameter('date', date('Y-m-d H:i:s', time()))\r\n            -&gt;andWhere('j.is_activated = :activated')\r\n            -&gt;setParameter('activated', 1)\r\n            -&gt;orderBy('j.expires_at', 'DESC')\r\n            -&gt;setMaxResults(1);\r\n\r\n        if($category_id) {\r\n            $query-&gt;andWhere('j.category = :category_id')\r\n                -&gt;setParameter('category_id', $category_id);\r\n        }\r\n\r\n        try{\r\n            $job = $query-&gt;getQuery()-&gt;getSingleResult();\r\n        } catch(DoctrineOrmNoResultException $e){\r\n            $job = null;\r\n        }\r\n\r\n        return $job;    \r\n    }\r\n\/\/ ...<\/pre>\n<p>The feed entries can be generated with the following code:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"src\/Ibw\/JobeetBundle\/Resources\/views\/Job\/index.atom.twig\">{% for category in categories %}\r\n    {% for entity in category.activejobs %}\r\n        &lt;entry&gt;\r\n            &lt;title&gt;{{ entity.position }} ({{ entity.location }})&lt;\/title&gt;\r\n            &lt;link href=\"{{ url('ibw_job_show', { 'id': entity.id, 'company': entity.companyslug, 'location': entity.locationslug, 'position': entity.positionslug }) }}\" \/&gt;\r\n            &lt;id&gt;{{ entity.id }}&lt;\/id&gt;\r\n            &lt;updated&gt;{{ entity.createdAt.format(constant('DATE_ATOM')) }}&lt;\/updated&gt;\r\n            &lt;summary type=\"xhtml\"&gt;\r\n                &lt;div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"&gt;\r\n                    {% if entity.logo %}\r\n                        &lt;div&gt;\r\n                            &lt;a href=\"{{ entity.url }}\"&gt;\r\n                                &lt;img src=\"http:\/\/{{ app.request.host }}\/uploads\/jobs\/{{ entity.logo }}\" alt=\"{{ entity.company }} logo\" \/&gt;\r\n                            &lt;\/a&gt;\r\n                        &lt;\/div&gt;\r\n                    {% endif %}\r\n                    &lt;div&gt;\r\n                        {{ entity.description|nl2br }}\r\n                    &lt;\/div&gt;\r\n                    &lt;h4&gt;How to apply?&lt;\/h4&gt;\r\n                    &lt;p&gt;{{ entity.howtoapply }}&lt;\/p&gt;\r\n                &lt;\/div&gt;\r\n            &lt;\/summary&gt;\r\n            &lt;author&gt;&lt;name&gt;{{ entity.company }}&lt;\/name&gt;&lt;\/author&gt;\r\n        &lt;\/entry&gt;\r\n    {% endfor %}\r\n{% endfor %}<\/pre>\n<p>LATEST JOBS IN A CATEGORY FEED<\/p>\n<p>One of the goals of Jobeet is to help people find more targeted jobs. So, we need to provide a feed for each category.<\/p>\n<p>First, let\u2019s update the links to category feeds in the templates:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"src\/Ibw\/JobeetBundle\/Resources\/views\/Job\/index.html.twig\">&lt;div class=\"feed\"&gt;\r\n    &lt;a href=\"{{ path('IbwJobeetBundle_category', { 'slug': category.slug, '_format': 'atom' }) }}\"&gt;Feed&lt;\/a&gt;\r\n&lt;\/div&gt;<\/pre>\n<pre class=\"lang:xhtml decode:true \" title=\"rc\/Ibw\/JobeetBundle\/Resources\/views\/Category\/show.html.twig\">&lt;div class=\"feed\"&gt;\r\n    &lt;a href=\"{{ path('IbwJobeetBundle_category', { 'slug': category.slug, '_format': 'atom' }) }}\"&gt;Feed&lt;\/a&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>Update the <code>CategoryController<\/code> <code>showAction<\/code> to render the corresponding template:<\/p>\n<pre class=\"lang:php decode:true\" title=\"src\/Ibw\/JobeetBundle\/Controller\/CategoryController.php\">\/\/ ...\r\n    public function showAction($slug, $page)\r\n    {\r\n        $em = $this-&gt;getDoctrine()-&gt;getManager();\r\n\r\n        $category = $em-&gt;getRepository('IbwJobeetBundle:Category')-&gt;findOneBySlug($slug);\r\n\r\n        if (!$category) {\r\n            throw $this-&gt;createNotFoundException('Unable to find Category entity.');\r\n        }\r\n\r\n        $latestJob = $em-&gt;getRepository('IbwJobeetBundle:Job')-&gt;getLatestPost($category-&gt;getId());\r\n\r\n        if($latestJob) {\r\n            $lastUpdated = $latestJob-&gt;getCreatedAt()-&gt;format(DATE_ATOM); \r\n        } else {\r\n            $lastUpdated = new DateTime();\r\n            $lastUpdated = $lastUpdated-&gt;format(DATE_ATOM);\r\n        }\r\n\r\n        $total_jobs = $em-&gt;getRepository('IbwJobeetBundle:Job')-&gt;countActiveJobs($category-&gt;getId());\r\n        $jobs_per_page = $this-&gt;container-&gt;getParameter('max_jobs_on_category');\r\n        $last_page = ceil($total_jobs \/ $jobs_per_page);\r\n        $previous_page = $page &gt; 1 ? $page - 1 : 1;\r\n        $next_page = $page &lt; $last_page ? $page + 1 : $last_page; \r\n        $category-&gt;setActiveJobs($em-&gt;getRepository('IbwJobeetBundle:Job')-&gt;getActiveJobs($category-&gt;getId(), $jobs_per_page, ($page - 1) * $jobs_per_page));\r\n\r\n        $format = $this-&gt;getRequest()-&gt;getRequestFormat();\r\n\r\n        return $this-&gt;render('IbwJobeetBundle:Category:show.' . $format . '.twig', array(\r\n            'category' =&gt; $category,\r\n            'last_page' =&gt; $last_page,\r\n            'previous_page' =&gt; $previous_page,\r\n            'current_page' =&gt; $page,\r\n            'next_page' =&gt; $next_page,\r\n            'total_jobs' =&gt; $total_jobs,\r\n            'feedId' =&gt; sha1($this-&gt;get('router')-&gt;generate('IbwJobeetBundle_category', array('slug' =&gt; $category-&gt;getSlug(), 'format' =&gt; 'atom'), true)),\r\n            'lastUpdated' =&gt; $lastUpdated    \r\n        ));\r\n    }<\/pre>\n<p>Eventually, create the <code>show.atom.twig<\/code> template:<\/p>\n<pre class=\"lang:xhtml decode:true \" title=\"rc\/Ibw\/JobeetBundle\/Resources\/views\/Category\/show.atom.twig\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;feed xmlns=\"http:\/\/www.w3.org\/2005\/Atom\"&gt;\r\n    &lt;title&gt;Jobeet ({{ category.name }})&lt;\/title&gt;\r\n    &lt;subtitle&gt;Latest Jobs&lt;\/subtitle&gt;\r\n    &lt;link href=\"{{ url('IbwJobeetBundle_category', { 'slug': category.slug, '_format': 'atom' }) }}\" rel=\"self\" \/&gt;\r\n    &lt;updated&gt;{{ lastUpdated }}&lt;\/updated&gt;\r\n    &lt;author&gt;&lt;name&gt;Jobeet&lt;\/name&gt;&lt;\/author&gt;\r\n    &lt;id&gt;{{ feedId }}&lt;\/id&gt;\r\n\r\n    {% for entity in category.activejobs %}\r\n        &lt;entry&gt;\r\n            &lt;title&gt;{{ entity.position }} ({{ entity.location }})&lt;\/title&gt;\r\n            &lt;link href=\"{{ url('ibw_job_show', { 'id': entity.id, 'company': entity.companyslug, 'location': entity.locationslug, 'position': entity.positionslug }) }}\" \/&gt;\r\n            &lt;id&gt;{{ entity.id }}&lt;\/id&gt;\r\n            &lt;updated&gt;{{ entity.createdAt.format(constant('DATE_ATOM')) }}&lt;\/updated&gt;\r\n            &lt;summary type=\"xhtml\"&gt;\r\n                &lt;div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"&gt;\r\n                    {% if entity.logo %}\r\n                        &lt;div&gt;\r\n                            &lt;a href=\"{{ entity.url }}\"&gt;\r\n                                &lt;img src=\"http:\/\/{{ app.request.host }}\/uploads\/jobs\/{{ entity.logo }}\" alt=\"{{ entity.company }} logo\" \/&gt;\r\n                            &lt;\/a&gt;\r\n                        &lt;\/div&gt;\r\n                    {% endif %}\r\n                    &lt;div&gt;\r\n                        {{ entity.description|nl2br }}\r\n                    &lt;\/div&gt;\r\n                    &lt;h4&gt;How to apply?&lt;\/h4&gt;\r\n                    &lt;p&gt;{{ entity.howtoapply }}&lt;\/p&gt;\r\n                &lt;\/div&gt;\r\n            &lt;\/summary&gt;\r\n            &lt;author&gt;&lt;name&gt;{{ entity.company }}&lt;\/name&gt;&lt;\/author&gt;\r\n        &lt;\/entry&gt;\r\n    {% endfor %}\r\n&lt;\/feed&gt;<\/pre>\n<p><a href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/\" rel=\"license\"><img decoding=\"async\" style=\"border-width: 0;\" src=\"https:\/\/i.creativecommons.org\/l\/by-sa\/3.0\/88x31.png\" alt=\"Creative Commons License\" \/><\/a><br \/>\nThis work is licensed under a <a href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/\" target=\"_blank\" rel=\"license noopener\">Creative Commons Attribution-ShareAlike 3.0 Unported License<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>* This article is part of the original Jobeet Tutorial, created by Fabien Potencier, for Symfony 1.4. Feeds in jobeet [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[82],"tags":[],"yst_prominent_words":[363,629,798,1355,1356,1556,2370],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/posts\/2265"}],"collection":[{"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/comments?post=2265"}],"version-history":[{"count":3,"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/posts\/2265\/revisions"}],"predecessor-version":[{"id":133228,"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/posts\/2265\/revisions\/133228"}],"wp:attachment":[{"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/media?parent=2265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/categories?post=2265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/tags?post=2265"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/intelligentbee.com\/blog\/wp-json\/wp\/v2\/yst_prominent_words?post=2265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}