{"id":27817,"date":"2022-02-09T22:18:22","date_gmt":"2022-02-09T22:18:22","guid":{"rendered":"http:\/\/Video-Playback-for-Product-List-Page"},"modified":"2022-02-09T22:18:22","modified_gmt":"2022-02-09T22:18:22","slug":"video-playback-for-product-list-page","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/","title":{"rendered":"Create Video Playback for Product List Page"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Videos are powerful tools driving the age-old industry of content marketing. Getting it right with videos and maximizing their marketing potential comes with the time-consuming effort of optimizing, managing, administering, and delivering them to your target audience. With managed media solutions like Cloudinary, we have less to worry about since almost everything is handled automatically.<\/p>\n<p>In this article, we will look at how to leverage Cloudinary\u2019s rich media transformation tools by building a simple web application that incorporates trimmed videos of products. Without further Ado, let\u2019s dive in.<\/p>\n<p>Here\u2019s a CodeSandbox <a href=\"https:\/\/codesandbox.io\/s\/trimmed-video-playback-for-product-list-8uq3p\">link<\/a> to the project.<\/p>\n<\/div>\n  \n  <div class=\"wp-block-cloudinary-code-sandbox \">\n    <iframe\n      src=\"https:\/\/codesandbox.io\/embed\/trimmed-video-playback-for-product-list-8uq3p?theme=dark&amp;codemirror=1&amp;highlights=&amp;editorsize=50&amp;fontsize=14&amp;expanddevtools=0&amp;hidedevtools=0&amp;eslint=0&amp;forcerefresh=0&amp;hidenavigation=0&amp;initialpath=%2F&amp;module=&amp;moduleview=0&amp;previewwindow=&amp;view=&amp;runonclick=1\"\n      height=\"500\"\n      style=\"width: 100%;\"\n      title=\"trimmed-video-playback-for-product-list-8uq3p\"\n      loading=\"lazy\"\n      allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n      sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n    ><\/iframe>\n  <\/div>\n\n  <div class=\"wp-block-cloudinary-markdown \"><h2>Project Setup<\/h2>\n<p>Run the this command in your terminal to bootstrap a simple react application:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">    npx create-react-app product-listing\n<\/code><\/span><\/pre>\n<p>Next, we need to install the Cloudinary SDKs as dependencies. Run this command in your terminal:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\">    <span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-keyword\">@cloudinary<\/span>\/react @cloudinary\/url-gen@latest\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>The <code>@cloudinary\/url-gen<\/code> module will generate URLs and apply transformations to media assets stored on the Cloudinary account, while the <code>@cloudinary\/react<\/code> module provides components to render media assets to the screen.<\/p>\n<h2>Cloudinary Setup<\/h2>\n<p>If you don\u2019t have a Cloudinary account already, create one <a href=\"https:\/\/cloudinary.com\/users\/register\/free\">here<\/a> for free. After that, log in to view your account credentials stored in the account details section on your Dashboard.<\/p>\n<p>Since we will be working on a client application, we will need just our API Key and cloud Name; these will be used to configure the Cloudinary SDKs we installed earlier.<\/p>\n<p>We also need to upload some video files to Cloudinary, which will be used in our demo application. See <a href=\"https:\/\/cloudinary.com\/documentation\/media_library_upload_tutorial\">here<\/a> to learn how to upload assets to Cloudinary via the Media Library. You can get non-copyrighted videos from <a href=\"http:\/\/pexels.com\/\">Pexels<\/a>.<\/p>\n<p>As seen below, each media item you upload will have a unique random string referred to as its public ID. It serves as a unique identifier for uploaded media assets.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/media_jams\/s_444890BE9A05327C3E7DF963546393A02E18ADAD20BDC77055C36ECEF17044A5_1642704304727_CleanShot+2022-01-20+at+22.44.102x.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"2000\" height=\"614\"\/><\/p>\n<h2>Getting Products Data<\/h2>\n<p>The application will need some data to render our products; usually, this data will live in a database somewhere on a server. To keep things simple, we would be storing our data in a file locally. Run the following command to create a file named <code>data.json<\/code>.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\">    <span class=\"hljs-selector-tag\">cd<\/span> <span class=\"hljs-selector-tag\">src<\/span>\n    <span class=\"hljs-selector-tag\">touch<\/span> <span class=\"hljs-selector-tag\">data<\/span><span class=\"hljs-selector-class\">.json<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Next, populate the file with the following:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-wrap-lines\">    {\n        <span class=\"hljs-attr\">\"products\"<\/span>:&#91;\n          {\n            <span class=\"hljs-attr\">\"id\"<\/span>:<span class=\"hljs-number\">1<\/span>,\n            <span class=\"hljs-attr\">\"title\"<\/span>:<span class=\"hljs-string\">\"macbook\"<\/span>,\n            <span class=\"hljs-attr\">\"price\"<\/span>:<span class=\"hljs-number\">1200<\/span>,\n            <span class=\"hljs-attr\">\"videoId\"<\/span>:<span class=\"hljs-string\">\"8ba64b04-f0e6-43af-a6a0-d7815646332b_jdh3ty\"<\/span>,\n            <span class=\"hljs-attr\">\"description\"<\/span>:<span class=\"hljs-string\">\"A laptop manufactured by Apple.\"<\/span>\n          },\n          {\n            <span class=\"hljs-attr\">\"id\"<\/span>:<span class=\"hljs-number\">2<\/span>,\n            <span class=\"hljs-attr\">\"title\"<\/span>:<span class=\"hljs-string\">\"mustang\"<\/span>,\n            <span class=\"hljs-attr\">\"price\"<\/span>:<span class=\"hljs-number\">27000<\/span>,\n            <span class=\"hljs-attr\">\"videoId\"<\/span>:<span class=\"hljs-string\">\"477be0a5-3a37-4a81-b322-18bebe43fa1a_pypgpu\"<\/span>,\n            <span class=\"hljs-attr\">\"description\"<\/span>:<span class=\"hljs-string\">\"A series of American automobiles manufactured by Ford\"<\/span>\n          },\n          {\n            <span class=\"hljs-attr\">\"id\"<\/span>:<span class=\"hljs-number\">3<\/span>,\n            <span class=\"hljs-attr\">\"title\"<\/span>:<span class=\"hljs-string\">\"durag\"<\/span>,\n            <span class=\"hljs-attr\">\"price\"<\/span>:<span class=\"hljs-number\">2000<\/span>,\n            <span class=\"hljs-attr\">\"videoId\"<\/span>:<span class=\"hljs-string\">\"3d983441-017b-49de-b8a0-6496699f1c9c_jickhv\"<\/span>,\n            <span class=\"hljs-attr\">\"description\"<\/span>:<span class=\"hljs-string\">\"Silky, or wave cap is a close-fitting cloth cap tied around the top of the head.\"<\/span>\n          },\n          {\n            <span class=\"hljs-attr\">\"id\"<\/span>:<span class=\"hljs-number\">4<\/span>,\n            <span class=\"hljs-attr\">\"title\"<\/span>:<span class=\"hljs-string\">\"microphone\"<\/span>,\n            <span class=\"hljs-attr\">\"price\"<\/span>:<span class=\"hljs-number\">50<\/span>,\n            <span class=\"hljs-attr\">\"videoId\"<\/span>:<span class=\"hljs-string\">\"d64fceb6-bfe7-473b-8565-ab8360a4d824_d79xiq\"<\/span>,\n            <span class=\"hljs-attr\">\"description\"<\/span>:<span class=\"hljs-string\">\"A microphone is a device that is used to make sounds louder or to record them\"<\/span>\n          }\n        ]\n    }\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>This file holds an array of objects containing random properties that describe each product. A noteworthy one is a <code>videoId<\/code> property which has the <strong>public IDs<\/strong> of video assets we uploaded to Cloudinary. Replace the value of the <code>videoId<\/code> property with the <strong>public IDs<\/strong> of videos uploaded to your Cloudinary account.<\/p>\n<h2>Rendering the Product List<\/h2>\n<p>Create a folder called <code>components<\/code> in your <code>src<\/code> directory. Create a file called <code>product.js<\/code> in the <code>components<\/code> folder and add the following to it:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">    <span class=\"hljs-keyword\">import<\/span> React <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'react'<\/span>;\n    <span class=\"hljs-keyword\">import<\/span> VideoPreviewer <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'.\/VideoPreviewer'<\/span>;\n    <span class=\"hljs-keyword\">const<\/span> Product = <span class=\"hljs-function\">(<span class=\"hljs-params\">{ videoId, price, description, title }<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-keyword\">return<\/span> (\n        <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">'product br'<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">section<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">'product_vid'<\/span>&gt;<\/span>\n    \n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">section<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">section<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">'product_details'<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">'grid_1_1'<\/span>&gt;<\/span>\n              <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">span<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">'badge b-gr'<\/span>&gt;<\/span>${price}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">span<\/span>&gt;<\/span>\n              <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">span<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">'badge b-pur'<\/span>&gt;<\/span>for {price &gt; 2000 ? 'adults' : 'kids'}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">span<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h4<\/span>&gt;<\/span>{title}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h4<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>{description}<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">section<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/span>\n      );\n    };\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> Product;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>This component is purely presentational; it simply renders a UI containing product information which the component receives as props.<\/p>\n<p>Next, let\u2019s update our <code>App.js<\/code> file to use this component.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">    <span class=\"hljs-keyword\">import<\/span> Product <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/components\/Product\"<\/span>;\n    <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-string\">\".\/style.css\"<\/span>;\n    <span class=\"hljs-keyword\">import<\/span> Data <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/dummyData.json\"<\/span>;\n    <span class=\"hljs-keyword\">const<\/span> App = <span class=\"hljs-function\"><span class=\"hljs-params\">()<\/span> =&gt;<\/span> {\n      <span class=\"hljs-keyword\">return<\/span> (\n        <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">main<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">\"container\"<\/span>&gt;<\/span>\n            {Data.products.map((product, index) =&gt; (\n              <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Product<\/span> {<span class=\"hljs-attr\">...product<\/span>} <span class=\"hljs-attr\">key<\/span>=<span class=\"hljs-string\">{index}<\/span> \/&gt;<\/span>\n            ))}\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">main<\/span>&gt;<\/span><\/span>\n      );\n    };\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> App;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>The code above imports the hardcoded data, the <code>Product<\/code> component, and some styles. The component body renders the product component using the data.<\/p>\n<p>Run this command in your terminal to see the running application:<\/p>\n<pre class=\"js-syntax-highlighted\"><span><code class=\"hljs shcb-wrap-lines\">    npm start\n<\/code><\/span><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/media_jams\/s_04FB3E492A569EFF31F628E1BCED545A0EABB2BC7A1A6A385ABF4888E5CBEE7C_1638911897156_PRODUCTS+NO+VIDEO.PNG\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1354\" height=\"625\"\/><\/p>\n<h2>Display the Videos<\/h2>\n<p>We now have our products listed, and we need to display our videos. In the <code>components<\/code> folder, create a file called <code>videoPlayer.js<\/code> and add the following to it:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">    <span class=\"hljs-keyword\">import<\/span> { Cloudinary } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\"<\/span>;\n    <span class=\"hljs-keyword\">import<\/span> { trim } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\/actions\/videoEdit\"<\/span>;\n    \n    <span class=\"hljs-keyword\">const<\/span> cld = <span class=\"hljs-keyword\">new<\/span> Cloudinary({\n      <span class=\"hljs-attr\">cloud<\/span>: {\n        <span class=\"hljs-attr\">cloudName<\/span>: <span class=\"hljs-string\">\"&lt;INSERT-CLOUD-NAME-HERE&gt;\"<\/span>,\n      },\n    });\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>In the code above, we imported the Cloudinary class and created an instance using our Cloudinary credentials. We imported the <code>trim<\/code> action, which will help us generate the required transformation parameter that will be embedded in the asset\u2019s delivery URL.<\/p>\n<p>The videos uploaded on our Cloudinary account are of different sizes, but we want to display a trimmed version of these videos. Like every remotely stored media asset on the Internet, each video we uploaded to Cloudinary has some Unique URL pointing to it. Cloudinary refers to this URL as the delivery URL.<\/p>\n<p>We will use the Cloudinary instance to dynamically generate URLs for our video assets using their <strong>PublicID<\/strong> and appending the appropriate <strong>transformation<\/strong> parameters.<\/p>\n<p>Update your <code>VideoPlayer.js<\/code> file with the following:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">    <span class=\"hljs-keyword\">import<\/span> { Cloudinary } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\"<\/span>;\n    <span class=\"hljs-keyword\">import<\/span> { trim } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"@cloudinary\/url-gen\/actions\/videoEdit\"<\/span>;\n    \n    <span class=\"hljs-keyword\">const<\/span> cld = <span class=\"hljs-keyword\">new<\/span> Cloudinary({\n      <span class=\"hljs-comment\">\/\/...<\/span>\n    });\n    \n    <span class=\"hljs-keyword\">const<\/span> VideoPlayer = <span class=\"hljs-function\">(<span class=\"hljs-params\">{ videoId }<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-keyword\">let<\/span> video = cld.video(videoId).videoEdit(trim().duration(<span class=\"hljs-number\">5.0<\/span>));\n    };\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> VideoPlayer;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>We defined and exported the component <code>VideoPlayer<\/code>, which accepts publicID as props. It uses the Cloudinary instance, and a series of chained function calls to build the delivery URL to the video asset.<\/p>\n<p>It does the following:<\/p>\n<ul>\n<li>It creates a video object instance using the publicID by calling <code>video()<\/code>. Each video instance holds a set of methods, some of which are called action groups that define how to transform the asset.<\/li>\n<li>Next, we call the <code>videoEdit<\/code> action group, which expects a set of actions that feed the <code>trim<\/code> action we brought in earlier. The call to <code>trim().duration(5.0)<\/code> adds transformation parameters to cut the video with a playback time of 5s.<\/li>\n<\/ul>\n<p>Next, we need to feed the URL to a video source to display the video. Since our application may display so many videos, we can add a bit of optimization to them. Update the imports in your <code>VideoPlayer.js<\/code> file with the code below.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">    <span class=\"hljs-keyword\">import<\/span> { lazyload, AdvancedVideo } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@cloudinary\/react'<\/span>;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Update your <code>VideoPlayer<\/code> component with the code below.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">    <span class=\"hljs-keyword\">return<\/span> (\n        <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">AdvancedVideo<\/span>\n          <span class=\"hljs-attr\">cldVid<\/span>=<span class=\"hljs-string\">{video}<\/span>\n          <span class=\"hljs-attr\">plugins<\/span>=<span class=\"hljs-string\">{&#91;lazyload(<\/span>\"<span class=\"hljs-attr\">0<\/span>\", <span class=\"hljs-attr\">0.4<\/span>)]}\n          <span class=\"hljs-attr\">controls<\/span>=<span class=\"hljs-string\">{false}<\/span>\n          <span class=\"hljs-attr\">autoPlay<\/span>=<span class=\"hljs-string\">{true}<\/span>\n          <span class=\"hljs-attr\">loop<\/span>\n          <span class=\"hljs-attr\">muted<\/span>\n        \/&gt;<\/span><\/span>\n    );\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>This component returns the <code>AdvancedVideo<\/code> component, which renders a traditional HTML5 <code>video<\/code> tag. The component receives several props; the first is the <code>cldVid<\/code> prop, representing the URL to the transformed video.<\/p>\n<p>We added the <code>lazyload()<\/code> plugin and specified parameters that control when our video loads on the page for optimizations. See <a href=\"https:\/\/cloudinary.com\/documentation\/react2_image_transformations#lazy_loading\">here<\/a> for more on the lazyload plugin.<\/p>\n<p>The other props are pretty intuitive; they state that the rendered video should display no controls, play automatically and loop continuously with no sound.<\/p>\n<p>As a final step, let\u2019s update our <code>Product<\/code> component to import and use the <code>VideoPlayer<\/code> component with the code below.<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">    <span class=\"hljs-keyword\">import<\/span> React <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"react\"<\/span>;\n    <span class=\"hljs-keyword\">import<\/span> VideoPlayer <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/VideoPlayer\"<\/span>;\n    <span class=\"hljs-keyword\">const<\/span> Product = <span class=\"hljs-function\">(<span class=\"hljs-params\">{ videoId, price, description, title }<\/span>) =&gt;<\/span> {\n      <span class=\"hljs-keyword\">return<\/span> (\n        <span class=\"xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">\"product br\"<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">section<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">\"product_vid\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">VideoPlayer<\/span> <span class=\"hljs-attr\">videoId<\/span>=<span class=\"hljs-string\">{videoId}<\/span> \/&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">section<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">section<\/span> <span class=\"hljs-attr\">className<\/span>=<span class=\"hljs-string\">\"product_details\"<\/span>&gt;<\/span>\n         {\/* ... *\/}\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">section<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span><\/span>\n      );\n    };\n    <span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> Product;\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>You should see the product listing app with the trimmed videos displayed as expected if you run your application.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cloudinary-marketing-res.cloudinary.com\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/media_jams\/s_444890BE9A05327C3E7DF963546393A02E18ADAD20BDC77055C36ECEF17044A5_1642705674010_CleanShot+2022-01-20+at+23.07.36.gif\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"800\" height=\"256\"\/><\/p>\n<p>You can find the complete project <a href=\"https:\/\/github.com\/ifeoma-imoh\/video-playback-for-product-list\">here<\/a> on GitHub.<\/p>\n<h2>Conclusion<\/h2>\n<p>Backed by its ubiquitous nature, stats, and conversion rate, videos add a zing to how we do a lot in our world today. With great platforms like Cloudinary in the mix, this guide scratches the surface of what can be achieved by building a simple app that includes trimmed videos of products.<\/p>\n<p><strong>Resources you may find helpful:<\/strong><\/p>\n<ul>\n<li>\n<a href=\"https:\/\/cloudinary.com\/documentation\/react2_quick_start\">Cloudinary React SDK v2<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/documentation\/javascript_quick_start\">Cloudinary JavaScript SDK<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/documentation\/video_manipulation_and_delivery\">Cloudinary\u2019s documentation on video transformation<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":27818,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[134,246,371,303],"class_list":["post-27817","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-guest-post","tag-react","tag-under-review","tag-video"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Create Video Playback for Product List Page<\/title>\n<meta name=\"description\" content=\"This post describes how to leverage Cloudinary&#039;s rich media transformation tools, which provide trimming functionality to adjust the length of product videos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create Video Playback for Product List Page\" \/>\n<meta property=\"og:description\" content=\"This post describes how to leverage Cloudinary&#039;s rich media transformation tools, which provide trimming functionality to adjust the length of product videos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-02-09T22:18:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"3500\" \/>\n\t<meta property=\"og:image:height\" content=\"2334\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Create Video Playback for Product List Page\",\"datePublished\":\"2022-02-09T22:18:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/\"},\"wordCount\":7,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA\",\"keywords\":[\"Guest Post\",\"React\",\"Under Review\",\"Video\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2022\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/\",\"name\":\"Create Video Playback for Product List Page\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA\",\"datePublished\":\"2022-02-09T22:18:22+00:00\",\"description\":\"This post describes how to leverage Cloudinary's rich media transformation tools, which provide trimming functionality to adjust the length of product videos.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA\",\"width\":3500,\"height\":2334},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Video Playback for Product List Page\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Create Video Playback for Product List Page","description":"This post describes how to leverage Cloudinary's rich media transformation tools, which provide trimming functionality to adjust the length of product videos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/","og_locale":"en_US","og_type":"article","og_title":"Create Video Playback for Product List Page","og_description":"This post describes how to leverage Cloudinary's rich media transformation tools, which provide trimming functionality to adjust the length of product videos.","og_url":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/","og_site_name":"Cloudinary Blog","article_published_time":"2022-02-09T22:18:22+00:00","og_image":[{"width":3500,"height":2334,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA","type":"image\/jpeg"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/"},"author":{"name":"","@id":""},"headline":"Create Video Playback for Product List Page","datePublished":"2022-02-09T22:18:22+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/"},"wordCount":7,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA","keywords":["Guest Post","React","Under Review","Video"],"inLanguage":"en-US","copyrightYear":"2022","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/","url":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/","name":"Create Video Playback for Product List Page","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA","datePublished":"2022-02-09T22:18:22+00:00","description":"This post describes how to leverage Cloudinary's rich media transformation tools, which provide trimming functionality to adjust the length of product videos.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA","width":3500,"height":2334},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/video-playback-for-product-list-page\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create Video Playback for Product List Page"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926176\/Web_Assets\/blog\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79\/f5dc57c2f3f2aa9af5394b53d895223857a6a175-3500x2334-1_27818f9d79.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=27817"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27817\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/27818"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=27817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=27817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=27817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}