{"id":3279,"date":"2018-02-14T12:35:19","date_gmt":"2018-02-14T12:35:19","guid":{"rendered":"https:\/\/www.botreetechnologies.com\/blog\/?p=3279"},"modified":"2020-12-02T18:37:43","modified_gmt":"2020-12-02T13:07:43","slug":"video-processing-using-ffmpeg-and-celery-with-django","status":"publish","type":"post","link":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/","title":{"rendered":"Video Processing using FFMpeg and Celery with Django"},"content":{"rendered":"\n<p><strong>In our recent project, The user should be able to create a task with video file which associated with multiple audio\/subtitle files.<\/strong><\/p>\n\n\n\n<p>A user can view that video and change audio track\/subtitle. The user can also seek the video using subtitle transcription. There are other typical use cases where a user can edit the video\/audio\/subtitle, which would again need to process the whole thing!<\/p>\n\n\n\n<p>We were not able play all these files together with HTML 5 video tag directly. So we needed to transcode the video file into some sort of stream supported in the video tag, so we can use it with the video tag.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>HLS to the rescue!<\/p><\/blockquote>\n\n\n\n<p>Apple&#8217;s <a href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP_Live_Streaming\">HLS<\/a><b>(HTTP Live Streaming)<\/b> stream was such a solution.<\/p>\n\n\n\n<p>So, to transcode the video file into HLS stream we used <a href=\"https:\/\/www.ffmpeg.org\/\">FFmpeg<\/a> multimedia framework.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.<\/p><\/blockquote>\n\n\n\n<p>It contains ffmpeg which can be used by end users for <b>transcoding<\/b>.<\/p>\n\n\n\n<p>But It was not appropriate to make a user wait until we finished our stream transcoding.<\/p>\n\n\n\n<p>In case of a large file, we were facing server timeout. So we moved transcoding part to the background process.<\/p>\n\n\n\n<p>We used <a href=\"http:\/\/www.celeryproject.org\/\">celery<\/a> to perform background processing.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Celery is an asynchronous task queue\/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well. Tasks can execute asynchronously or synchronously.<\/p><\/blockquote>\n\n\n\n<p>We used <a href=\"https:\/\/redis.io\/\">redis<\/a> as an in-memory database for celery, Which is an open source in-memory data structure store, used as a database, cache and message broker.<\/p>\n\n\n\n<p>You can install celery by using the following command:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>$ pip install celery<\/code><\/p><\/blockquote>\n\n\n\n<p>As I mentioned above we were using redis database in our project. You can install by executing following command from your shell:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>$ pip install redis<\/code><\/p><\/blockquote>\n\n\n\n<p>To check whether redis is installed or not simply write following in your shell:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>$ redis-server<\/code><\/p><\/blockquote>\n\n\n\n<p>We need to create a <i><code>celery.py<\/code><\/i> file in our project directory to use <b>celery<\/b> into our Django project.<\/p>\n\n\n\n<p>Add the following code in your file and add the path to your settings and your app name.<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/yogendra-btc\/0d08256d9bcfd5c0aca129e64fd788f9.js\"><\/script><\/p>\n\n\n\n<p>To load our Celery app when Django starts, we need to import our app from <i><code>celery.py<\/code><\/i> file into <i><code>__init__.py<\/code><\/i> sits next to our settings file.<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/yogendra-btc\/f10f788c823681587ef90f598d6cccbf.js\"><\/script><\/p>\n\n\n\n<p>We need to add the following piece of code to use redis in our project:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>BROKER_URL = 'redis:\/\/localhost:6379'<br>\nCELERY_RESULT_BACKEND = 'redis:\/\/localhost:6379'<br>\nCELERY_ACCEPT_CONTENT = ['application\/json']<br>\nCELERY_TASK_SERIALIZER = 'json'<br>\nCELERY_RESULT_SERIALIZER = 'json'<br>\nCELERY_TIMEZONE = 'you can specify any timezone here'<\/code><\/p><\/blockquote>\n\n\n\n<p>You can specify your required timezone here.<\/p>\n\n\n\n<p>You can receive celery task by running the following command:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>$ celery -A 'your settings.py containing folder name' worker -l info<\/code><\/p><\/blockquote>\n\n\n\n<p>To run the celery scheduler run the following command:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>$ celery -A 'your settings.py containing folder name' beat -l info<\/code><\/p><\/blockquote>\n\n\n\n<p>Celery scheduler will get all scheduled task and pass them to celery worker for processing.<\/p>\n\n\n\n<p>Now just create a file task.py sits next to views.py or any other location. you can write your tasks in this file and call them from django views or simply run them by creating the schedule.<\/p>\n\n\n\n<p>Here, you need to tell celery worker from where to get celery task. You can do this simply adding your tasks.py in your settings.py file.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>CELERY_IMPORTS=(\"your_app_name.tasks\")<\/code><\/p><\/blockquote>\n\n\n\n<p>Now we are done with celery setup in our Django project. Just see how to create celery task and periodic task. You can write your tasks in your <i><code>tasks.py<\/code><\/i> file.<\/p>\n\n\n\n<p><script src=\"https:\/\/gist.github.com\/yogendra-btc\/5a26e7a0cf5cdd0afacc94fe8b667ee5.js\"><\/script><\/p>\n\n\n\n<p>You can call your celery task from your Django views by simply calling them in the following manner:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><code>add.delay(7, 8)<\/code><\/p><\/blockquote>\n\n\n\n<p>Now We are done with background processing with Django using Celery and Redis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.botreetechnologies.com\/django-development\" target=\"_blank\" rel=\"noopener noreferrer\">Click here for more details&#8230;<\/a><\/h3>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>At <a href=\"https:\/\/www.botreetechnologies.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">BoTree Technologies<\/a>, we build enterprise applications with our Django team of 20+ engineers.<\/p>\n\n\n\n<p>We also specialize in RPA, AI, Python, Ruby on Rails, JavaScript and ReactJS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.botreetechnologies.com\/contact\" target=\"_blank\" rel=\"noopener noreferrer\">Consulting is free<\/a> &#8211; let us help you grow!<\/h3>\n","protected":false},"excerpt":{"rendered":"<p>In our recent project, The user should be able to&#8230;<\/p>\n","protected":false},"author":27,"featured_media":13051,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68,10],"tags":[],"class_list":["post-3279","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django","category-technology"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Video Processing using FFMpeg and Celery with Django<\/title>\n<meta name=\"description\" content=\"In our recent project, The user should be able to create a task with video file which associated with multiple audio\/subtitle files.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Video Processing using FFMpeg and Celery with Django\" \/>\n<meta property=\"og:description\" content=\"In our recent project, The user should be able to create a task with video file which associated with multiple audio\/subtitle files.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/\" \/>\n<meta property=\"og:site_name\" content=\"BoTree Technologies\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/BoTreeTechnologies\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-14T12:35:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-02T13:07:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Yogendra Katewa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@BoTreeTech\" \/>\n<meta name=\"twitter:site\" content=\"@BoTreeTech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yogendra Katewa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/\"},\"author\":{\"name\":\"Yogendra Katewa\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/6d6e7cb5fcfc8a2d634d736b2e972d42\"},\"headline\":\"Video Processing using FFMpeg and Celery with Django\",\"datePublished\":\"2018-02-14T12:35:19+00:00\",\"dateModified\":\"2020-12-02T13:07:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/\"},\"wordCount\":607,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg\",\"articleSection\":[\"Django\",\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/\",\"name\":\"Video Processing using FFMpeg and Celery with Django\",\"isPartOf\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg\",\"datePublished\":\"2018-02-14T12:35:19+00:00\",\"dateModified\":\"2020-12-02T13:07:43+00:00\",\"author\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/6d6e7cb5fcfc8a2d634d736b2e972d42\"},\"description\":\"In our recent project, The user should be able to create a task with video file which associated with multiple audio\/subtitle files.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg\",\"contentUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg\",\"width\":1024,\"height\":683,\"caption\":\"Video Processing using FFMpeg and Celery\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.botreetechnologies.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Video Processing using FFMpeg and Celery with Django\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#website\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/\",\"name\":\"BoTree Technologies\",\"description\":\"Committed to inspire generation.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.botreetechnologies.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/6d6e7cb5fcfc8a2d634d736b2e972d42\",\"name\":\"Yogendra Katewa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/yogendra-katewa-150x150.png\",\"url\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/yogendra-katewa-150x150.png\",\"contentUrl\":\"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/yogendra-katewa-150x150.png\",\"caption\":\"Yogendra Katewa\"},\"description\":\"Yogendra is a Python developer. He also loves working in JavaScript frameworks. He is a foody, loves to read and is also a fitness enthusiast.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Video Processing using FFMpeg and Celery with Django","description":"In our recent project, The user should be able to create a task with video file which associated with multiple audio\/subtitle files.","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:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/","og_locale":"en_US","og_type":"article","og_title":"Video Processing using FFMpeg and Celery with Django","og_description":"In our recent project, The user should be able to create a task with video file which associated with multiple audio\/subtitle files.","og_url":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/","og_site_name":"BoTree Technologies","article_publisher":"https:\/\/www.facebook.com\/BoTreeTechnologies\/","article_published_time":"2018-02-14T12:35:19+00:00","article_modified_time":"2020-12-02T13:07:43+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg","type":"image\/jpeg"}],"author":"Yogendra Katewa","twitter_card":"summary_large_image","twitter_creator":"@BoTreeTech","twitter_site":"@BoTreeTech","twitter_misc":{"Written by":"Yogendra Katewa","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#article","isPartOf":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/"},"author":{"name":"Yogendra Katewa","@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/6d6e7cb5fcfc8a2d634d736b2e972d42"},"headline":"Video Processing using FFMpeg and Celery with Django","datePublished":"2018-02-14T12:35:19+00:00","dateModified":"2020-12-02T13:07:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/"},"wordCount":607,"commentCount":0,"image":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage"},"thumbnailUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg","articleSection":["Django","Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/","url":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/","name":"Video Processing using FFMpeg and Celery with Django","isPartOf":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage"},"image":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage"},"thumbnailUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg","datePublished":"2018-02-14T12:35:19+00:00","dateModified":"2020-12-02T13:07:43+00:00","author":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/6d6e7cb5fcfc8a2d634d736b2e972d42"},"description":"In our recent project, The user should be able to create a task with video file which associated with multiple audio\/subtitle files.","breadcrumb":{"@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#primaryimage","url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg","contentUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2018\/02\/FFMpeg-and-Celery-with-Django.jpg","width":1024,"height":683,"caption":"Video Processing using FFMpeg and Celery"},{"@type":"BreadcrumbList","@id":"https:\/\/www.botreetechnologies.com\/blog\/video-processing-using-ffmpeg-and-celery-with-django\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.botreetechnologies.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Video Processing using FFMpeg and Celery with Django"}]},{"@type":"WebSite","@id":"https:\/\/www.botreetechnologies.com\/blog\/#website","url":"https:\/\/www.botreetechnologies.com\/blog\/","name":"BoTree Technologies","description":"Committed to inspire generation.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.botreetechnologies.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.botreetechnologies.com\/blog\/#\/schema\/person\/6d6e7cb5fcfc8a2d634d736b2e972d42","name":"Yogendra Katewa","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/yogendra-katewa-150x150.png","url":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/yogendra-katewa-150x150.png","contentUrl":"https:\/\/www.botreetechnologies.com\/blog\/wp-content\/uploads\/2020\/10\/yogendra-katewa-150x150.png","caption":"Yogendra Katewa"},"description":"Yogendra is a Python developer. He also loves working in JavaScript frameworks. He is a foody, loves to read and is also a fitness enthusiast."}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/3279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/comments?post=3279"}],"version-history":[{"count":1,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/3279\/revisions"}],"predecessor-version":[{"id":13052,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/posts\/3279\/revisions\/13052"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/media\/13051"}],"wp:attachment":[{"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/media?parent=3279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/categories?post=3279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.botreetechnologies.com\/blog\/wp-json\/wp\/v2\/tags?post=3279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}