{
  "video_id": "2EZMBq4gWOY",
  "channel_slug": "techwithtim",
  "channel_handle": "techwithtim",
  "title": "How to Design a Production-Grade System in Python",
  "duration_seconds": 1419.0,
  "url": "https://www.youtube.com/watch?v=2EZMBq4gWOY",
  "upload_date": "",
  "transcript": "Now I know a lot of you watching\nare tired of the beginner tutorials, the quick code\nsnippets, the simple library functions\nand you want something more advanced.\nSo in this video I'm going to give you exactly that.\nI'm going to walk through a production ready\narchitecture for a large scale web\nscraping system that can reliably collect\na massive amount of data at scale.\nNow, in case that doesn't sound impressive\nto you yet, I'm going to walk you through\nwhy this is actually something challenging.\nAnd if you've ever done any web scraping before,\nthen you're probably familiar with that.\nThen what I'm going to do\nis give you a full, in-depth breakdown\nof the entire architecture of a system\nthat I've already built.\nWe're going to go through diagrams.\nI'm going to talk about the tech stack,\nand I'm going to explain how you can make\nsomething, again, scalable with many different tools\nusing pure Python.\nBecause I know a lot of you\nto watch this channel like that.\nOkay, so with that in mind, let's quickly\ntalk a little bit about scraping\nbecause that's effectively\nwhat I'm going to show you here.\nKind of an Amazon price competitor tool where\neffectively what we're able to do is go to Amazon\nsearch in different regions for the same product\nand see where there's kind of some price discrepancy\nand what competitors are charging,\nwhat prices for, what products in real time.\nNow, if you've ever scraped anything beyond\na quick script, then you probably know this pattern.\nThe first version works, then it gets blocked, then\ndifferent countries\nreturn, different pages, then sessions die.\nThen your data gets inconsistent\nand you stop trusting it.\nNow at that point, scraping\ndata stops becoming just a coding problem.\nIt actually turns into a large scale systems problem.\nHow do you get past blocks?\nHow do you scrape from different countries?\nHow do you do this reliably?\nHow do you deal with failures?\nThat's something that I'm\ngoing to tackle in this video.\nSo rather than me walking through\njust a simple example, I'm going to go through\na complete scraping system that I've tested\nthat actually holds up in the real world,\none that you can run continuously, scale across\nregions, store historical data,\nand still be flexible to query later\nusing something like an AI model.\nNow, at a high level,\nthe architecture looks like this.\nEssentially, we have an event driven backend that\ntriggers scraping jobs.\nA clean Python scraping layer, a proper proxy network\nso traffic looks like real users,\nstorage for both raw data and historical prices,\nand an optional AI layer on top.\nSo you can ask questions instead of writing\ncustom queries every time.\nNow, this might sound complex,\nand that's because it is.\nAnd that's the whole point of this video to show you\nsomething that goes beyond just using 1 or 2 tools.\nSo with that said, let's hop over the computer.\nLet me walk you through an example of what I built.\nThen we're going to get into the in-depth\narchitecture, and I'll explain to you\nexactly how you could build something just like this.\nAnd by the way, if you want the code on screen,\nyou'll be able to see it\nfrom the link in the description.\nSo I just want to quickly tease the architecture\nbecause I put together some diagrams that again,\nwe'll dive into in more depth later.\nOne thing you'll notice is\nthere's a lot of different components\nhere, a lot of different tools being used.\nAnd I want to point your attention to this one\ndown here in the bottom right, which is the Thor\ndata proxy network, specifically\nthe residential proxy network that I'm using.\nNow, without that,\nthis entire project wouldn't be possible.\nSo massive shoutout to Thor data\nfor sponsoring this video, but more on that later.\nOkay, so quickly I want to go into a demo\nand just show you what this can do.\nYou know, visually it doesn't look that impressive,\nbut in terms of what it's actually grabbing,\nI think it's pretty cool.\nAnd then we'll get into all of the design.\nSo I've got the demo open\nand I'll quickly explain to you how this works.\nNow effectively, like I mentioned, this is an Amazon\nkind of price comparison and scraping agent.\nWhat it allows you to do is enter in the Asin\nor Amazon kind of identifier or product\nID for a particular product\nthat you're interested in retrieving,\nand then to put the different target countries\nyou want to get it from.\nSo a lot of times the same product exists on Amazon,\nbut on multiple different sites,\nlike in Italy, in France, in, you know,\nUnited Arab Emirates, like I am in Canada and US, it\nactually\noftentimes has very different prices,\nwhich I thought was interesting.\nSo you can select the different domain\nyou want to scrape it from.\nAnd then assuming this product exists\non multiple sites, sometimes it does,\nsometimes it doesn't, it will scrape all of the data\nand collect it for you.\nSo for example\nyou can see that I scraped scrubbed daddy.\nNow I was able to scrape that from France,\nfrom Spain, from Australia, from Japan.\nAnd you can see that we're getting different prices\nshowing up. Right?\nEven in euros.\nIt's a different price in these different countries\nfor the same thing.\nIf we keep going down,\nI was able to scrape an iPad from, you know, Amazon\nas I scraped Kleenex, in which case\nthis existed on a few different domains,\nand I just scraped like a razor.\nSo I just did a few products.\nI don't want to overwhelm you in the demo,\nbut you could do as many as you want.\nAnd this is fully scalable and can, you know,\nasynchronously scale up\nand do effectively unlimited products.\nNow, I also made this price comparison tab,\nwhich allows you to quickly\nlook into the products that have kind of multiple\ndifferent country entries.\nSo you can see like Kleenex. Here you go.\nWe have the information.\nIf I go to Scrub Daddy same thing.\nWe kind of have some charts\nand information about that.\nAnd then the coolest thing in my opinion\nis that I made this,\nI enabled which means there's an AI chat feature.\nSo rather than having to write SQL\nor just pass through the information yourself,\nyou can just ask it whatever you want.\nYou could do something like, you know,\nwhat is the price of an iPad?\nAnd this should\nthen give you the result by querying the database.\nSo you can see that it gave me the result,\nand it told me all of the information that it found\nby querying the database based on, you know,\nyou just typing what is the price of an iPad.\nSo you can imagine how this information\nwould be useful to a business, right?\nEspecially if they're interested in e-commerce\nand how if you made something like this\nand just adjusted it to a particular company,\nyou could gather a lot of intelligence\nthat would be very meaningful for making decisions.\nNow, I'll just quickly show you\nthat the scraping does work.\nSo for example, like I have this Ax product,\nI'm just going to grab the Asin from the URL up here,\nand let's just go here and paste it in.\nAnd I'm just going to do a few countries.\nSo let's say US, Canada, UK and maybe 80.\nNow I don't know if it's going to give me the results\nfrom all of them because this product\nhas to exist\nunder the same Asin for this to work specifically.\nBut there's all kinds of ways to make this work\ndifferently where that doesn't need to be the case.\nAnd anyways, I'm going to press on scrape product.\nBut another cool thing I'll show you\nis that when I do that, this actually\nnow connects to one of the logging\nand monitoring tools that I use called ingest.\nNow ingest is really good for doing orchestration\nof especially AI\nenabled applications where you have like,\nyou know, event streaming and whatnot.\nSo you can see that I created this ingest server,\nwhich I'll talk about in a second,\nwhich allows me to monitor everything that's going on\nwith this particular application.\nSo you can see kind of tasks were coming in here.\nWe had, you know, two were completed.\nWe're scraping a product.\nYou can see exactly when that happens.\nAnd then you'll see that we have scrape says, okay,\nyou know, the product appears to be empty or invalid.\nSo we didn't find the information.\nSo we just immediately returned.\nIf I go into another one.\nSo let's go back to runs.\nLet me go to like one like this.\nYou can see that\nwe got some information about a product previously.\nYou know, we got the product from the different\ncountries or whatever it is that we wanted to scrape.\nThen we had like an answer that was returned.\nIf I go into another one here,\nyou can see that this was scraping a product.\nI just did this.\nWhat is it, a few minutes ago, and you can see that\nwe're scraping on a this was the Asin.\nThis is the categories, the products.\nAnd it gives us all of the information.\nSo we can see kind of what's being returned.\nAnd I was, you know, hooking this up.\nWe then embed this in the vector database.\nWe can see how long that step takes.\nAnd then we have finalization where it returns\nthe results to the UI.\nAnd then sometimes it fails right.\nAnd it will actually attempt multiple times\nto scrape the product.\nSometimes the product doesn't exist.\nSometimes there's a timeout or whatever,\nbut it actually cleanly returns and gives us\nthe logs and information so we can see exactly\nwhat's going on, dive into this, fix it, etc.\nwe can click through this, and the whole point is\nwe can see like you know, exactly what was happening,\nthe different functions that we called.\nYou can see here we were querying a product here,\nwe were scraping a product.\nAnd when you have something\nthat you want to actually run at scale,\nyou want some kind of orchestration tool like this\nwhere you can go into it,\nyou can see the different events\nyou can see the different functions\nthat you've set up.\nYou can see the runs, you can retrigger them right.\nLike I can rerun them and try it again.\nI could cancel the run if it was currently running.\nAnd you have this all built in really easily,\nwhich I'll show you in a second.\nSo if we go back to the price agent\nand we scroll down here,\nyou can see we were able to scrape the ax body spray.\nIn this case it was only available in the United Arab\nEmirates for this particular case.\nAnd again I would have to kind of find an Asin\nlike I did before with Kleenex and with Scrub\nDaddy, where it exists in multiple regions\nto show you that feature regardless.\nPretty cool.\nNow what I want to do is go over to the code\neditor and start\nwalking through the architecture\nand how you could replicate this.\nSo let's start with the list of the tools that I used\nfor this project.\nNow keep in mind this is purely written in Python.\nYou could do this in other languages or frameworks.\nBut you know I like Python. A lot of you guys do too.\nSo that's why I did that.\nOkay, so for the user interface I used Streamlit.\nStreamlit is a super easy frontend\nUI library for Python.\nDefinitely recommend checking it out,\nespecially for demos like this.\nNext fast API of course, I'm going to use that\nfor the back end API for being the API\nlayer essentially, and communicating the requests\nand the responses to my front end.\nBecause I have this and fast API,\nit also allows me to make another kind of front end,\nlike a mobile app\nor another web app or something along those lines\nwhere we could use this tool without being tied\nto this direct user interface, then ingest.\nThis is the tool I just showed you that handles\nall of the orchestration.\nI have full detailed tutorials on this channel\non how it works and how to set it up,\nbut it's very straightforward and it effectively\nallows you to create kind of monitored functions,\nwhich is what I did, where you can track\nwhat's going on at each step like you saw.\nThen for the scraping, we used beautifulsoup.\nSo what I mean by this is essentially parsing\nthe scraped code that we got.\nSo this allows us to extract the product data\nfrom Amazon, which I'll show you a really cool way\nof doing later in the video.\nThen for the proxy provider we used Thor Data.\nNow I have to show this one out because this is\nwhat makes this entire project possible.\nIf you were to try to just send\na normal network request, for example,\nfrom like our computer to Amazon,\nyou can do that 4 or 5, maybe ten times.\nBut if you keep doing that,\neventually Amazon is going to block you.\nIt's going to blacklist your IP.\nIt's going to give you a Captcha or some problem\nyou need to solve.\nIt's going to detect you as a bot,\nand it's not going to allow for a scalable solution.\nImagine you want to hit Amazon thousands of times.\nSo what I'm using is store data\nwhich provides a residential proxy network.\nI'll quickly\nshow it to you here that allows you to emulate\nbeing in a different country\nby using a real physical device.\nSo essentially what a proxy is is that rather than me\nsending the request, I send a request to Thor Data.\nThor data\nthen delegates that request to its residential proxy\nnetwork of like millions of devices\nthat it has access to.\nAnd then can pick\nif I want to send a request from Germany\nor Canada or UAE or wherever\nI want to send the request from.\nThen what that does is\nit sends a request from that real device,\ngets what you would see from that country,\nand then returns the data back to me.\nSo you can see that I set up the proxy,\nwhich I'll show you how to do a little bit later.\nBut that's kind of the network\nthat I'm using in order\nto send out an unlimited number of requests\nnot to get blocked\nand to determine kind of the session management\nand what country I'm scraping the data from.\nThey have a ton of other options as well.\nSo like you could use mobile proxy, high bandwidth\nproxy, static IP\ndata center proxies, web scraping API. Right.\nLike there's a bunch of stuff you can do here.\nAnd if you scroll through. Actually,\nI was wrong. It's not just millions.\nI have like 60 million\nplus proxy IPS across 190 countries,\nwhich allows you to kind of unlock web data at scale,\nwhich is exactly what I was showing you to do.\nAnd like I mentioned,\nyou can do it in multiple frameworks.\nSo anyway, so that's store data, which again\nis the thing that makes this project possible.\nThen we have MongoDB.\nSo I'm just running a local MongoDB database\non my own computer which is spun up with Docker,\nwhich we'll talk about in a second.\nThen for the vector database I'm using quadrant again\na local vector database on my own machine.\nNow a vector database is a special type of database\nthat stores embeddings of kind of textual data.\nSo in this case we have all of the products.\nBut if I had millions of products\njust running like a SQL query on them\nisn't that efficient\nif we want to give that data to AI.\nSo what we do is we actually embed\nthe important information of our products\ninto this special type of database, which\nis highly efficient at being queried by AI models.\nAnd then we can return relevant results\nextremely fast\nin that conversation chain you saw by using quadrant.\nThen we're using OpenAI for handling the embeddings.\nWe could have used a local model, but\nI just chose this because it's the easiest method.\nAnd then in terms of actually running\nthat AI agent, you saw\nthat gives us the results about a particular product.\nWe're just doing that\nwith long chain, where we're setting up some tools\nthat can call the quadrant database.\nLike I mentioned, in terms of the external services,\nwe had Thor data open AI.\nAnd then of course\nAmazon is the website that we're targeting.\nBut we could do this with really any site\nthat we want with some minor adjustments.\nSo that's pretty much it in terms of the tool stack.\nNow let's go over the architecture and I'll dive\ninto some of the interesting parts of the code.\nSo you can see kind of some unique tricks\nthat I was using to get this to work effectively,\nbecause a lot of times getting the web pages easy,\nbut actually scraping\nthe data on the page can be difficult\nand really tedious.\nIf you're just like looking through all of the HTML\ntags.\nOkay, so this is the architecture diagram.\nLet's start going through it kind of step by step.\nSo we have the application layer right which is where\na lot of the kind of communication is happening.\nEffectively we have the Streamlit UI.\nThe ports aren't really relevant,\nbut you can read them if you want.\nAnd what will happen is when we use the user\ninterface will effectively send a query rights\nlike scrape a product or give me some information or,\nyou know, ask the AI agent.\nAnd right now we send that to ingest.\nNow ingest is this kind of intermediary server\nwhich handles all of the logging and monitoring.\nTo put it in fancy terms,\nyou know, we can say event orchestration, right.\nThen ingest will send or kind of forward\nall of these different requests\nover to our fast API API, which will then be able\nto get the different responses.\nSo the scraping logic right happens.\nBut being triggered by the API,\nwhich we'll look at in a second, but ingest\nis this kind of middle ground\nwhich is proxying the different requests\nand sending kind of the different events\nwhere they need to go.\nNow, the two core functions of this application\nthat ingest kind of handles is querying the products.\nRight?\nSo like from AI and scraping the products. Right.\nThat's the two main things that this handles.\nYou can see that\nI've just set up those two functions.\nAnd they kind of have their dependencies\nas we go down.\nWe also have the link chain agent\nwhich can be triggered directly from ingest right\nwhen we're trying to query the products.\nSo from the link chain agent\nI have this connected to a few tools.\nThe tools it has access to is the Amazon scraper.\nSo we can actually go out and scrape\nthe products itself using the Amazon scraper.\nIt can send a kind of a tool call to that.\nWe also have it connected to our quadrant vector\nembeddings.\nThis is again that super efficient database\nthat's used specifically for querying\nthe data really, really fast.\nAnd then we have it connected to our MongoDB database\nso that once it queries the information it needs,\nit can get the full complete schema\nor kind of database model from MongoDB.\nSo there's three tools connected to it.\nThen we keep going the Amazon scraper.\nSo this is kind of just an independent module\nor piece of code where effectively what it does\nis it utilizes that residential proxy network\nto send the request, get the HTML.\nSo it goes, hey,\nI want to go to Amazon and, you know, scrape\nthis particular product, give me the HTML for that.\nWe send that request to Thor data.\nWe tell Thor data, all of the information\nabout the session that we want to set up.\nDo we want to connect to an existing session?\nDo we want to change the location?\nYou know, how long do we want to wait, whatever,\nall of the different settings that it has.\nAnd then what it does is gives us back\nthat geolocation specific HTML\nfrom a proxy proxy device, right.\nLike a residential proxy device.\nAnd then what we're able to do is use Beautifulsoup\nto actually scrape through that content\nand pull out the different HTML\nelements, JavaScript elements,\nand grab all of that product data.\nSo then, even though\nit's not really like fully connected up here,\nwe then take that info\nand store it in the MongoDB database.\nAnd at the same time we embed the data\nand store it in the quadrant database\nso that we have the kind of scrape stuff.\nAnd you can kind of see the trigger here, right?\nSo from ingest\nwe trigger the scrape product function.\nWe scrape goes to the scraper goes to Thor\ndata gets the data right.\nWe scrape it from Amazon.\nData comes back.\nStep two we store into MongoDB.\nAnd then step three we embedded in quadrant. Right.\nAnd kind of the same thing here.\nWhen we're querying the product we search for\nthe information in the quadrant vector embeddings.\nAnd then we get the details from the MongoDB\ndatabase.\nCool.\nThen we have OpenAI,\nwhich is just responsible for running the yellow lab\nand then creating the embeddings\nand kind of generating the text string.\nSo that's pretty much it in terms of kind of this,\nif you want to see a flow chart,\nyou can have a look at it here.\nThis is for the product scraping\nI'm not going to go through it step by step.\nAnd this is for the query flow.\nSo as mentioned I'm\ngoing to dive into some different components\nof the code now and walk through some interesting\nkind of technical stuff.\nSo in terms of the scraping\nand connecting to the proxy,\nI want to show you that set up\nbecause it is fairly straightforward to do.\nNow there's multiple ways to connect to the proxy.\nYou can do this using a framework\nlike selenium for example, or playwright,\nwhich is kind of like a web automation framework,\nwhich is a little bit more complex.\nOr you can just directly send an Http request,\nget all of the raw HTML\nand kind of page data back using, in this case\nthe Thor data proxy.\nSo what I was able to do is from the Thor data set,\nlet me just pop it up here.\nI was able to create this kind\nof residential proxy account or like service.\nI was able to buy one gigabyte of data.\nI forgot how much it was,\nmaybe 20 bucks or something, but it's pretty cheap.\nYou can see I've hardly used any of it,\nand I simply just got a username and a password.\nBut I'm also able to whitelist my IP address\nfrom there I can just go and I can see\nkind of like the curl command that I could run,\nor I can change this to look at some code examples.\nSo I can see directly how I would run this\nin something like Python for example,\njust shows me how to do this.\nSo what I did is I set up my own client\nwhere I essentially got my username,\ngot my password,\ngot the proxy server that I'm going to connect to,\nand then I just kind of built this quick little\nclient that is able to build the authentication\nstring that I need to send to Thor data\nwhen I want to actually get this proxy to request.\nSo effectively,\nall this is doing is it's just building\nthe correct string\nwhere it's putting in like my username, the country\nI want to connect to this session\nID because Thor data can intelligently manage\nthe session so you can reconnect to kind of\nthe same browser instance if you want that.\nAnd then in order to get the proxy URL,\nwe just put the authentication\ncomponent, proxy host and the proxy port.\nAnd that's pretty much it.\nAnd then these are just functions that allow you\nto send a Get request and a Post request.\nAnd effectively all I've done is\nI've just set proxies equal to proxies.\nAnd I put an Http and https proxy object here.\nAnd now when I request a particular URL,\nwhich is the Amazon\nproduct URL, it proxies it through that\nand just gives me the request.\nAnd that's literally it for actually connecting\nto the proxy network and getting the data back.\nNow, in terms of kind of scraping the data back,\nlet's go into that and I'll show you how it works.\nOkay. So this is my scraping client.\nFirst thing I do is I connect to the proxy client\nso I can actually send the request.\nAnd then I have this scrape product function.\nSo what I do is get the correct Amazon\ndomain based on the country code.\nI then generate the URL right that I actually\nwant to go to to get this particular product.\nI then send the request\nand then of course if there's an issue I raise that.\nThen what I do is I just take the XML.\nSo notice this is not just purely the HTML.\nAnd I put that into beautifulsoup.\nNow once I put that into Beautifulsoup,\nBeautifulsoup creates this Python object wrapped\naround this content, which allows me to really easily\nget some data about the products.\nRight.\nSo for the product data,\nI'm able to create this kind of Json object\nor what I can do is start filling it in\nwith different information that I have.\nSo to start filling this in, I, you know,\nI put in some information that I have\nand then I start looking for the title, for example,\nright where I'm able\nto look inside of Beautifulsoup for a particular tag.\nSo span with the property product title.\nKeep going. Right.\nI can look for the price where I can find this\na price hole,\nand I use this regular expression to find anything\nthat matches this or contains this text.\nThen I kind of just do a little bit more parsing.\nI'm not going to go through every single line.\nSame thing for finding the what is it the brand.\nRight.\nSo brand by line,\nI can find that just by having the correct\nwhat is it kind of code here\nand what I effectively did in order to do\nthis is the first time\nthat I scraped all of the HTML.\nI just stored it in HTML file.\nI then passed that to my local L alum,\nor the yellow term\nthat I'm running here inside of cursor,\nand I told it, hey, generate the scraping code\nbased on this page,\nand it was able to go through there and find the tags\nthat are going to be consistent\nin order to pull out the information from that page.\nNow, an even more clever way is to actually get it\nfrom the JavaScript object that's populating the Dom.\nHowever, I didn't do that in this particular example.\nSo anyways,\nthat's how I would do the scraping, right?\nIt's really simple with Beautifulsoup avoids\nhaving to like click into stuff and like render\nand generate like dynamic pages using kind of this\nmore advanced clients like Playwright or Selenium.\nAnd that's how I was able to get it.\nNow of course there's a lot of other stuff\nthat I can go through here, but that's kind of\nthe more interesting component of this code.\nI will quickly show you, though, that I did Docker\nise all of this to make it very easy to spin up,\nbecause you can see that\nI was running a lot of different services, right.\nLike I have MongoDB running,\nI have a quadrant database,\nI have Streamlit, I have fast API, I have ingest.\nSo trying to run all of those servers\nindependently every time\nI want to test the app or if I want to deploy\nthis is not really efficient.\nSo again, I had I helped me\ncreate a Docker container with the docker compose\nwhere effectively I'm able to spin up,\nyou know, my Amazon MongoDB container that stores\nmy database, my quadrant database container,\nwhich has the quadrant database\nand the vector database, I'm able to spin up the API,\nI'm able to spin up ingest,\nand then I'm able to spin up Streamlit.\nSo I have all five of those running at once.\nAnd then I created a super simple Readme file here.\nLet's just preview this. So\npreview markdown\nthat shows me all of the different commands\nto effectively run this, tear it down, etc.\nand then how to access the various services\nin terms of what ports\nthey're running on,\nas well as all of the various environment variables.\nAnd then actually, last thing,\nI'll just quickly show you,\nhere's kind of a list of tools\nthat I made that access those various services.\nRight.\nLike performing a vector search on quadrant. Right.\nGetting the information from my database. Right.\nIn terms of like the geolocation\nor the product or the price history or searching\nor scraping or whatever.\nAnd then I connected that to my AI agent,\nwhich is right here,\nwhich I created using Link chain. Right.\nSo you can see I have link chain open AI,\nI created, you know, my model, put my tools,\ncreated this line with tools,\nwhich is super simple, wrote the agent Executer.\nAnd then effectively I was good to go\nand I hooked all this stuff up with the UI\nand I was able to finish this app.\nSo there you go guys.\nThat is everything that I have for you.\nI think this is a super cool project.\nHopefully\nyou appreciate the more complex architecture.\nMaybe I introduce you to a few tools\nyou've never seen before,\nor I gave you some inspiration\nfor something interesting that you could build.\nAgain.\nMassive\nthank you to Thor Data for sponsoring this video.\nIf you want any kind of web search\nor kind of proxy networks,\nor you just want to unlock web data at scale,\nthey are a great company to use.\nTheir pricing is very transparent, very easy.\nAnd as you saw, I was using hardly\nany of the bandwidth that I paid for\nbecause it's very, very efficient.\nAnd again just gives you the results that you need.\nSo anyways, guys, that's all that I have for you.\nIf you enjoyed the video make sure leave a\nlike subscribe and I will see you in the next one.",
  "transcript_chars": 27965,
  "ingested_at": "2026-05-21T13:22:48.721153+00:00",
  "source": "channel",
  "yt_meta": {
    "view_count": null,
    "like_count": null,
    "channel_id": null,
    "categories": null,
    "tags": null
  }
}