Repository: Agent-Hellboy/pyytdata (language: python)

Issue:
Add new testcases to increase code coverage



Discussion / hints:
Hey, I am new to this testing field, can you elaborate a little . I can work on this if you permit.
>Hey, I am new to this testing field, can you elaborate a little . I can work on this if you permit.

you should check the file inside tests, As you can see we are validating only one API response `get_videoinfo`
 https://github.com/Agent-Hellboy/pyytdata/blob/master/tests/test_util.py#L16
 
 we should validate all other API responses 
 
 you can check this article to know more about python unit test 
 https://www.digitalocean.com/community/tutorials/how-to-use-unittest-to-write-a-test-case-for-a-function-in-python
> 

yes , I got to the source file . So the API responses are the get_links(), get_description() , and others. Am I right? I have to validate that in the tests_utils.py . But I dont know how exactly to do this.

>yes , I got to the source file . So the API responses are the get_links(), get_description() , and others. Am I right? 

Yes `get_links(), get_description()` these are the APIs you have to validate responses of these APIs 

I have to validate that in the tests_utils.py. But I don't know how exactly to do this.
Yes, read the article I share with you.
`def test_get_description(self):`  

not sure bout the body of the function and on what basis I can validate. In the article , they had a list to validate upon. (Sorry for all this query , I am pretty new to this.)
        
>not sure bout the body of the function and on what basis I can validate. In the article , they had a list to validate upon. (Sorry for all this query , I am pretty new to this.)

Yes, that's the trickiest part, take some time, and play around with the package you will get some idea if not I will share some pointers with you tomorrow.
Can you assign it to me , I will work around it at evening or midnight. I have exam tomarrow so need to prepare for that as well. I will surely solve this issue.
@Agent-Hellboy I got some idea about unnitest . And some assert methods as well. The responses will be mostly a type of string. for example if we take  `get_description()`  ,it should be a kind of string ,checking if the description is null or not will be enough?
or should we check assertIn() to compare with some sample data.
```
  def test_get_videoinfo(self):
        self.assertTrue(len(self.rslt) == 1)
``` 
I do not understand this part though . 
```
class TestPyYtData(unittest.TestCase):
    def test_check_env(self):
        self.assertTrue(os.environ.get("API_KEY") != None)

    def setUp(self):
        self.data = PyYtData("flask", 1)
        self.rslt = self.data.get_videoinfo()

    def test_get_videoinfo(self):
        self.assertTrue(len(self.rslt) == 1)
  ```
  Here you can see we are querying Youtube data v3 API with flask keyword which is just like searching on youtube and parameter 1 means we want only one result, self.data is VidInfo object you can add a print statement and check these things. As self.data is PyYtData object it has a method called `get_videoinfo` which returns video info objects https://github.com/Agent-Hellboy/pyytdata/blob/3e70e427d7c3c8bf0c799819bc4e8ab12be78840/pyytdata/util/vidinfo.py#L46 
  Like Video Info we have other classes like Channel Info you need to add test cases for methods of these classes 

I will suggest you read the article I have shared and watch some videos also.

 `self.assertTrue(len(self.rslt) == 1)` here we are validating whether we get one videoinfo object which we have requested in setup method. 

Fix patch:
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 0000000..54ab0ab
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,36 @@
+# GitHub Action Workflow enforcing our code style.
+
+name: Lint
+
+# Trigger the workflow on both push (to the main repository, on the main branch)
+# and pull requests (against the main repository, but from any repo, from any branch).
+on:
+  push:
+    branches:
+      - master
+  pull_request:
+# Brand new concurrency setting! This ensures that not more than one run can be triggered for the same commit.
+# It is useful for pull requests coming from the main repository since both triggers will match.
+concurrency: lint-${{ github.sha }}
+
+jobs:
+  lint:
+    runs-on: ubuntu-latest
+
+    env:
+      # The Python version your project uses. Feel free to change this if required.
+      PYTHON_VERSION: "3.10"
+
+    steps:
+      # Checks out the repository in the current folder.
+      - name: Checks out repository
+        uses: actions/checkout@v3
+
+      # Set up the right version of Python
+      - name: Set up Python ${{ env.PYTHON_VERSION }}
+        uses: actions/setup-python@v3
+        with:
+          python-version: ${{ env.PYTHON_VERSION }}
+
+      - name: Run pre-commit hooks
+        uses: pre-commit/action@v3.0.0
diff --git a/.gitignore b/.gitignore
index e0f4283..43719ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,5 +9,7 @@ setup.py
 *.py~
 *~
 new_med.py
-.tox 
+.tox
 .venv
+.vscode/
+.env
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..fb56711
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,26 @@
+repos:
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v2.5.0
+    hooks:
+      - id: check-toml
+      - id: check-yaml
+      - id: end-of-file-fixer
+      - id: trailing-whitespace
+        args: [--markdown-linebreak-ext=md]
+
+  - repo: https://github.com/pre-commit/pygrep-hooks
+    rev: v1.5.1
+    hooks:
+      - id: python-check-blanket-noqa
+
+  - repo: https://github.com/PyCQA/isort
+    rev: 5.10.1
+    hooks:
+      - id: isort
+
+  - repo: https://github.com/pycqa/flake8
+    rev: 4.0.1
+    hooks:
+      - id: flake8
+        additional_dependencies:
+          - flake8-docstrings~=1.6.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index fec3f6d..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Semantic Versioning Changelog
-
-## [0.2.3](https://github.com/Agent-Hellboy/YouTubeDataApi_Wrapper/compare/v0.2.2...v0.2.3) (2021-11-30)
-
-
-### Bug Fixes
-
-* first auto release ([ae33c6c](https://github.com/Agent-Hellboy/YouTubeDataApi_Wrapper/commit/ae33c6c009a73957a92cea7237e89d79163657e6))
-* first auto release ([19f03b6](https://github.com/Agent-Hellboy/YouTubeDataApi_Wrapper/commit/19f03b64ba26fa6c1bbc34701d43c8bd5d0667a0))
diff --git a/README.rst b/README.rst
index 80b9a60..494d79f 100644
--- a/README.rst
+++ b/README.rst
@@ -37,56 +37,33 @@ Installation
     for stable version
        - pip install pyytdata
 
-    for developement
-       - git clone https://github.com/Agent-Hellboy/YouTubeDataApi_Wrapper/
-       - cd YouTubeDataApi_Wrapper
-       - python -m venv .venv
-       - source .venv/bin/activate
-       - pip install -r requirements.txt
+    for current_version
+       - pip install git+https://github.com/Agent-Hellboy/pyytdata.git
 
 
 Using
 -----
 
-   Maybe the first step toward moving the package from a Toy package to a usable package.
-
-   An API which will take the URL of youtube video and provide metadata of the video and the channel which has uploaded that video .
-
-.. code-block:: python
-
-   >>> from pyytdata import vid_info
-   >>> l=vid_info('https://www.youtube.com/watch?v=0fqHuIqkOak')
-   >>> l.get_title()
-   'Manoj Bajpayee Vs. Atul Khatri | Epic Middle class Face-off | The Family Man | Amazon Prime Video'
-   l is a VidInfo object
+   Public APIs
+   get_vid_info_from_url -> Return Video Info from URL
+   get_video_info -> Return Video Info from video_id
+   get_channel_info -> Return Channel Info from channel name
+   get_channel_stat_by_name -> Return channel stat from channel name
+   get_video_stat_by_ID -> Return Video stat from vide_id
 
+Other APIs
 .. code-block:: python
 
 
     >>> from pyytdata import PyYtData
     >>> obj=PyYtData('flask',1)
     >>> vid=obj.get_videoinfo()
-    >>> vid
-    <generator object PyYtData.get_videoinfo at 0x7fb0f69f8040>
 
-    #Since get_videoinfo returns a generator, you can either iterate or get the next() item.
-
-    #You can fire dir on this object to get the attribute and method of the object.
-    >>> dir(next(vid))
-    ['_Info__API_KEY', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_id', 'channel_info', 'get_description', 'get_image_url', 'get_link', 'get_publishedtime', 'get_title', 'keyword', 'maxlen', 'open_id', 'order', 'result', 'type', 'youtube']
-
-For more examples refer to the `\docs` folder
 
 General Info
 ------------
-Under Developement
-
-.. image:: /images/info.png
-   :width: 600
-
-- I think the package has implemented the facade pattern as the lower level packages like videoinfo and chnlinfo are independent from pyytdata and is not exposed to client and also the interaction between querier and videoinfo is hidden from client by providing a interface/module pyytdata
-- vidoinfo class and Chnlinfo has composition relationship as video does not exists without a channel
-
+python-client for
+https://developers.google.com/youtube/v3/docs/channels
 
 
 Contributing
@@ -94,12 +71,3 @@ Contributing
 
 Pull requests are welcome. For major changes, please open an issue first
 to discuss what you would like to change.
-
-Documentation
--------------
-
-To see Documentation open the html files which are included in `docs/build/html/` directory. 
-
-If anyone is interested in contributing to Documentation, 
-they can make changes in the .rst files included in the `docs/source/` directory and 
-then run `make html` in the `docs/`` directory.
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 00386c4..fd223a9 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -1,10 +1,7 @@
 # Base tools
-flake8~=3.7
-isort~=5.9
-pre-commit~=2.13.0
+flake8~=6.0.0
+isort~=5.10.1
+pre-commit~=2.17.0
 
-# Flake8 plugins
-flake8-annotations~=2.0
-flake8-bandit~=2.1
-flake8-docstrings~=1.5
-flake8-isort~=4.0
+#plugin
+flake8-docstrings~=1.7.0
diff --git a/docs/Makefile b/docs/Makefile
deleted file mode 100644
index d0c3cbf..0000000
--- a/docs/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Minimal makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line, and also
-# from the environment for the first two.
-SPHINXOPTS    ?=
-SPHINXBUILD   ?= sphinx-build
-SOURCEDIR     = source
-BUILDDIR      = build
-
-# Put it first so that "make" without argument is like "make help".
-help:
-	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-
-.PHONY: help Makefile
-
-# Catch-all target: route all unknown targets to Sphinx using the new
-# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
-%: Makefile
-	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/build/html/contributing.html b/docs/build/html/contributing.html
deleted file mode 100644
index 0bd2384..0000000
--- a/docs/build/html/contributing.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!doctype html>
-<html class="no-js" lang="en">
-  <head><meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width,initial-scale=1"/>
-    <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="License" href="license.html" /><link rel="prev" title="Usage" href="usage.html" />
-
-    <meta name="generator" content="sphinx-5.2.3, furo 2022.09.29"/>
-        <title>Contributing - pyytdata 0.2.5 documentation</title>
-      <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
-    
-    
-
-
-<style>
-  body {
-    --color-code-background: #f8f8f8;
-  --color-code-foreground: black;
-  
-  }
-  @media not print {
-    body[data-theme="dark"] {
-      --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-    }
-    @media (prefers-color-scheme: dark) {
-      body:not([data-theme="light"]) {
-        --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-      }
-    }
-  }
-</style></head>
-  <body>
-    
-    <script>
-      document.body.dataset.theme = localStorage.getItem("theme") || "auto";
-    </script>
-    
-
-<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
-  <symbol id="svg-toc" viewBox="0 0 24 24">
-    <title>Contents</title>
-    <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
-    </svg>
-  </symbol>
-  <symbol id="svg-menu" viewBox="0 0 24 24">
-    <title>Menu</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
-      <line x1="3" y1="12" x2="21" y2="12"></line>
-      <line x1="3" y1="6" x2="21" y2="6"></line>
-      <line x1="3" y1="18" x2="21" y2="18"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-arrow-right" viewBox="0 0 24 24">
-    <title>Expand</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
-      <polyline points="9 18 15 12 9 6"></polyline>
-    </svg>
-  </symbol>
-  <symbol id="svg-sun" viewBox="0 0 24 24">
-    <title>Light mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
-      <circle cx="12" cy="12" r="5"></circle>
-      <line x1="12" y1="1" x2="12" y2="3"></line>
-      <line x1="12" y1="21" x2="12" y2="23"></line>
-      <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
-      <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
-      <line x1="1" y1="12" x2="3" y2="12"></line>
-      <line x1="21" y1="12" x2="23" y2="12"></line>
-      <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
-      <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-moon" viewBox="0 0 24 24">
-    <title>Dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none" />
-      <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
-    </svg>
-  </symbol>
-  <symbol id="svg-sun-half" viewBox="0 0 24 24">
-    <title>Auto light/dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
-      <circle cx="12" cy="12" r="9" />
-      <path d="M13 12h5" />
-      <path d="M13 15h4" />
-      <path d="M13 18h1" />
-      <path d="M13 9h4" />
-      <path d="M13 6h1" />
-    </svg>
-  </symbol>
-</svg>
-
-<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
-<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
-<label class="overlay sidebar-overlay" for="__navigation">
-  <div class="visually-hidden">Hide navigation sidebar</div>
-</label>
-<label class="overlay toc-overlay" for="__toc">
-  <div class="visually-hidden">Hide table of contents sidebar</div>
-</label>
-
-
-
-<div class="page">
-  <header class="mobile-header">
-    <div class="header-left">
-      <label class="nav-overlay-icon" for="__navigation">
-        <div class="visually-hidden">Toggle site navigation sidebar</div>
-        <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
-      </label>
-    </div>
-    <div class="header-center">
-      <a href="index.html"><div class="brand">pyytdata 0.2.5 documentation</div></a>
-    </div>
-    <div class="header-right">
-      <div class="theme-toggle-container theme-toggle-header">
-        <button class="theme-toggle">
-          <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-          <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-          <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-          <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-        </button>
-      </div>
-      <label class="toc-overlay-icon toc-header-icon" for="__toc">
-        <div class="visually-hidden">Toggle table of contents sidebar</div>
-        <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-      </label>
-    </div>
-  </header>
-  <aside class="sidebar-drawer">
-    <div class="sidebar-container">
-      
-      <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
-  
-  
-  <span class="sidebar-brand-text">pyytdata 0.2.5 documentation</span>
-  
-</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
-  <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
-  <input type="hidden" name="check_keywords" value="yes">
-  <input type="hidden" name="area" value="default">
-</form>
-<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
-  <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="prerequisites.html">Prerequisites</a></li>
-<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
-<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
-</ul>
-
-</div>
-</div>
-
-      </div>
-      
-    </div>
-  </aside>
-  <div class="main">
-    <div class="content">
-      <div class="article-container">
-        <a href="#" class="back-to-top muted-link">
-          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
-            <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
-          </svg>
-          <span>Back to top</span>
-        </a>
-        <div class="content-icon-container">
-          
-<div class="theme-toggle-container theme-toggle-content">
-            <button class="theme-toggle">
-              <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-              <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-              <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-              <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-            </button>
-          </div>
-          <label class="toc-overlay-icon toc-content-icon" for="__toc">
-            <div class="visually-hidden">Toggle table of contents sidebar</div>
-            <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-          </label>
-        </div>
-        <article role="main">
-          <section id="contributing">
-<h1>Contributing<a class="headerlink" href="#contributing" title="Permalink to this heading">#</a></h1>
-<section id="installation">
-<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this heading">#</a></h2>
-<p>To contribute for pyytdata, first fork the repo and then run following commands:</p>
-<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp"> $ </span>git clone https://github.com/github-username/YouTubeDataApi_Wrapper/
-<span class="gp"> $ </span><span class="nb">cd</span> YouTubeDataApi_Wrapper
-<span class="gp"> $ </span>python -m venv .venv
-<span class="gp"> $ </span><span class="nb">source</span> .venv/bin/activate
-<span class="gp gp-VirtualEnv">(.venv)</span> <span class="gp">$ </span>pip install -r requirements.txt
-</pre></div>
-</div>
-</section>
-<section id="guidelines">
-<h2>Guidelines<a class="headerlink" href="#guidelines" title="Permalink to this heading">#</a></h2>
-<p>Pull requests are welcome. For major changes, please open an issue first
-to discuss what you would like to change.</p>
-</section>
-</section>
-
-        </article>
-      </div>
-      <footer>
-        
-        <div class="related-pages">
-          <a class="next-page" href="license.html">
-              <div class="page-info">
-                <div class="context">
-                  <span>Next</span>
-                </div>
-                <div class="title">License</div>
-              </div>
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-            </a>
-          <a class="prev-page" href="usage.html">
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-              <div class="page-info">
-                <div class="context">
-                  <span>Previous</span>
-                </div>
-                
-                <div class="title">Usage</div>
-                
-              </div>
-            </a>
-        </div>
-        <div class="bottom-of-page">
-          <div class="left-details">
-            <div class="copyright">
-                Copyright &#169; 2020, Prince Roshan
-            </div>
-            Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
-            
-            <a href="https://github.com/pradyunsg/furo">Furo</a>
-            
-          </div>
-          <div class="right-details">
-            <div class="icons">
-              
-            </div>
-          </div>
-        </div>
-        
-      </footer>
-    </div>
-    <aside class="toc-drawer">
-      
-      
-      <div class="toc-sticky toc-scroll">
-        <div class="toc-title-container">
-          <span class="toc-title">
-            On this page
-          </span>
-        </div>
-        <div class="toc-tree-container">
-          <div class="toc-tree">
-            <ul>
-<li><a class="reference internal" href="#">Contributing</a><ul>
-<li><a class="reference internal" href="#installation">Installation</a></li>
-<li><a class="reference internal" href="#guidelines">Guidelines</a></li>
-</ul>
-</li>
-</ul>
-
-          </div>
-        </div>
-      </div>
-      
-      
-    </aside>
-  </div>
-</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/scripts/furo.js"></script>
-    </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/index.html b/docs/build/html/index.html
deleted file mode 100644
index c5ae7e8..0000000
--- a/docs/build/html/index.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<!doctype html>
-<html class="no-js" lang="en">
-  <head><meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width,initial-scale=1"/>
-    <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Prerequisites" href="prerequisites.html" />
-
-    <meta name="generator" content="sphinx-5.2.3, furo 2022.09.29"/>
-        <title>pyytdata 0.2.5 documentation</title>
-      <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
-    
-    
-
-
-<style>
-  body {
-    --color-code-background: #f8f8f8;
-  --color-code-foreground: black;
-  
-  }
-  @media not print {
-    body[data-theme="dark"] {
-      --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-    }
-    @media (prefers-color-scheme: dark) {
-      body:not([data-theme="light"]) {
-        --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-      }
-    }
-  }
-</style></head>
-  <body>
-    
-    <script>
-      document.body.dataset.theme = localStorage.getItem("theme") || "auto";
-    </script>
-    
-
-<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
-  <symbol id="svg-toc" viewBox="0 0 24 24">
-    <title>Contents</title>
-    <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
-    </svg>
-  </symbol>
-  <symbol id="svg-menu" viewBox="0 0 24 24">
-    <title>Menu</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
-      <line x1="3" y1="12" x2="21" y2="12"></line>
-      <line x1="3" y1="6" x2="21" y2="6"></line>
-      <line x1="3" y1="18" x2="21" y2="18"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-arrow-right" viewBox="0 0 24 24">
-    <title>Expand</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
-      <polyline points="9 18 15 12 9 6"></polyline>
-    </svg>
-  </symbol>
-  <symbol id="svg-sun" viewBox="0 0 24 24">
-    <title>Light mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
-      <circle cx="12" cy="12" r="5"></circle>
-      <line x1="12" y1="1" x2="12" y2="3"></line>
-      <line x1="12" y1="21" x2="12" y2="23"></line>
-      <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
-      <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
-      <line x1="1" y1="12" x2="3" y2="12"></line>
-      <line x1="21" y1="12" x2="23" y2="12"></line>
-      <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
-      <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-moon" viewBox="0 0 24 24">
-    <title>Dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none" />
-      <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
-    </svg>
-  </symbol>
-  <symbol id="svg-sun-half" viewBox="0 0 24 24">
-    <title>Auto light/dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
-      <circle cx="12" cy="12" r="9" />
-      <path d="M13 12h5" />
-      <path d="M13 15h4" />
-      <path d="M13 18h1" />
-      <path d="M13 9h4" />
-      <path d="M13 6h1" />
-    </svg>
-  </symbol>
-</svg>
-
-<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
-<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
-<label class="overlay sidebar-overlay" for="__navigation">
-  <div class="visually-hidden">Hide navigation sidebar</div>
-</label>
-<label class="overlay toc-overlay" for="__toc">
-  <div class="visually-hidden">Hide table of contents sidebar</div>
-</label>
-
-
-
-<div class="page">
-  <header class="mobile-header">
-    <div class="header-left">
-      <label class="nav-overlay-icon" for="__navigation">
-        <div class="visually-hidden">Toggle site navigation sidebar</div>
-        <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
-      </label>
-    </div>
-    <div class="header-center">
-      <a href="#"><div class="brand">pyytdata 0.2.5 documentation</div></a>
-    </div>
-    <div class="header-right">
-      <div class="theme-toggle-container theme-toggle-header">
-        <button class="theme-toggle">
-          <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-          <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-          <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-          <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-        </button>
-      </div>
-      <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
-        <div class="visually-hidden">Toggle table of contents sidebar</div>
-        <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-      </label>
-    </div>
-  </header>
-  <aside class="sidebar-drawer">
-    <div class="sidebar-container">
-      
-      <div class="sidebar-sticky"><a class="sidebar-brand" href="#">
-  
-  
-  <span class="sidebar-brand-text">pyytdata 0.2.5 documentation</span>
-  
-</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
-  <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
-  <input type="hidden" name="check_keywords" value="yes">
-  <input type="hidden" name="area" value="default">
-</form>
-<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
-  <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="prerequisites.html">Prerequisites</a></li>
-<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
-</ul>
-
-</div>
-</div>
-
-      </div>
-      
-    </div>
-  </aside>
-  <div class="main">
-    <div class="content">
-      <div class="article-container">
-        <a href="#" class="back-to-top muted-link">
-          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
-            <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
-          </svg>
-          <span>Back to top</span>
-        </a>
-        <div class="content-icon-container">
-          
-<div class="theme-toggle-container theme-toggle-content">
-            <button class="theme-toggle">
-              <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-              <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-              <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-              <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-            </button>
-          </div>
-          <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
-            <div class="visually-hidden">Toggle table of contents sidebar</div>
-            <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-          </label>
-        </div>
-        <article role="main">
-          <section id="welcome-to-pyytdata-s-documentation">
-<h1>Welcome to pyytdata’s documentation!<a class="headerlink" href="#welcome-to-pyytdata-s-documentation" title="Permalink to this heading">#</a></h1>
-<p><strong>pyytdata</strong> is a Python library which provides metadata of YouTube videos.</p>
-<p>Check out the <a class="reference internal" href="usage.html"><span class="doc">Usage</span></a> section for further information, including how to
-<a class="reference internal" href="usage.html#installation"><span class="std std-ref">install</span></a> the project.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>This project is under active developement.</p>
-</div>
-<div class="toctree-wrapper compound">
-<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
-<ul>
-<li class="toctree-l1"><a class="reference internal" href="prerequisites.html">Prerequisites</a></li>
-<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="usage.html#installation">Installation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="usage.html#examples">Examples</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="contributing.html#installation">Installation</a></li>
-<li class="toctree-l2"><a class="reference internal" href="contributing.html#guidelines">Guidelines</a></li>
-</ul>
-</li>
-<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
-</ul>
-</div>
-</section>
-
-        </article>
-      </div>
-      <footer>
-        
-        <div class="related-pages">
-          <a class="next-page" href="prerequisites.html">
-              <div class="page-info">
-                <div class="context">
-                  <span>Next</span>
-                </div>
-                <div class="title">Prerequisites</div>
-              </div>
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-            </a>
-          
-        </div>
-        <div class="bottom-of-page">
-          <div class="left-details">
-            <div class="copyright">
-                Copyright &#169; 2020, Prince Roshan
-            </div>
-            Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
-            
-            <a href="https://github.com/pradyunsg/furo">Furo</a>
-            
-          </div>
-          <div class="right-details">
-            <div class="icons">
-              
-            </div>
-          </div>
-        </div>
-        
-      </footer>
-    </div>
-    <aside class="toc-drawer no-toc">
-      
-      
-      
-    </aside>
-  </div>
-</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/scripts/furo.js"></script>
-    </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/license.html b/docs/build/html/license.html
deleted file mode 100644
index ea00ff7..0000000
--- a/docs/build/html/license.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<!doctype html>
-<html class="no-js" lang="en">
-  <head><meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width,initial-scale=1"/>
-    <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="prev" title="Contributing" href="contributing.html" />
-
-    <meta name="generator" content="sphinx-5.2.3, furo 2022.09.29"/>
-        <title>License - pyytdata 0.2.5 documentation</title>
-      <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
-    
-    
-
-
-<style>
-  body {
-    --color-code-background: #f8f8f8;
-  --color-code-foreground: black;
-  
-  }
-  @media not print {
-    body[data-theme="dark"] {
-      --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-    }
-    @media (prefers-color-scheme: dark) {
-      body:not([data-theme="light"]) {
-        --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-      }
-    }
-  }
-</style></head>
-  <body>
-    
-    <script>
-      document.body.dataset.theme = localStorage.getItem("theme") || "auto";
-    </script>
-    
-
-<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
-  <symbol id="svg-toc" viewBox="0 0 24 24">
-    <title>Contents</title>
-    <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
-    </svg>
-  </symbol>
-  <symbol id="svg-menu" viewBox="0 0 24 24">
-    <title>Menu</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
-      <line x1="3" y1="12" x2="21" y2="12"></line>
-      <line x1="3" y1="6" x2="21" y2="6"></line>
-      <line x1="3" y1="18" x2="21" y2="18"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-arrow-right" viewBox="0 0 24 24">
-    <title>Expand</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
-      <polyline points="9 18 15 12 9 6"></polyline>
-    </svg>
-  </symbol>
-  <symbol id="svg-sun" viewBox="0 0 24 24">
-    <title>Light mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
-      <circle cx="12" cy="12" r="5"></circle>
-      <line x1="12" y1="1" x2="12" y2="3"></line>
-      <line x1="12" y1="21" x2="12" y2="23"></line>
-      <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
-      <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
-      <line x1="1" y1="12" x2="3" y2="12"></line>
-      <line x1="21" y1="12" x2="23" y2="12"></line>
-      <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
-      <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-moon" viewBox="0 0 24 24">
-    <title>Dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none" />
-      <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
-    </svg>
-  </symbol>
-  <symbol id="svg-sun-half" viewBox="0 0 24 24">
-    <title>Auto light/dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
-      <circle cx="12" cy="12" r="9" />
-      <path d="M13 12h5" />
-      <path d="M13 15h4" />
-      <path d="M13 18h1" />
-      <path d="M13 9h4" />
-      <path d="M13 6h1" />
-    </svg>
-  </symbol>
-</svg>
-
-<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
-<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
-<label class="overlay sidebar-overlay" for="__navigation">
-  <div class="visually-hidden">Hide navigation sidebar</div>
-</label>
-<label class="overlay toc-overlay" for="__toc">
-  <div class="visually-hidden">Hide table of contents sidebar</div>
-</label>
-
-
-
-<div class="page">
-  <header class="mobile-header">
-    <div class="header-left">
-      <label class="nav-overlay-icon" for="__navigation">
-        <div class="visually-hidden">Toggle site navigation sidebar</div>
-        <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
-      </label>
-    </div>
-    <div class="header-center">
-      <a href="index.html"><div class="brand">pyytdata 0.2.5 documentation</div></a>
-    </div>
-    <div class="header-right">
-      <div class="theme-toggle-container theme-toggle-header">
-        <button class="theme-toggle">
-          <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-          <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-          <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-          <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-        </button>
-      </div>
-      <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
-        <div class="visually-hidden">Toggle table of contents sidebar</div>
-        <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-      </label>
-    </div>
-  </header>
-  <aside class="sidebar-drawer">
-    <div class="sidebar-container">
-      
-      <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
-  
-  
-  <span class="sidebar-brand-text">pyytdata 0.2.5 documentation</span>
-  
-</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
-  <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
-  <input type="hidden" name="check_keywords" value="yes">
-  <input type="hidden" name="area" value="default">
-</form>
-<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
-  <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="prerequisites.html">Prerequisites</a></li>
-<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">License</a></li>
-</ul>
-
-</div>
-</div>
-
-      </div>
-      
-    </div>
-  </aside>
-  <div class="main">
-    <div class="content">
-      <div class="article-container">
-        <a href="#" class="back-to-top muted-link">
-          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
-            <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
-          </svg>
-          <span>Back to top</span>
-        </a>
-        <div class="content-icon-container">
-          
-<div class="theme-toggle-container theme-toggle-content">
-            <button class="theme-toggle">
-              <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-              <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-              <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-              <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-            </button>
-          </div>
-          <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
-            <div class="visually-hidden">Toggle table of contents sidebar</div>
-            <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-          </label>
-        </div>
-        <article role="main">
-          <section id="license">
-<h1>License<a class="headerlink" href="#license" title="Permalink to this heading">#</a></h1>
-<p>Copyright (c) 2020 prince roshan</p>
-<p>Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the “Software”), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:</p>
-<p>The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.</p>
-<p>THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.</p>
-</section>
-
-        </article>
-      </div>
-      <footer>
-        
-        <div class="related-pages">
-          
-          <a class="prev-page" href="contributing.html">
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-              <div class="page-info">
-                <div class="context">
-                  <span>Previous</span>
-                </div>
-                
-                <div class="title">Contributing</div>
-                
-              </div>
-            </a>
-        </div>
-        <div class="bottom-of-page">
-          <div class="left-details">
-            <div class="copyright">
-                Copyright &#169; 2020, Prince Roshan
-            </div>
-            Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
-            
-            <a href="https://github.com/pradyunsg/furo">Furo</a>
-            
-          </div>
-          <div class="right-details">
-            <div class="icons">
-              
-            </div>
-          </div>
-        </div>
-        
-      </footer>
-    </div>
-    <aside class="toc-drawer no-toc">
-      
-      
-      
-    </aside>
-  </div>
-</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/scripts/furo.js"></script>
-    </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/prerequisites.html b/docs/build/html/prerequisites.html
deleted file mode 100644
index 1654b2a..0000000
--- a/docs/build/html/prerequisites.html
+++ /dev/null
@@ -1,264 +0,0 @@
-<!doctype html>
-<html class="no-js" lang="en">
-  <head><meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width,initial-scale=1"/>
-    <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Usage" href="usage.html" /><link rel="prev" title="Welcome to pyytdata’s documentation!" href="index.html" />
-
-    <meta name="generator" content="sphinx-5.2.3, furo 2022.09.29"/>
-        <title>Prerequisites - pyytdata 0.2.5 documentation</title>
-      <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
-    
-    
-
-
-<style>
-  body {
-    --color-code-background: #f8f8f8;
-  --color-code-foreground: black;
-  
-  }
-  @media not print {
-    body[data-theme="dark"] {
-      --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-    }
-    @media (prefers-color-scheme: dark) {
-      body:not([data-theme="light"]) {
-        --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-      }
-    }
-  }
-</style></head>
-  <body>
-    
-    <script>
-      document.body.dataset.theme = localStorage.getItem("theme") || "auto";
-    </script>
-    
-
-<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
-  <symbol id="svg-toc" viewBox="0 0 24 24">
-    <title>Contents</title>
-    <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
-    </svg>
-  </symbol>
-  <symbol id="svg-menu" viewBox="0 0 24 24">
-    <title>Menu</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
-      <line x1="3" y1="12" x2="21" y2="12"></line>
-      <line x1="3" y1="6" x2="21" y2="6"></line>
-      <line x1="3" y1="18" x2="21" y2="18"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-arrow-right" viewBox="0 0 24 24">
-    <title>Expand</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
-      <polyline points="9 18 15 12 9 6"></polyline>
-    </svg>
-  </symbol>
-  <symbol id="svg-sun" viewBox="0 0 24 24">
-    <title>Light mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
-      <circle cx="12" cy="12" r="5"></circle>
-      <line x1="12" y1="1" x2="12" y2="3"></line>
-      <line x1="12" y1="21" x2="12" y2="23"></line>
-      <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
-      <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
-      <line x1="1" y1="12" x2="3" y2="12"></line>
-      <line x1="21" y1="12" x2="23" y2="12"></line>
-      <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
-      <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-moon" viewBox="0 0 24 24">
-    <title>Dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none" />
-      <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
-    </svg>
-  </symbol>
-  <symbol id="svg-sun-half" viewBox="0 0 24 24">
-    <title>Auto light/dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
-      <circle cx="12" cy="12" r="9" />
-      <path d="M13 12h5" />
-      <path d="M13 15h4" />
-      <path d="M13 18h1" />
-      <path d="M13 9h4" />
-      <path d="M13 6h1" />
-    </svg>
-  </symbol>
-</svg>
-
-<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
-<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
-<label class="overlay sidebar-overlay" for="__navigation">
-  <div class="visually-hidden">Hide navigation sidebar</div>
-</label>
-<label class="overlay toc-overlay" for="__toc">
-  <div class="visually-hidden">Hide table of contents sidebar</div>
-</label>
-
-
-
-<div class="page">
-  <header class="mobile-header">
-    <div class="header-left">
-      <label class="nav-overlay-icon" for="__navigation">
-        <div class="visually-hidden">Toggle site navigation sidebar</div>
-        <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
-      </label>
-    </div>
-    <div class="header-center">
-      <a href="index.html"><div class="brand">pyytdata 0.2.5 documentation</div></a>
-    </div>
-    <div class="header-right">
-      <div class="theme-toggle-container theme-toggle-header">
-        <button class="theme-toggle">
-          <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-          <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-          <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-          <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-        </button>
-      </div>
-      <label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
-        <div class="visually-hidden">Toggle table of contents sidebar</div>
-        <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-      </label>
-    </div>
-  </header>
-  <aside class="sidebar-drawer">
-    <div class="sidebar-container">
-      
-      <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
-  
-  
-  <span class="sidebar-brand-text">pyytdata 0.2.5 documentation</span>
-  
-</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
-  <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
-  <input type="hidden" name="check_keywords" value="yes">
-  <input type="hidden" name="area" value="default">
-</form>
-<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
-  <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
-<ul class="current">
-<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Prerequisites</a></li>
-<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
-</ul>
-
-</div>
-</div>
-
-      </div>
-      
-    </div>
-  </aside>
-  <div class="main">
-    <div class="content">
-      <div class="article-container">
-        <a href="#" class="back-to-top muted-link">
-          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
-            <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
-          </svg>
-          <span>Back to top</span>
-        </a>
-        <div class="content-icon-container">
-          
-<div class="theme-toggle-container theme-toggle-content">
-            <button class="theme-toggle">
-              <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-              <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-              <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-              <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-            </button>
-          </div>
-          <label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
-            <div class="visually-hidden">Toggle table of contents sidebar</div>
-            <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-          </label>
-        </div>
-        <article role="main">
-          <section id="prerequisites">
-<h1>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this heading">#</a></h1>
-<ul class="simple">
-<li><p>Get the youtube data v3 api key from <a class="reference external" href="https://console.developers.google.com/apis/">https://console.developers.google.com/apis/</a></p></li>
-<li><p>Set environment variable API_KEY=’Your YoutubeDatav3 API key’</p></li>
-</ul>
-</section>
-
-        </article>
-      </div>
-      <footer>
-        
-        <div class="related-pages">
-          <a class="next-page" href="usage.html">
-              <div class="page-info">
-                <div class="context">
-                  <span>Next</span>
-                </div>
-                <div class="title">Usage</div>
-              </div>
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-            </a>
-          <a class="prev-page" href="index.html">
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-              <div class="page-info">
-                <div class="context">
-                  <span>Previous</span>
-                </div>
-                
-                <div class="title">Home</div>
-                
-              </div>
-            </a>
-        </div>
-        <div class="bottom-of-page">
-          <div class="left-details">
-            <div class="copyright">
-                Copyright &#169; 2020, Prince Roshan
-            </div>
-            Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
-            
-            <a href="https://github.com/pradyunsg/furo">Furo</a>
-            
-          </div>
-          <div class="right-details">
-            <div class="icons">
-              
-            </div>
-          </div>
-        </div>
-        
-      </footer>
-    </div>
-    <aside class="toc-drawer no-toc">
-      
-      
-      
-    </aside>
-  </div>
-</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/scripts/furo.js"></script>
-    </body>
-</html>
\ No newline at end of file
diff --git a/docs/build/html/usage.html b/docs/build/html/usage.html
deleted file mode 100644
index eeca1e2..0000000
--- a/docs/build/html/usage.html
+++ /dev/null
@@ -1,507 +0,0 @@
-<!doctype html>
-<html class="no-js" lang="en">
-  <head><meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width,initial-scale=1"/>
-    <meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
-<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Contributing" href="contributing.html" /><link rel="prev" title="Prerequisites" href="prerequisites.html" />
-
-    <meta name="generator" content="sphinx-5.2.3, furo 2022.09.29"/>
-        <title>Usage - pyytdata 0.2.5 documentation</title>
-      <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=d81277517bee4d6b0349d71bb2661d4890b5617c" />
-    <link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
-    
-    
-
-
-<style>
-  body {
-    --color-code-background: #f8f8f8;
-  --color-code-foreground: black;
-  
-  }
-  @media not print {
-    body[data-theme="dark"] {
-      --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-    }
-    @media (prefers-color-scheme: dark) {
-      body:not([data-theme="light"]) {
-        --color-code-background: #202020;
-  --color-code-foreground: #d0d0d0;
-  
-      }
-    }
-  }
-</style></head>
-  <body>
-    
-    <script>
-      document.body.dataset.theme = localStorage.getItem("theme") || "auto";
-    </script>
-    
-
-<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
-  <symbol id="svg-toc" viewBox="0 0 24 24">
-    <title>Contents</title>
-    <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
-      <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
-    </svg>
-  </symbol>
-  <symbol id="svg-menu" viewBox="0 0 24 24">
-    <title>Menu</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
-      <line x1="3" y1="12" x2="21" y2="12"></line>
-      <line x1="3" y1="6" x2="21" y2="6"></line>
-      <line x1="3" y1="18" x2="21" y2="18"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-arrow-right" viewBox="0 0 24 24">
-    <title>Expand</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
-      <polyline points="9 18 15 12 9 6"></polyline>
-    </svg>
-  </symbol>
-  <symbol id="svg-sun" viewBox="0 0 24 24">
-    <title>Light mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
-      <circle cx="12" cy="12" r="5"></circle>
-      <line x1="12" y1="1" x2="12" y2="3"></line>
-      <line x1="12" y1="21" x2="12" y2="23"></line>
-      <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
-      <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
-      <line x1="1" y1="12" x2="3" y2="12"></line>
-      <line x1="21" y1="12" x2="23" y2="12"></line>
-      <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
-      <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
-    </svg>
-  </symbol>
-  <symbol id="svg-moon" viewBox="0 0 24 24">
-    <title>Dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none" />
-      <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
-    </svg>
-  </symbol>
-  <symbol id="svg-sun-half" viewBox="0 0 24 24">
-    <title>Auto light/dark mode</title>
-    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
-      stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
-      <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
-      <circle cx="12" cy="12" r="9" />
-      <path d="M13 12h5" />
-      <path d="M13 15h4" />
-      <path d="M13 18h1" />
-      <path d="M13 9h4" />
-      <path d="M13 6h1" />
-    </svg>
-  </symbol>
-</svg>
-
-<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
-<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
-<label class="overlay sidebar-overlay" for="__navigation">
-  <div class="visually-hidden">Hide navigation sidebar</div>
-</label>
-<label class="overlay toc-overlay" for="__toc">
-  <div class="visually-hidden">Hide table of contents sidebar</div>
-</label>
-
-
-
-<div class="page">
-  <header class="mobile-header">
-    <div class="header-left">
-      <label class="nav-overlay-icon" for="__navigation">
-        <div class="visually-hidden">Toggle site navigation sidebar</div>
-        <i class="icon"><svg><use href="#svg-menu"></use></svg></i>
-      </label>
-    </div>
-    <div class="header-center">
-      <a href="index.html"><div class="brand">pyytdata 0.2.5 documentation</div></a>
-    </div>
-    <div class="header-right">
-      <div class="theme-toggle-container theme-toggle-header">
-        <button class="theme-toggle">
-          <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-          <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-          <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-          <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-        </button>
-      </div>
-      <label class="toc-overlay-icon toc-header-icon" for="__toc">
-        <div class="visually-hidden">Toggle table of contents sidebar</div>
-        <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-      </label>
-    </div>
-  </header>
-  <aside class="sidebar-drawer">
-    <div class="sidebar-container">
-      
-      <div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
-  
-  
-  <span class="sidebar-brand-text">pyytdata 0.2.5 documentation</span>
-  
-</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
-  <input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
-  <input type="hidden" name="check_keywords" value="yes">
-  <input type="hidden" name="area" value="default">
-</form>
-<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
-  <p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
-<ul class="current">
-<li class="toctree-l1"><a class="reference internal" href="prerequisites.html">Prerequisites</a></li>
-<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Usage</a></li>
-<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
-<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
-</ul>
-
-</div>
-</div>
-
-      </div>
-      
-    </div>
-  </aside>
-  <div class="main">
-    <div class="content">
-      <div class="article-container">
-        <a href="#" class="back-to-top muted-link">
-          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
-            <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
-          </svg>
-          <span>Back to top</span>
-        </a>
-        <div class="content-icon-container">
-          
-<div class="theme-toggle-container theme-toggle-content">
-            <button class="theme-toggle">
-              <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
-              <svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
-              <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
-              <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
-            </button>
-          </div>
-          <label class="toc-overlay-icon toc-content-icon" for="__toc">
-            <div class="visually-hidden">Toggle table of contents sidebar</div>
-            <i class="icon"><svg><use href="#svg-toc"></use></svg></i>
-          </label>
-        </div>
-        <article role="main">
-          <section id="usage">
-<h1>Usage<a class="headerlink" href="#usage" title="Permalink to this heading">#</a></h1>
-<section id="installation">
-<span id="id1"></span><h2>Installation<a class="headerlink" href="#installation" title="Permalink to this heading">#</a></h2>
-<p>To use pyytdata, first install it using pip:</p>
-<div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp gp-VirtualEnv">(.venv)</span> <span class="gp">$ </span>pip install pyytdata
-</pre></div>
-</div>
-</section>
-<section id="examples">
-<h2>Examples<a class="headerlink" href="#examples" title="Permalink to this heading">#</a></h2>
-<p>Maybe the first step toward moving the package from a Toy package to a usable package.</p>
-<p>An API which will take the URL of youtube video and provide metadata of the video and the channel which has uploaded that video .</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">pyytdata</span> <span class="kn">import</span> <span class="n">vid_info</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">l</span><span class="o">=</span><span class="n">vid_info</span><span class="p">(</span><span class="s1">&#39;https://www.youtube.com/watch?v=0fqHuIqkOak&#39;</span><span class="p">)</span>
-<span class="gp">&gt;&gt;&gt; </span><span class="n">l</span><span class="o">.</span><span class="n">get_title</span><span class="p">()</span>
-<span class="go">&#39;Manoj Bajpayee Vs. Atul Khatri | Epic Middle class Face-off | The Family Man | Amazon Prime Video&#39;</span>
-<span class="go">l is a VidInfo object</span>
-</pre></div>
-</div>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span> <span class="o">&gt;&gt;&gt;</span> <span class="kn">from</span> <span class="nn">pyytdata</span> <span class="kn">import</span> <span class="n">PyYtData</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">obj</span><span class="o">=</span><span class="n">PyYtData</span><span class="p">(</span><span class="s1">&#39;flask&#39;</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="o">=</span><span class="n">obj</span><span class="o">.</span><span class="n">get_videoinfo</span><span class="p">()</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span>
- <span class="p">[</span><span class="o">&lt;</span><span class="n">util</span><span class="o">.</span><span class="n">vidinfo</span><span class="o">.</span><span class="n">VidInfo</span> <span class="nb">object</span> <span class="n">at</span> <span class="mh">0x7ff971539e10</span><span class="o">&gt;</span><span class="p">]</span>
-
-
- <span class="c1">#You can fire dir on this object to get the attribute and method of the object.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="nb">dir</span><span class="p">(</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
- <span class="p">[</span><span class="s1">&#39;_Info__API_KEY&#39;</span><span class="p">,</span> <span class="s1">&#39;__class__&#39;</span><span class="p">,</span> <span class="s1">&#39;__delattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dict__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dir__&#39;</span><span class="p">,</span> <span class="s1">&#39;__doc__&#39;</span><span class="p">,</span> <span class="s1">&#39;__eq__&#39;</span><span class="p">,</span> <span class="s1">&#39;__format__&#39;</span><span class="p">,</span> <span class="s1">&#39;__ge__&#39;</span><span class="p">,</span> <span class="s1">&#39;__getattribute__&#39;</span><span class="p">,</span> <span class="s1">&#39;__gt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__hash__&#39;</span><span class="p">,</span> <span class="s1">&#39;__init__&#39;</span><span class="p">,</span> <span class="s1">&#39;__init_subclass__&#39;</span><span class="p">,</span> <span class="s1">&#39;__le__&#39;</span><span class="p">,</span> <span class="s1">&#39;__lt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__module__&#39;</span><span class="p">,</span> <span class="s1">&#39;__ne__&#39;</span><span class="p">,</span> <span class="s1">&#39;__new__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce_ex__&#39;</span><span class="p">,</span> <span class="s1">&#39;__repr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__setattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__sizeof__&#39;</span><span class="p">,</span> <span class="s1">&#39;__str__&#39;</span><span class="p">,</span> <span class="s1">&#39;__subclasshook__&#39;</span><span class="p">,</span> <span class="s1">&#39;__weakref__&#39;</span><span class="p">,</span> <span class="s1">&#39;_id&#39;</span><span class="p">,</span> <span class="s1">&#39;channel_info&#39;</span><span class="p">,</span> <span class="s1">&#39;get_description&#39;</span><span class="p">,</span> <span class="s1">&#39;get_image_url&#39;</span><span class="p">,</span> <span class="s1">&#39;get_link&#39;</span><span class="p">,</span> <span class="s1">&#39;get_publishedtime&#39;</span><span class="p">,</span> <span class="s1">&#39;get_title&#39;</span><span class="p">,</span> <span class="s1">&#39;keyword&#39;</span><span class="p">,</span> <span class="s1">&#39;maxlen&#39;</span><span class="p">,</span> <span class="s1">&#39;open_id&#39;</span><span class="p">,</span> <span class="s1">&#39;order&#39;</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">,</span> <span class="s1">&#39;type&#39;</span><span class="p">,</span> <span class="s1">&#39;youtube&#39;</span><span class="p">]</span>
-
- <span class="c1"># To get the description of the video</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_description</span><span class="p">()</span>
- <span class="s1">&#39;Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. Learn how to use it ...&#39;</span>
-
- <span class="c1"># To get the title of the video.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_title</span><span class="p">()</span>
-<span class="s1">&#39;Learn Flask for Python - Full Tutorial&#39;</span>
-
-    <span class="c1"># To get the link for the video which can we used in web app to open the link for the video.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_link</span><span class="p">()</span>
-   <span class="s1">&#39;https://www.youtube.com/watch?v=Z1RJmh_OqeA&#39;</span>
-
-    <span class="c1"># To get the title img of the video which can be rendered through HTML tag.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_image_url</span><span class="p">()</span>
-   <span class="s1">&#39;https://i.ytimg.com/vi/Z1RJmh_OqeA/mqdefault.jpg&#39;</span>
-
-    <span class="c1"># To get the date at which the video is published</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_publisheddate</span><span class="p">()</span>
-
-    <span class="c1"># To get the chnlInfo object having methods which describes a channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">channel_info</span><span class="p">()</span>
-
-    <span class="o">&gt;&gt;&gt;</span> <span class="nb">dir</span><span class="p">(</span><span class="n">chnl</span><span class="p">)</span>
-    <span class="p">[</span><span class="s1">&#39;__class__&#39;</span><span class="p">,</span> <span class="s1">&#39;__delattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dict__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dir__&#39;</span><span class="p">,</span> <span class="s1">&#39;__doc__&#39;</span><span class="p">,</span> <span class="s1">&#39;__eq__&#39;</span><span class="p">,</span> <span class="s1">&#39;__format__&#39;</span><span class="p">,</span>          <span class="s1">&#39;__ge__&#39;</span><span class="p">,</span> <span class="s1">&#39;__getattribute__&#39;</span><span class="p">,</span> <span class="s1">&#39;__gt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__hash__&#39;</span><span class="p">,</span>  <span class="s1">&#39;__init__&#39;</span><span class="p">,</span> <span class="s1">&#39;__init_subclass__&#39;</span><span class="p">,</span> <span class="s1">&#39;__le__&#39;</span><span class="p">,</span> <span class="s1">&#39;__lt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__module__&#39;</span><span class="p">,</span> <span class="s1">&#39;__ne__&#39;</span><span class="p">,</span> <span class="s1">&#39;__new__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce_ex__&#39;</span><span class="p">,</span> <span class="s1">&#39;__repr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__setattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__sizeof__&#39;</span><span class="p">,</span> <span class="s1">&#39;__str__&#39;</span><span class="p">,</span> <span class="s1">&#39;__subclasshook__&#39;</span><span class="p">,</span> <span class="s1">&#39;__weakref__&#39;</span><span class="p">,</span> <span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">,</span> <span class="s1">&#39;total_subscriber&#39;</span><span class="p">,</span> <span class="s1">&#39;total_video&#39;</span><span class="p">,</span> <span class="s1">&#39;total_viewcnt&#39;</span><span class="p">,</span> <span class="s1">&#39;youtube&#39;</span><span class="p">]</span>
-
-    <span class="c1"># To get the total view count of the channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_viewcount</span><span class="p">()</span>
-    <span class="s1">&#39;95246354&#39;</span>
-
-    <span class="c1"># To get the number of subscribers of the channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_subscriber</span><span class="p">()</span>
-    <span class="s1">&#39;2170000&#39;</span>
-
-    <span class="c1"># To get number of video uploaded by this particular channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_video</span><span class="p">()</span>
-    <span class="s1">&#39;1133&#39;</span>
-
-    <span class="c1"># To get the obejct having stat of the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">video_stat</span><span class="p">()</span>
-
-    <span class="c1"># To get total number of like to the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_like</span><span class="p">()</span>
-    <span class="s1">&#39;7203&#39;</span>
-
-    <span class="c1"># To get total number of dislike to the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_dislike</span><span class="p">()</span>
-    <span class="s1">&#39;166&#39;</span>
-
-    <span class="c1"># To get total number of views</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_view</span><span class="p">()</span>
-    <span class="s1">&#39;436803&#39;</span>
-
-    <span class="c1"># To get total number of comment on the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_comment</span><span class="p">()</span>
-    <span class="s1">&#39;621&#39;</span>
-
-    <span class="c1"># To get the object having info about comment on the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">comment_info</span><span class="p">()</span>
-
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">comment_author</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-    <span class="s1">&#39;Fourierwave&#39;</span>
-
-    <span class="c1">#To get total number of comment on the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">total_comment</span><span class="p">()</span>
-    <span class="mi">20</span>
-
-    <span class="c1"># To get the info of channel of the author</span>
-
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">comment_author_channel_info</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-    <span class="c1"># working on it  @ToDo</span>
-
-    <span class="c1"># To get the link for the video which can we used in web app to open the link for the video.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_link</span><span class="p">()</span>
-   <span class="s1">&#39;https://www.youtube.com/watch?v=Z1RJmh_OqeA&#39;</span>
-
-    <span class="c1"># To get the title img of the video which can be rendered through HTML tag.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_image_url</span><span class="p">()</span>
-   <span class="s1">&#39;https://i.ytimg.com/vi/Z1RJmh_OqeA/mqdefault.jpg&#39;</span>
-
-    <span class="c1"># To get the date at which the video is published</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_publisheddate</span><span class="p">()</span>
-
-    <span class="c1"># To get the chnlInfo object having methods which describes a channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">channel_info</span><span class="p">()</span>
-
-    <span class="o">&gt;&gt;&gt;</span> <span class="nb">dir</span><span class="p">(</span><span class="n">chnl</span><span class="p">)</span>
-    <span class="p">[</span><span class="s1">&#39;__class__&#39;</span><span class="p">,</span> <span class="s1">&#39;__delattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dict__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dir__&#39;</span><span class="p">,</span> <span class="s1">&#39;__doc__&#39;</span><span class="p">,</span> <span class="s1">&#39;__eq__&#39;</span><span class="p">,</span> <span class="s1">&#39;__format__&#39;</span><span class="p">,</span>          <span class="s1">&#39;__ge__&#39;</span><span class="p">,</span> <span class="s1">&#39;__getattribute__&#39;</span><span class="p">,</span> <span class="s1">&#39;__gt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__hash__&#39;</span><span class="p">,</span>  <span class="s1">&#39;__init__&#39;</span><span class="p">,</span> <span class="s1">&#39;__init_subclass__&#39;</span><span class="p">,</span> <span class="s1">&#39;__le__&#39;</span><span class="p">,</span> <span class="s1">&#39;__lt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__module__&#39;</span><span class="p">,</span> <span class="s1">&#39;__ne__&#39;</span><span class="p">,</span> <span class="s1">&#39;__new__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce_ex__&#39;</span><span class="p">,</span> <span class="s1">&#39;__repr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__setattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__sizeof__&#39;</span><span class="p">,</span> <span class="s1">&#39;__str__&#39;</span><span class="p">,</span> <span class="s1">&#39;__subclasshook__&#39;</span><span class="p">,</span> <span class="s1">&#39;__weakref__&#39;</span><span class="p">,</span> <span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">,</span> <span class="s1">&#39;total_subscriber&#39;</span><span class="p">,</span> <span class="s1">&#39;total_video&#39;</span><span class="p">,</span> <span class="s1">&#39;total_viewcnt&#39;</span><span class="p">,</span> <span class="s1">&#39;youtube&#39;</span><span class="p">]</span>
-
-    <span class="c1"># To get the total view count of the channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_viewcount</span><span class="p">()</span>
-    <span class="s1">&#39;95246354&#39;</span>
-
-    <span class="c1"># To get the number of subscribers of the channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_subscriber</span><span class="p">()</span>
-    <span class="s1">&#39;2170000&#39;</span>
-
-    <span class="c1"># To get number of video uploaded by this particular channel.</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_video</span><span class="p">()</span>
-    <span class="s1">&#39;1133&#39;</span>
-
-    <span class="c1"># To get the obejct having stat of the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">video_stat</span><span class="p">()</span>
-
-    <span class="c1"># To get total number of like to the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_like</span><span class="p">()</span>
-    <span class="s1">&#39;7203&#39;</span>
-
-    <span class="c1"># To get total number of dislike to the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_dislike</span><span class="p">()</span>
-    <span class="s1">&#39;166&#39;</span>
-
-    <span class="c1"># To get total number of views</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_view</span><span class="p">()</span>
-    <span class="s1">&#39;436803&#39;</span>
-
-    <span class="c1"># To get total number of comment on the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_comment</span><span class="p">()</span>
-    <span class="s1">&#39;621&#39;</span>
-
-    <span class="c1"># To get the object having info about comment on the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">comment_info</span><span class="p">()</span>
-
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">comment_author</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-    <span class="s1">&#39;Fourierwave&#39;</span>
-
-    <span class="c1">#To get total number of comment on the video</span>
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">total_comment</span><span class="p">()</span>
-    <span class="mi">20</span>
-
-    <span class="c1"># To get the info of channel of the author</span>
-
-    <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">comment_author_channel_info</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-    <span class="c1"># working on it  @ToDo</span>
-
- <span class="c1"># To get the link for the video which can we used in web app to open the link for the video.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_link</span><span class="p">()</span>
-<span class="s1">&#39;https://www.youtube.com/watch?v=Z1RJmh_OqeA&#39;</span>
-
- <span class="c1"># To get the title img of the video which can be rendered through HTML tag.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_image_url</span><span class="p">()</span>
-<span class="s1">&#39;https://i.ytimg.com/vi/Z1RJmh_OqeA/mqdefault.jpg&#39;</span>
-
- <span class="c1"># To get the date at which the video is published</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_publisheddate</span><span class="p">()</span>
-
- <span class="c1"># To get the chnlInfo object having methods which describes a channel.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">channel_info</span><span class="p">()</span>
-
- <span class="o">&gt;&gt;&gt;</span> <span class="nb">dir</span><span class="p">(</span><span class="n">chnl</span><span class="p">)</span>
- <span class="p">[</span><span class="s1">&#39;__class__&#39;</span><span class="p">,</span> <span class="s1">&#39;__delattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dict__&#39;</span><span class="p">,</span> <span class="s1">&#39;__dir__&#39;</span><span class="p">,</span> <span class="s1">&#39;__doc__&#39;</span><span class="p">,</span> <span class="s1">&#39;__eq__&#39;</span><span class="p">,</span> <span class="s1">&#39;__format__&#39;</span><span class="p">,</span>          <span class="s1">&#39;__ge__&#39;</span><span class="p">,</span> <span class="s1">&#39;__getattribute__&#39;</span><span class="p">,</span> <span class="s1">&#39;__gt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__hash__&#39;</span><span class="p">,</span>  <span class="s1">&#39;__init__&#39;</span><span class="p">,</span> <span class="s1">&#39;__init_subclass__&#39;</span><span class="p">,</span> <span class="s1">&#39;__le__&#39;</span><span class="p">,</span> <span class="s1">&#39;__lt__&#39;</span><span class="p">,</span> <span class="s1">&#39;__module__&#39;</span><span class="p">,</span> <span class="s1">&#39;__ne__&#39;</span><span class="p">,</span> <span class="s1">&#39;__new__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce__&#39;</span><span class="p">,</span> <span class="s1">&#39;__reduce_ex__&#39;</span><span class="p">,</span> <span class="s1">&#39;__repr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__setattr__&#39;</span><span class="p">,</span> <span class="s1">&#39;__sizeof__&#39;</span><span class="p">,</span> <span class="s1">&#39;__str__&#39;</span><span class="p">,</span> <span class="s1">&#39;__subclasshook__&#39;</span><span class="p">,</span> <span class="s1">&#39;__weakref__&#39;</span><span class="p">,</span> <span class="s1">&#39;id&#39;</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">,</span> <span class="s1">&#39;total_subscriber&#39;</span><span class="p">,</span> <span class="s1">&#39;total_video&#39;</span><span class="p">,</span> <span class="s1">&#39;total_viewcnt&#39;</span><span class="p">,</span> <span class="s1">&#39;youtube&#39;</span><span class="p">]</span>
-
- <span class="c1"># To get the total view count of the channel.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_viewcnt</span><span class="p">()</span>
- <span class="s1">&#39;95246354&#39;</span>
-
- <span class="c1"># To get the number of subscribers of the channel.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_subscriber</span><span class="p">()</span>
- <span class="s1">&#39;2170000&#39;</span>
-
- <span class="c1"># To get number of video uploaded by this particular channel.</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">chnl</span><span class="o">.</span><span class="n">total_video</span><span class="p">()</span>
- <span class="s1">&#39;1133&#39;</span>
-
- <span class="c1"># To get the obejct having stat of the video</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">video_stat</span><span class="p">()</span>
-
- <span class="c1"># To get total number of like to the video</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_like</span><span class="p">()</span>
- <span class="s1">&#39;7203&#39;</span>
-
- <span class="c1"># To get total number of dislike to the video</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_dislike</span><span class="p">()</span>
- <span class="s1">&#39;166&#39;</span>
-
- <span class="c1"># To get total number of views</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_view</span><span class="p">()</span>
- <span class="s1">&#39;436803&#39;</span>
-
- <span class="c1"># To get total number of comment on the video</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">vidinf</span><span class="o">.</span><span class="n">total_comment</span><span class="p">()</span>
- <span class="s1">&#39;621&#39;</span>
-
- <span class="c1"># To get the object having info about comment on the video</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">=</span><span class="n">vid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">comment_info</span><span class="p">()</span>
-
- <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">comment_author</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
- <span class="s1">&#39;Fourierwave&#39;</span>
-
- <span class="c1">#To get total number of comment on the video</span>
- <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">total_comment</span><span class="p">()</span>
- <span class="mi">20</span>
-
- <span class="c1"># To get the info of channel of the author</span>
-
- <span class="o">&gt;&gt;&gt;</span> <span class="n">cmntinfo</span><span class="o">.</span><span class="n">comment_author_channel_info</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</pre></div>
-</div>
-</section>
-</section>
-
-        </article>
-      </div>
-      <footer>
-        
-        <div class="related-pages">
-          <a class="next-page" href="contributing.html">
-              <div class="page-info">
-                <div class="context">
-                  <span>Next</span>
-                </div>
-                <div class="title">Contributing</div>
-              </div>
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-            </a>
-          <a class="prev-page" href="prerequisites.html">
-              <svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
-              <div class="page-info">
-                <div class="context">
-                  <span>Previous</span>
-                </div>
-                
-                <div class="title">Prerequisites</div>
-                
-              </div>
-            </a>
-        </div>
-        <div class="bottom-of-page">
-          <div class="left-details">
-            <div class="copyright">
-                Copyright &#169; 2020, Prince Roshan
-            </div>
-            Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
-            
-            <a href="https://github.com/pradyunsg/furo">Furo</a>
-            
-          </div>
-          <div class="right-details">
-            <div class="icons">
-              
-            </div>
-          </div>
-        </div>
-        
-      </footer>
-    </div>
-    <aside class="toc-drawer">
-      
-      
-      <div class="toc-sticky toc-scroll">
-        <div class="toc-title-container">
-          <span class="toc-title">
-            On this page
-          </span>
-        </div>
-        <div class="toc-tree-container">
-          <div class="toc-tree">
-            <ul>
-<li><a class="reference internal" href="#">Usage</a><ul>
-<li><a class="reference internal" href="#installation">Installation</a></li>
-<li><a class="reference internal" href="#examples">Examples</a></li>
-</ul>
-</li>
-</ul>
-
-          </div>
-        </div>
-      </div>
-      
-      
-    </aside>
-  </div>
-</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
-    <script src="_static/jquery.js"></script>
-    <script src="_static/underscore.js"></script>
-    <script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
-    <script src="_static/doctools.js"></script>
-    <script src="_static/sphinx_highlight.js"></script>
-    <script src="_static/scripts/furo.js"></script>
-    </body>
-</html>
\ No newline at end of file
diff --git a/docs/make.bat b/docs/make.bat
deleted file mode 100644
index dc1312a..0000000
--- a/docs/make.bat
+++ /dev/null
@@ -1,35 +0,0 @@
-@ECHO OFF
-
-pushd %~dp0
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
-	set SPHINXBUILD=sphinx-build
-)
-set SOURCEDIR=source
-set BUILDDIR=build
-
-%SPHINXBUILD% >NUL 2>NUL
-if errorlevel 9009 (
-	echo.
-	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
-	echo.installed, then set the SPHINXBUILD environment variable to point
-	echo.to the full path of the 'sphinx-build' executable. Alternatively you
-	echo.may add the Sphinx directory to PATH.
-	echo.
-	echo.If you don't have Sphinx installed, grab it from
-	echo.https://www.sphinx-doc.org/
-	exit /b 1
-)
-
-if "%1" == "" goto help
-
-%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-goto end
-
-:help
-%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-
-:end
-popd
diff --git a/docs/source/conf.py b/docs/source/conf.py
deleted file mode 100644
index eef9ab4..0000000
--- a/docs/source/conf.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Configuration file for the Sphinx documentation builder.
-#
-# For the full list of built-in configuration values, see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-# -- Project information -----------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
-
-project = 'pyytdata'
-copyright = '2020, Prince Roshan'
-author = 'Prince Roshan'
-release = '0.2.5'
-
-# -- General configuration ---------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
-
-extensions = []
-
-templates_path = ['_templates']
-exclude_patterns = []
-
-
-
-# -- Options for HTML output -------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
-
-html_theme = 'alabaster'
-html_static_path = ['_static']
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
-    'sphinx.ext.duration',
-    'sphinx.ext.autodoc',
-]
-
-# The theme to use for HTML and HTML Help pages.  See the documentation for
-# a list of builtin themes.
-
-html_theme = 'furo'
\ No newline at end of file
diff --git a/docs/source/contributing.rst b/docs/source/contributing.rst
deleted file mode 100644
index 0068b9e..0000000
--- a/docs/source/contributing.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-Contributing
-============
-
-Installation
-------------
-
-To contribute for pyytdata, first fork the repo and then run following commands:
-
-.. code-block:: console
-
-    $ git clone https://github.com/your-github-username/pyytdata.git
-    $ cd pyytdata
-    $ python -m venv .venv
-    $ source .venv/bin/activate
-   (.venv) $ pip install -r requirements.txt
-
-Guidelines
-----------
-
-Pull requests are welcome. For major changes, please open an issue first
-to discuss what you would like to change.
diff --git a/docs/source/index.rst b/docs/source/index.rst
deleted file mode 100644
index eacb709..0000000
--- a/docs/source/index.rst
+++ /dev/null
@@ -1,28 +0,0 @@
-.. pyytdata documentation master file, created by
-   sphinx-quickstart on Thu Oct  6 19:58:17 2022.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
-Welcome to pyytdata's documentation!
-====================================
-
-**pyytdata** is a Python library which provides metadata of YouTube videos.
-
-Check out the :doc:`usage` section for further information, including how to
-:ref:`install <installation>` the project.
-
-.. note::
-
-   This project is under active developement.
-
-.. toctree::
-   :maxdepth: 2
-   :caption: Contents:
-
-   prerequisites
-
-   usage
-
-   contributing
-
-   license
\ No newline at end of file
diff --git a/docs/source/license.rst b/docs/source/license.rst
deleted file mode 100644
index 925f2a9..0000000
--- a/docs/source/license.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-License
-=======
-
-Copyright (c) 2020 prince roshan
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/docs/source/prerequisites.rst b/docs/source/prerequisites.rst
deleted file mode 100644
index f0cdd22..0000000
--- a/docs/source/prerequisites.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Prerequisites
-=============
-
-- Get the youtube data v3 api key from https://console.developers.google.com/apis/
-- Set environment variable API\_KEY='Your YoutubeDatav3 API key'
-
diff --git a/docs/source/usage.rst b/docs/source/usage.rst
deleted file mode 100644
index cf4d555..0000000
--- a/docs/source/usage.rst
+++ /dev/null
@@ -1,237 +0,0 @@
-Usage
-=====
-
-.. _installation:
-
-Installation
-------------
-
-To use pyytdata, first install it using pip:
-
-.. code-block:: console
-
-   (.venv) $ pip install pyytdata
-
-Examples
---------
-
-Maybe the first step toward moving the package from a Toy package to a usable package.
-
-An API which will take the URL of youtube video and provide metadata of the video and the channel which has uploaded that video .
-
-.. code-block:: python
-
-   >>> from pyytdata import vid_info
-   >>> l=vid_info('https://www.youtube.com/watch?v=0fqHuIqkOak')
-   >>> l.get_title()
-   'Manoj Bajpayee Vs. Atul Khatri | Epic Middle class Face-off | The Family Man | Amazon Prime Video'
-   l is a VidInfo object
-.. code-block:: python
-
-
-    >>> from pyytdata import PyYtData
-    >>> obj=PyYtData('flask',1)
-    >>> vid=obj.get_videoinfo()
-    >>> vid
-    <generator object PyYtData.get_videoinfo at 0x7fb0f69f8040>
-    #Since get_videoinfo returns a generator, you can either iterate or get the next() item.
-
-    #You can fire dir on this object to get the attribute and method of the object.
-    >>> dir(next(vid))
-    ['_Info__API_KEY', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_id', 'channel_info', 'get_description', 'get_image_url', 'get_link', 'get_publishedtime', 'get_title', 'keyword', 'maxlen', 'open_id', 'order', 'result', 'type', 'youtube']
-
-    # To get the description of the video
-    >>> next(vid).get_description()
-    'Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools or libraries. Learn how to use it ...'
-
-    # To get the title of the video.
-    >>> next(vid).get_title()
-   'Learn Flask for Python - Full Tutorial'
-
-       # To get the link for the video which can we used in web app to open the link for the video.
-       >>> next(vid).get_link()
-      'https://www.youtube.com/watch?v=Z1RJmh_OqeA'
-
-       # To get the title img of the video which can be rendered through HTML tag.
-       >>> next(vid).get_image_url()
-      'https://i.ytimg.com/vi/Z1RJmh_OqeA/mqdefault.jpg'
-
-       # To get the date at which the video is published
-       >>> next(vid).get_publisheddate()
-
-       # To get the chnlInfo object having methods which describes a channel.
-       >>> chnl=next(vid).channel_info()
-
-       >>> dir(chnl)
-       ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',          '__ge__', '__getattribute__', '__gt__', '__hash__',  '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'id', 'result', 'total_subscriber', 'total_video', 'total_viewcnt', 'youtube']
-
-       # To get the total view count of the channel.
-       >>> chnl.total_viewcount()
-       '95246354'
-
-       # To get the number of subscribers of the channel.
-       >>> chnl.total_subscriber()
-       '2170000'
-
-       # To get number of video uploaded by this particular channel.
-       >>> chnl.total_video()
-       '1133'
-
-       # To get the obejct having stat of the video
-       >>> vidinf=next(vid).video_stat()
-
-       # To get total number of like to the video
-       >>> vidinf.total_like()
-       '7203'
-
-       # To get total number of dislike to the video
-       >>> vidinf.total_dislike()
-       '166'
-
-       # To get total number of views
-       >>> vidinf.total_view()
-       '436803'
-
-       # To get total number of comment on the video
-       >>> vidinf.total_comment()
-       '621'
-
-       # To get the object having info about comment on the video
-       >>> cmntinfo=next(vid).comment_info()
-
-       >>> cmntinfo.comment_author(2)
-       'Fourierwave'
-
-       #To get total number of comment on the video
-       >>> cmntinfo.total_comment()
-       20
-
-       # To get the info of channel of the author
-
-       >>> cmntinfo.comment_author_channel_info(2)
-       # working on it  @ToDo
-
-       # To get the link for the video which can we used in web app to open the link for the video.
-       >>> next(vid).get_link()
-      'https://www.youtube.com/watch?v=Z1RJmh_OqeA'
-
-       # To get the title img of the video which can be rendered through HTML tag.
-       >>> next(vid).get_image_url()
-      'https://i.ytimg.com/vi/Z1RJmh_OqeA/mqdefault.jpg'
-
-       # To get the date at which the video is published
-       >>> next(vid).get_publisheddate()
-
-       # To get the chnlInfo object having methods which describes a channel.
-       >>> chnl=next(vid).channel_info()
-
-       >>> dir(chnl)
-       ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',          '__ge__', '__getattribute__', '__gt__', '__hash__',  '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'id', 'result', 'total_subscriber', 'total_video', 'total_viewcnt', 'youtube']
-
-       # To get the total view count of the channel.
-       >>> chnl.total_viewcount()
-       '95246354'
-
-       # To get the number of subscribers of the channel.
-       >>> chnl.total_subscriber()
-       '2170000'
-
-       # To get number of video uploaded by this particular channel.
-       >>> chnl.total_video()
-       '1133'
-
-       # To get the obejct having stat of the video
-       >>> vidinf=next(vid).video_stat()
-
-       # To get total number of like to the video
-       >>> vidinf.total_like()
-       '7203'
-
-       # To get total number of dislike to the video
-       >>> vidinf.total_dislike()
-       '166'
-
-       # To get total number of views
-       >>> vidinf.total_view()
-       '436803'
-
-       # To get total number of comment on the video
-       >>> vidinf.total_comment()
-       '621'
-
-       # To get the object having info about comment on the video
-       >>> cmntinfo=next(vid).comment_info()
-
-       >>> cmntinfo.comment_author(2)
-       'Fourierwave'
-
-       #To get total number of comment on the video
-       >>> cmntinfo.total_comment()
-       20
-
-       # To get the info of channel of the author
-
-       >>> cmntinfo.comment_author_channel_info(2)
-       # working on it  @ToDo
-
-    # To get the link for the video which can we used in web app to open the link for the video.
-    >>> next(vid).get_link()
-   'https://www.youtube.com/watch?v=Z1RJmh_OqeA'
-
-    # To get the title img of the video which can be rendered through HTML tag.
-    >>> next(vid).get_image_url()
-   'https://i.ytimg.com/vi/Z1RJmh_OqeA/mqdefault.jpg'
-
-    # To get the date at which the video is published
-    >>> next(vid).get_publisheddate()
-
-    # To get the chnlInfo object having methods which describes a channel.
-    >>> chnl=next(vid).channel_info()
-
-    >>> dir(chnl)
-    ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',          '__ge__', '__getattribute__', '__gt__', '__hash__',  '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'id', 'result', 'total_subscriber', 'total_video', 'total_viewcnt', 'youtube']
-
-    # To get the total view count of the channel.
-    >>> chnl.total_viewcnt()
-    '95246354'
-
-    # To get the number of subscribers of the channel.
-    >>> chnl.total_subscriber()
-    '2170000'
-
-    # To get number of video uploaded by this particular channel.
-    >>> chnl.total_video()
-    '1133'
-
-    # To get the obejct having stat of the video
-    >>> vidinf=next(vid).video_stat()
-
-    # To get total number of like to the video
-    >>> vidinf.total_like()
-    '7203'
-
-    # To get total number of dislike to the video
-    >>> vidinf.total_dislike()
-    '166'
-
-    # To get total number of views
-    >>> vidinf.total_view()
-    '436803'
-
-    # To get total number of comment on the video
-    >>> vidinf.total_comment()
-    '621'
-
-    # To get the object having info about comment on the video
-    >>> cmntinfo=next(vid).comment_info()
-
-    >>> cmntinfo.comment_author(2)
-    'Fourierwave'
-
-    #To get total number of comment on the video
-    >>> cmntinfo.total_comment()
-    20
-
-    # To get the info of channel of the author
-
-    >>> cmntinfo.comment_author_channel_info(2)
diff --git a/images/info.png b/images/info.png
deleted file mode 100644
index d2f19fe..0000000
Binary files a/images/info.png and /dev/null differ
diff --git a/images/info_old.png b/images/info_old.png
deleted file mode 100644
index b43ca52..0000000
Binary files a/images/info_old.png and /dev/null differ
diff --git a/pyytdata/__init__.py b/pyytdata/__init__.py
index 64487cd..154e69a 100644
--- a/pyytdata/__init__.py
+++ b/pyytdata/__init__.py
@@ -1,8 +1,78 @@
+from enum import Enum
+
 from .pyytdata import PyYtData
-from .util import VidInfo
+from .util import (
+    ChannelDataFetcher, ChannelInfo, ChannelStatInfo, VideoDataFetcher,
+    VideoInfo, VideoStatInfo, YtChannelInfo, YtChannelStat, YtVideoInfo,
+    YtVideoStat
+)
+
+
+class VIDEO_CATEGORY(Enum):
+    FILM_AND_ANIMATION = 1
+    CARS_AND_VEHICLES = 2
+    MUSIC = 10
+    PETS_AND_ANIMALS = 15
+    SPORTS = 17
+    SHORT_AND_MOVIES = 18
+    TRAVEL_AND_EVENTS = 19
+    GAMING = 20
+    VIDEOBLOGGING = 21
+    PEOPLE_AND_BLOGS = 22
+    ENTERTAINMENT = 24
+    NEWS_AND_POLITICS = 25
+    HOW_TO_STTYLE = 26
+    EDUCATION = 27
+    SCIENCE_AND_TECHNOLOGY = 28
+    NONPROFITS_AND_ACTIVISM = 29
+    MOVIES = 30
+    ANIME_AND_ANIMATION = 31
+    ACTION_AND_ADVENTURE = 32
+    CLASSICS = 33
+    COMEDY = 34
+    DOCUMENTARY = 35
+    DRAMA = 36
+    FAMILY = 37
+    FOREIGN = 38
+    HORROR = 39
+    SCIFI_AND_FANTASY = 40
+    THRILLER = 41
+    SHORTS = 42
+    SHOWS = 43
+    TRAILERS = 44
 
 
-def vid_info(url: str) -> VidInfo:
-    """Takes URL of the video and return the VidInfo object"""
+def get_vid_info_from_url(url: str) -> YtVideoInfo:
+    """Return Video Info of given Video URL"""
     video_id = url.split("=")
-    return VidInfo(video_id=video_id[-1])
+    video_fetcher = VideoDataFetcher()
+    vid_info = VideoInfo(video_fetcher, "snippet", video_id=video_id[-1])
+    return vid_info.get_info(0)
+
+
+def get_video_info(video_id: str) -> YtVideoInfo:
+    """Return Video Info of video_id"""
+    video_fetcher = VideoDataFetcher()
+    vid_info = VideoInfo(video_fetcher, "snippet", video_id=video_id)
+    return vid_info.get_info(0)
+
+
+def get_channel_info(channel_name: str) -> YtChannelInfo:
+    """Return Channel Info of channel_name"""
+    channel_fetcher = ChannelDataFetcher()
+    chnlinfo = ChannelInfo(channel_fetcher, "snippet", channel_name=channel_name)
+    return chnlinfo.get_info()
+
+
+def get_channel_stat_by_name(channel_name) -> YtChannelStat:
+    """Return Channel Stat of channel_name"""
+    channel_fetcher = ChannelDataFetcher()
+    chnlinfo = ChannelStatInfo(channel_fetcher, "statistics", channel_name=channel_name)
+    return chnlinfo.get_info()
+
+
+def get_video_stat_by_ID(video_id: str) -> YtVideoStat:
+    """Return Video Stat of channel_name"""
+    video_fetcher = VideoDataFetcher()
+    vid_stat = VideoStatInfo(video_fetcher, "statistics", video_id)
+    return vid_stat.get_info()
diff --git a/pyytdata/pyytdata.py b/pyytdata/pyytdata.py
index 451e8b3..f2a1dcc 100644
--- a/pyytdata/pyytdata.py
+++ b/pyytdata/pyytdata.py
@@ -1,7 +1,8 @@
 """Contains a class PyYtData having implementation of youtube data v3 client"""
 from typing import List
 
-from .util import VidInfo
+from .util.fetcher import VideoDataFetcher
+from .util.info import VideoInfo
 
 
 class PyYtData:
@@ -16,6 +17,8 @@ def __init__(self, keyword: str, maxlen: int, type: str = "video") -> None:
         self.type = type
 
     def get_videoinfo(self) -> List:
-        """Returns a list with has objects of VidInfo class"""
-        for i in range(self.maxlen):
-            yield VidInfo(self.type, self.keyword, self.maxlen, i)
+        """Returns generator object of VideoInfo"""
+        v = VideoDataFetcher()
+        vid_info = VideoInfo(v, "snippet", keyword=self.keyword, maxlen=self.maxlen)
+        for indx in range(self.maxlen):
+            yield vid_info.get_info(indx)
diff --git a/pyytdata/util/__init__.py b/pyytdata/util/__init__.py
index 65e89b1..bc94024 100644
--- a/pyytdata/util/__init__.py
+++ b/pyytdata/util/__init__.py
@@ -1,3 +1,3 @@
-from .channelinfo import ChannelInfo
-from .info import Info
-from .vidinfo import VidInfo
+from .fetcher import ChannelDataFetcher, VideoDataFetcher
+from .info import ChannelInfo, ChannelStatInfo, VideoInfo, VideoStatInfo
+from .ytdata import YtChannelInfo, YtChannelStat, YtVideoInfo, YtVideoStat
diff --git a/pyytdata/util/channelinfo.py b/pyytdata/util/channelinfo.py
deleted file mode 100644
index 3d1ae70..0000000
--- a/pyytdata/util/channelinfo.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import os
-
-from apiclient.discovery import build
-
-
-class ChannelInfo:
-    """
-    Params:
-        id: id of the channel
-    """
-
-    def __init__(self, channel_id: int):
-        self.channel_id = channel_id
-        self.__API_KEY = os.environ.get(
-            "API_KEY"
-        )  # link to get the api key is in readme file
-        if not self.__API_KEY:
-            print(self.__API_KEY)
-            raise TypeError("You must have API_KEY set as an environment variable")
-        youtube = build("youtube", "v3", developerKey=self.__API_KEY)
-        self.youtube = youtube
-        req = self.youtube.channels().list(part="statistics", id=self.channel_id)
-        self.result = req.execute()
-
-    def total_viewcount(self) -> int:
-        """Return total views for the channel"""
-        return self.result["items"][0]["statistics"]["viewCount"]
-
-    def total_subscriber(self) -> int:
-        """Return number of subscribers of the channel"""
-        return self.result["items"][0]["statistics"]["subscriberCount"]
-
-    def total_video(self) -> int:
-        """Returns total number of the video uploaded by the channel"""
-        return self.result["items"][0]["statistics"]["videoCount"]
diff --git a/pyytdata/util/fetcher.py b/pyytdata/util/fetcher.py
new file mode 100644
index 0000000..103b327
--- /dev/null
+++ b/pyytdata/util/fetcher.py
@@ -0,0 +1,66 @@
+import os
+from abc import ABC, abstractmethod
+
+from dotenv import load_dotenv
+from googleapiclient.discovery import build
+
+load_dotenv()
+
+
+class DataFetcher(ABC):
+    @abstractmethod
+    def get_result(self):
+        pass
+
+
+class ChannelDataFetcher(DataFetcher):
+    def __init__(self):
+        __API_KEY = os.environ.get(
+            "API_KEY"
+        )  # link to get the api key is in readme file
+        if not __API_KEY:
+            raise TypeError("You must have API_KEY set as an environment variable")
+        self.youtube = build("youtube", "v3", developerKey=__API_KEY)
+
+    def get_result(self, part, channel_id, channel_name):
+        if channel_id:
+            req = self.youtube.channels().list(part=part, id=channel_id)
+        else:
+            req = self.youtube.channels().list(part=part, forUsername=channel_name)
+        return req.execute()
+
+
+class VideoDataFetcher(DataFetcher):
+    qtype = None
+
+    def __init__(self):
+        __API_KEY = os.environ.get(
+            "API_KEY"
+        )  # link to get the api key is in readme file
+        if not __API_KEY:
+            raise TypeError("You must have API_KEY set as an environment variable")
+        self.youtube = build("youtube", "v3", developerKey=__API_KEY)
+
+    def get_result(
+        self,
+        part,
+        maxlen,
+        keyword=None,
+        video_id=None,
+        video_category_id=27,
+        order="relevance",
+    ):
+        if video_id:
+            req = self.youtube.videos().list(part=part, id=video_id)
+            self.qtype = "list"
+        else:
+            req = self.youtube.search().list(
+                q=keyword,
+                part=part,
+                maxResults=maxlen,
+                type="video",
+                order=order,
+                videoCategoryId=video_category_id,
+            )
+            self.qtype = "search"
+        return req.execute()
diff --git a/pyytdata/util/info.py b/pyytdata/util/info.py
index a62865b..a94b7d5 100644
--- a/pyytdata/util/info.py
+++ b/pyytdata/util/info.py
@@ -1,24 +1,109 @@
-import os
+from abc import ABC, abstractmethod
 
-from apiclient.discovery import build
+from dateutil import parser
 
+from pyytdata.util.ytdata import (
+    YtChannelInfo, YtChannelStat, YtVideoInfo, YtVideoStat
+)
 
 
-class Info:
-    """
-    Class which acts as a client to the youtube data v3 API,
-    having attributes as the query parameter for API.
-    """
+class Info(ABC):
+    @abstractmethod
+    def get_data(self):
+        pass
 
-    def __init__(self, order: str = "relevance", type: str = "video"):
+    @abstractmethod
+    def get_info(self):
+        pass
 
-        self.__API_KEY = os.environ.get(
 
-            "API_KEY"
-        )  # link to get the api key is in readme file
-        if not self.__API_KEY:
-            raise TypeError("You must have API_KEY set as an environment variable")
-        youtube = build("youtube", "v3", developerKey=self.__API_KEY)
-        self.youtube = youtube
+class VideoInfo(Info):
+    def __init__(self, data_v3_api_obj, part, video_id=None, keyword=None, maxlen=5):
+        self.data_v3_api_obj = data_v3_api_obj
+        self.result = data_v3_api_obj.get_result(
+            part, maxlen, video_id=video_id, keyword=keyword
+        )
 
+    def get_data(self, indx):
+        video_data = self.result["items"][indx]["snippet"]
+        self.title = video_data["title"]
+        self.get_description = video_data["description"]
+        self.image_url = video_data["thumbnails"]["medium"]["url"]
+        vid_id = (
+            self.result["items"][indx]["id"]
+            if self.data_v3_api_obj.qtype == "list"
+            else self.result["items"][indx]["id"]["videoId"]
+        )
+        self.link = "https://www.youtube.com/watch?v=" + vid_id
+        self.publisheddate = video_data["publishedAt"]
+        # self.publisheddate = parser.isoparse(video_data["publishedAt"]).date()
+        self.channel_title = video_data["channelTitle"]
 
+    def get_info(self, idx):
+        self.get_data(idx)
+        return YtVideoInfo(
+            title=self.title,
+            description=self.get_description,
+            image_url=self.image_url,
+            link=self.link,
+            publisheddate=self.publisheddate,
+            channel_title=self.channel_title,
+        )
+
+
+class ChannelInfo(Info):
+    def __init__(
+        self, data_v3_api_obj, part, channel_id: int = None, channel_name: str = None
+    ):
+        self.result = data_v3_api_obj.get_result(part, channel_id, channel_name)
+
+
+    def get_data(self):
+        self.title = self.result["items"][0]["snippet"]["title"]
+        self.description = self.result["items"][0]["snippet"]["description"]
+
+    def get_info(self):
+        self.get_data()
+        return YtChannelInfo(title=self.title, description=self.description)
+
+
+class VideoStatInfo(Info):
+    def __init__(self, data_v3_api_obj, part, video_id, maxlen=5):
+        self.response = data_v3_api_obj.get_result(part, maxlen, video_id=video_id)
+
+    def get_data(self):
+        stat_data = self.response["items"][0]["statistics"]
+        self.total_view = stat_data["viewCount"]
+        self.total_like = stat_data["likeCount"]
+        self.total_fav = stat_data["favoriteCount"]
+        self.total_comment = stat_data["commentCount"]
+
+    def get_info(self):
+        self.get_data()
+        return YtVideoStat(
+            total_view=self.total_view,
+            total_like=self.total_like,
+            fav_count=self.total_fav,
+            total_comment=self.total_comment,
+        )
+
+
+class ChannelStatInfo(Info):
+    def __init__(
+        self, data_v3_api_obj, part, channel_id: int = None, channel_name: str = None
+    ):
+        self.result = data_v3_api_obj.get_result(part, channel_id, channel_name)
+
+    def get_data(self):
+        chnl_stat = self.result["items"][0]["statistics"]
+        self.total_viewcount = chnl_stat["viewCount"]
+        self.total_subscriber = chnl_stat["subscriberCount"]
+        self.total_video = chnl_stat["videoCount"]
+
+    def get_info(self):
+        self.get_data()
+        return YtChannelStat(
+            total_viewcount=self.total_viewcount,
+            total_subscriber=self.total_subscriber,
+            total_video=self.total_video,
+        )
diff --git a/pyytdata/util/querier.py b/pyytdata/util/querier.py
deleted file mode 100644
index e8a96e6..0000000
--- a/pyytdata/util/querier.py
+++ /dev/null
@@ -1,66 +0,0 @@
-import os
-
-from apiclient.discovery import build
-
-from .info import Info
-
-
-class VideoQuerier(Info):
-
-    def __init__(
-            self,
-            keyword: str,
-            maxLen: int,
-            order: str = "relevance",
-            video_type: str = "video",
-            video_category_id: int = 27,
-            video_id: str = None,
-    ):
-        super().__init__(order="relevance", type="video")
-        self.keyword = keyword
-        self.maxLen = maxLen
-        self.order = order
-        self.type = video_type
-        self.video_id = video_id
-        self.video_category_id = video_category_id
-        self.result = self.fetch()
-
-    def fetch(self):
-        req = self.query_youtube()
-        return req.execute()
-
-    def get_result(self):
-        return self.result
-
-    def query_youtube(self):
-        if self.keyword:
-            req = self.youtube.search().list(
-                q=self.keyword,
-                part="snippet",
-                maxResults=self.maxLen,
-                type=self.type,
-                order=self.order,
-                videoCategoryId=self.video_category_id,
-            )
-        else:
-            req = self.youtube.videos().list(part="snippet", id=self.video_id)
-        return req
-
-
-class VideoCommentQuerier:
-    def __init__(self, idVideoComment):
-        try:
-            self.__API_KEY = os.environ.get(
-                "API_KEY"
-            )  # link to get the api key is in readme file
-        except Exception:
-            raise TypeError("You must have API_KEY set as an environment variable")
-        youtube = build("youtube", "v3", developerKey=self.__API_KEY)
-        self.youtube = youtube
-        self.__id = idVideoComment
-
-        request = youtube.commentThreads().list(part="snippet", videoId=self.__id)
-        self.result = request.execute()
-
-    def get_result(self):
-        return self.result
diff --git a/pyytdata/util/vidinfo.py b/pyytdata/util/vidinfo.py
deleted file mode 100644
index 7ccfb7d..0000000
--- a/pyytdata/util/vidinfo.py
+++ /dev/null
@@ -1,177 +0,0 @@
-import os
-
-from apiclient.discovery import build
-from dateutil import parser
-
-from .info import Info
-from .channelinfo import ChannelInfo
-from .querier import VideoCommentQuerier, VideoQuerier
-
-VIDEO_CATEGORY = {
-    "1": "Film & Animation",
-    "2": "Cars & Vehicles",
-    "10": "Music",
-    "15": "Pets & Animals",
-    "17": "Sports",
-    "18": "Short Movies",
-    "19": "Travel & Events",
-    "20": "Gaming",
-    "21": "Videoblogging",
-    "22": "People & Blogs",
-    "23": "Comedy",
-    "24": "Entertainment",
-    "25": "News & Politics",
-    "26": "Howto & Style",
-    "27": "Education",
-    "28": "Science & Technology",
-    "29": "Nonprofits & Activism",
-    "30": "Movies",
-    "31": "Anime / Animation",
-    "32": "Action / Adventure",
-    "33": "Classics",
-    "34": "Comedy",
-    "35": "Documentary",
-    "36": "Drama",
-    "37": "Family",
-    "38": "Foreign",
-    "39": "Horror",
-    "40'": "Sci - Fi / Fantasy",
-    "41": "Thriller",
-    "42": "Shorts",
-    "43": "Shows",
-    "44": "Trailers",
-}
-
-
-class VidInfo:
-    def __query_youtube(self, name):
-        if hasattr(self, name):
-            return self.result
-        obj = VideoQuerier(self.keyword, self.maxlen, self.order, self.type, video_id= self.id)
-        return obj.get_result()
-
-    def __init__(
-        self,
-        type: str = None,
-        keyword: str = None,
-        maxlen: int = 3,
-        indx: int = 0,
-        video_id: str = None,
-        order: str = "relevance",
-    ):
-        self._index = indx
-        self.keyword = keyword
-        self.maxlen = maxlen
-        self.order = order
-        self.type = type
-        self.id = video_id
-        self.result = self.__query_youtube("result")
-
-    def get_title(self) -> str:
-        """Returns title of the video"""
-        return self.result["items"][self._index]["snippet"]["title"]
-
-    def get_description(self) -> str:
-        """Returns description of the video"""
-        return self.result["items"][self._index]["snippet"]["description"]
-
-    def get_image_url(self) -> str:
-        """Returns url of the image"""
-        return self.result["items"][self._index]["snippet"]["thumbnails"]["medium"][
-            "url"
-        ]
-
-    def get_link(self) -> str:
-        """Returns url of the video you can open using webbrower python module"""
-        return (
-            "https://www.youtube.com/watch?v="
-            + self.result["items"][self._index]["id"]["videoId"]
-        )
-
-    def get_publisheddate(self):
-        """Returns the date on which the video is published"""
-        upload_date = parser.isoparse(
-            self.result["items"][self._index]["snippet"]["publishTime"]
-        )
-        return upload_date.date()
-
-    def get_channel_title(self) -> str:
-        """Return the channel title"""
-        return self.result["items"][self._index]["snippet"]["channelTitle"]
-
-    def channel_stat(self):
-        """Return channel object which has function to get stat of the channel"""
-        channelStatId = self.result["items"][self._index]["snippet"]["channelId"]
-        return ChannelInfo(channelStatId)
-
-    def video_stat(self):
-        statId = self.result["items"][self._index]["id"]["videoId"]
-        return VidStat(statId)
-
-    def comment_info(self):
-        commentId = self.result["items"][self._index]["id"]["videoId"]
-        return VidCmnt(commentId)
-
-
-class VidStat:
-    def __init__(self, id: int):
-        try:
-            self.__API_KEY = os.environ.get(
-                "API_KEY"
-            )  # link to get the api key is in readme file
-        except Exception:
-            raise TypeError("You must have API_KEY set as an environment variable")
-        youtube = build("youtube", "v3", developerKey=self.__API_KEY)
-        self.youtube = youtube
-        self._id = id
-        request = self.youtube.videos().list(part="statistics", id=self._id)
-        self.response = request.execute()
-
-    def total_view(self) -> int:
-        """Return number of views on the video"""
-        return self.response["items"][0]["statistics"]["viewCount"]
-
-    def total_like(self) -> int:
-        """Return number of liks on the video"""
-        return self.response["items"][0]["statistics"]["likeCount"]
-
-    def total_dislike(self) -> int:
-        """Return number of dislike on the video"""
-        return self.response["items"][0]["statistics"]["dislikeCount"]
-
-    def total_comment(self) -> int:
-        """Return number of comments on the video"""
-        return self.response["items"][0]["statistics"]["commentCount"]
-
-
-class VidCmnt:
-    def __query_youtube(self, name):
-        if hasattr(self, name):
-            return self.result
-        obj = VideoCommentQuerier(self.id)
-        return obj.get_result()
-
-    def __init__(self, id: int):
-        self.id = id
-        self.result = self.__query_youtube("result")
-
-    def total_comment(self) -> int:
-        """Return total number of comments"""
-        return self.result["pageInfo"]["totalResults"]
-
-    def comment(self, vid_no: int) -> str:
-        """Return the comment of that video number"""
-        return self.result["items"][vid_no]["snippet"]["topLevelComment"]["snippet"][
-            "textOriginal"
-        ]
-
-    def comment_author(self, vid_no: int) -> str:
-        return self.result["items"][vid_no]["snippet"]["topLevelComment"]["snippet"][
-            "authorDisplayName"
-        ]
-
-    def comment_author_channel_info(self, vid_no):
-        # return self.result["items"][vid_no]["snippet"]["topLevelComment"]["snippet"][
-        #     "authorChannelId"
-        # ]["value"]
-        pass
diff --git a/pyytdata/util/ytdata.py b/pyytdata/util/ytdata.py
new file mode 100644
index 0000000..8c4e5db
--- /dev/null
+++ b/pyytdata/util/ytdata.py
@@ -0,0 +1,33 @@
+from dataclasses import dataclass
+from datetime import datetime
+
+
+@dataclass(frozen=True)
+class YtChannelStat:
+    total_viewcount: int
+    total_subscriber: int
+    total_video: int
+
+
+@dataclass(frozen=True)
+class YtVideoStat:
+    total_view: int
+    total_like: int
+    fav_count: int
+    total_comment: int
+
+
+@dataclass(frozen=True)
+class YtChannelInfo:
+    title: str
+    description: str
+
+
+@dataclass(frozen=True)
+class YtVideoInfo:
+    title: str
+    description: str
+    image_url: str
+    link: str
+    publisheddate: datetime
+    channel_title: str
diff --git a/requirements.txt b/requirements.txt
index 4e967f3..afec66b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -18,3 +18,4 @@ six
 uritemplate
 urllib3
 python-dateutil 
+python-dotenv
\ No newline at end of file
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 9db02dd..0000000
--- a/setup.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-[metadata]
-version = 0.2.5
diff --git a/setup.py b/setup.py
index 3049536..502a30b 100644
--- a/setup.py
+++ b/setup.py
@@ -9,6 +9,7 @@ def read(fname):
 
 setup(
     name="pyytdata",
+    version="0.3.0",
     author="Prince Roshan",
     author_email="princekrroshan01@gmail.com",
     url="https://github.com/princekrroshan01/youtube-api-wrapper",
diff --git a/tox.ini b/tox.ini
index 3fa6046..da74399 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,13 +1,30 @@
-[tox]
-envlist = black, flake8, coverage, py36, py37, py38, py39, pypy3
+# Flake8 and ISort configuration
 
-[testenv]
-deps =
-    -r requirements.txt
-commands =
-    python -m unittest discover -s tests -t tests
+[flake8]
+max-line-length=119
+# Don't lint the venv or the CPython cache.
+exclude=.venv,__pycache__
+# Ignore some of the most obnoxious linting errors.
+ignore=
+    W503,E226,
+    # Missing Docstrings
+    D100,D104,D105,D106,D107,
+    # Docstring Whitespace
+    D203,D212,D214,D215,
+    # Docstring Quotes
+    D301,D302,
+    # Docstring Content
+    D400,D401,D402,D404,D405,D406,D407,D408,D409,D410,D411,D412,D413,D414,D416,D417,
+    # Comments
+    E266
 
-
-[testenv:flake8]
-deps = flake8
-commands = flake8 --ignore=E501,W503,F401 pyytdata/ setup.py
\ No newline at end of file
+[isort]
+# Select the 5th style (Hanging grid grouped) to handle longer import.
+# This choice is mostly arbitrary and can be changed at your will.
+#
+# Example of this style:
+# from third_party import (
+#     lib1, lib2, lib3, lib4,
+#     lib5, ...
+# )
+multi_line_output=5


Test patch:
diff --git a/tests/.env b/tests/.env
new file mode 100644
index 0000000..c6fb5d6
--- /dev/null
+++ b/tests/.env
@@ -0,0 +1,1 @@
+API_KEY='randomstr'
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/test_mock_data.py b/tests/test_mock_data.py
new file mode 100644
index 0000000..735fec6
--- /dev/null
+++ b/tests/test_mock_data.py
@@ -0,0 +1,380 @@
+video_list_snippet_result = {
+    "kind": "youtube#videoListResponse",
+    "etag": "6gaR6OmJlEW2C5t_SvqS80bY3v8",
+    "items": [
+        {
+            "kind": "youtube#video",
+            "etag": "Y83ie0NFtF3oo8_FCi9D7uabi9k",
+            "id": "zmWf_cHyo8s",
+            "snippet": {
+                "publishedAt": "2021-07-30T15:00:27Z",
+                "channelId": "UCVhQ2NnY5Rskt6UjCUkJ_DA",
+                "title": "More Python Code Smells: Avoid These 7 Smelly Snags",
+                "description": "💡 Here's my FREE 7-step guide to help you consistently design great software: https://arjancodes.com/designguide.\n\nThese are 7 code smells to avoid + a bonus smell. I describe each smell using a Python example and then show you how to fix it. At the end of the video, I have a few general tips to help you avoid introducing code smells in the first place in your design.\n\nFor the first Python code smells video, see: https://youtu.be/LrtnLEkOwFE.\n\nThe code I worked on in this episode is available here: https://github.com/ArjanCodes/2021-more-code-smells.\n\n🛒 GEAR & RECOMMENDED BOOKS: https://kit.co/arjancodes.\n\n🎓 Sign up to Brilliant now and get 20% off the annual subscription: https://brilliant.sjv.io/arjancodes.\n\n💬 Join my Discord server here: https://discord.arjan.codes\n\n🐦Twitter: https://twitter.com/arjancodes\n🌍LinkedIn: https://www.linkedin.com/company/arjancodes\n🕵Facebook: https://www.facebook.com/arjancodes\n\n👀 Channel code reviewer board:\n- Yoriz\n- Ryan Laursen\n- Sybren A. Stüvel\n\n🔖 Chapters:\n0:00 Intro\n0:31 Explaining the example\n2:45 What is a code smell?\n3:04 #1 Too many parameters\n5:03 #2 Too deep nesting\n10:01 #3 Not using the right data structure\n12:19 #4 Nested conditional expressions\n13:39 #5 Using wildcard imports\n15:33 #6 Asymmetrical code\n16:58 #7 Using self when it's not needed\n18:31 #8 (BONUS): Not using a main() function\n19:02 Tips for avoiding code smells\n\n#arjancodes #softwaredesign #python\n\nDISCLAIMER - The links in this description might be affiliate links. If you purchase a product or service through one of those links, I may receive a small commission. There is no additional charge to you. Thanks for supporting my channel so I can continue to provide you with free content each week!",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/zmWf_cHyo8s/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/zmWf_cHyo8s/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/zmWf_cHyo8s/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                    "standard": {
+                        "url": "https://i.ytimg.com/vi/zmWf_cHyo8s/sddefault.jpg",
+                        "width": 640,
+                        "height": 480,
+                    },
+                    "maxres": {
+                        "url": "https://i.ytimg.com/vi/zmWf_cHyo8s/maxresdefault.jpg",
+                        "width": 1280,
+                        "height": 720,
+                    },
+                },
+                "channelTitle": "ArjanCodes",
+                "tags": [
+                    "code smells",
+                    "python code smells",
+                    "clean code",
+                    "code smell",
+                    "python refactoring",
+                    "clean code principles",
+                    "software development",
+                    "code refactoring",
+                    "code refactoring best practices python",
+                    "code smell python",
+                    "software development course",
+                    "vscode python refactoring",
+                    "code refactoring vscode",
+                    "software development tutorial",
+                    "python refactoring tips",
+                    "python refactoring exercises",
+                    "code smell middle man",
+                    "Code smells feature envy",
+                ],
+                "categoryId": "27",
+                "liveBroadcastContent": "none",
+                "defaultLanguage": "en-US",
+                "localized": {
+                    "title": "More Python Code Smells: Avoid These 7 Smelly Snags",
+                    "description": "💡 Here's my FREE 7-step guide to help you consistently design great software: https://arjancodes.com/designguide.\n\nThese are 7 code smells to avoid + a bonus smell. I describe each smell using a Python example and then show you how to fix it. At the end of the video, I have a few general tips to help you avoid introducing code smells in the first place in your design.\n\nFor the first Python code smells video, see: https://youtu.be/LrtnLEkOwFE.\n\nThe code I worked on in this episode is available here: https://github.com/ArjanCodes/2021-more-code-smells.\n\n🛒 GEAR & RECOMMENDED BOOKS: https://kit.co/arjancodes.\n\n🎓 Sign up to Brilliant now and get 20% off the annual subscription: https://brilliant.sjv.io/arjancodes.\n\n💬 Join my Discord server here: https://discord.arjan.codes\n\n🐦Twitter: https://twitter.com/arjancodes\n🌍LinkedIn: https://www.linkedin.com/company/arjancodes\n🕵Facebook: https://www.facebook.com/arjancodes\n\n👀 Channel code reviewer board:\n- Yoriz\n- Ryan Laursen\n- Sybren A. Stüvel\n\n🔖 Chapters:\n0:00 Intro\n0:31 Explaining the example\n2:45 What is a code smell?\n3:04 #1 Too many parameters\n5:03 #2 Too deep nesting\n10:01 #3 Not using the right data structure\n12:19 #4 Nested conditional expressions\n13:39 #5 Using wildcard imports\n15:33 #6 Asymmetrical code\n16:58 #7 Using self when it's not needed\n18:31 #8 (BONUS): Not using a main() function\n19:02 Tips for avoiding code smells\n\n#arjancodes #softwaredesign #python\n\nDISCLAIMER - The links in this description might be affiliate links. If you purchase a product or service through one of those links, I may receive a small commission. There is no additional charge to you. Thanks for supporting my channel so I can continue to provide you with free content each week!",
+                },
+                "defaultAudioLanguage": "en-US",
+            },
+        }
+    ],
+    "pageInfo": {"totalResults": 1, "resultsPerPage": 1},
+}
+
+video_search_snippet_result = {
+    "kind": "youtube#searchListResponse",
+    "etag": "EGHSOnqWu2afrCyBbfj-NtRXXAc",
+    "nextPageToken": "CAcQAA",
+    "regionCode": "IN",
+    "pageInfo": {"totalResults": 994005, "resultsPerPage": 7},
+    "items": [
+        {
+            "kind": "youtube#searchResult",
+            "etag": "S9O6HIQh6l-jF-XakccrM9nBLg8",
+            "id": {"kind": "youtube#video", "videoId": "oA8brF3w5XQ"},
+            "snippet": {
+                "publishedAt": "2021-03-10T15:09:27Z",
+                "channelId": "UCeVMnSShP_Iviwkknt83cww",
+                "title": "Python Flask Web Development Tutorial in Hindi",
+                "description": "Web Development Using Python Flask in one video: In this python flask tutorial, we will see how to make awesome websites using ...",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/oA8brF3w5XQ/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/oA8brF3w5XQ/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/oA8brF3w5XQ/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                },
+                "channelTitle": "CodeWithHarry",
+                "liveBroadcastContent": "none",
+                "publishTime": "2021-03-10T15:09:27Z",
+            },
+        },
+        {
+            "kind": "youtube#searchResult",
+            "etag": "p6y_8xTKuRh8_q1OHsjwh9MrWSc",
+            "id": {"kind": "youtube#video", "videoId": "Z1RJmh_OqeA"},
+            "snippet": {
+                "publishedAt": "2019-05-28T12:43:15Z",
+                "channelId": "UC8butISFwT-Wl7EV0hUK0BQ",
+                "title": "Learn Flask for Python - Full Tutorial",
+                "description": "Flask is a micro web framework written in Python. It is classified as a microframework because it does not require particular tools ...",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/Z1RJmh_OqeA/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/Z1RJmh_OqeA/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/Z1RJmh_OqeA/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                },
+                "channelTitle": "freeCodeCamp.org",
+                "liveBroadcastContent": "none",
+                "publishTime": "2019-05-28T12:43:15Z",
+            },
+        },
+        {
+            "kind": "youtube#searchResult",
+            "etag": "6hugJBPuVOQoDDrpp-17DH-UIcI",
+            "id": {"kind": "youtube#video", "videoId": "Qr4QMBUPxWo"},
+            "snippet": {
+                "publishedAt": "2021-03-10T14:53:17Z",
+                "channelId": "UC8butISFwT-Wl7EV0hUK0BQ",
+                "title": "Flask Course - Python Web Application Development",
+                "description": "Learn the Flask Python web framework by building your own e-commerce website with its own authentication system.",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/Qr4QMBUPxWo/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/Qr4QMBUPxWo/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/Qr4QMBUPxWo/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                },
+                "channelTitle": "freeCodeCamp.org",
+                "liveBroadcastContent": "none",
+                "publishTime": "2021-03-10T14:53:17Z",
+            },
+        },
+        {
+            "kind": "youtube#searchResult",
+            "etag": "pH33Pe-1rNQCtO7UB6oqLDKeTbo",
+            "id": {"kind": "youtube#video", "videoId": "dam0GPOAvVI"},
+            "snippet": {
+                "publishedAt": "2021-02-01T16:00:23Z",
+                "channelId": "UC4JX40jDee_tINbkjycV4Sg",
+                "title": "Python Website Full Tutorial - Flask, Authentication, Databases &amp; More",
+                "description": "In this video, I'm going to be showing you how to make a website with Python, covering Flask, authentication, databases, and ...",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/dam0GPOAvVI/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/dam0GPOAvVI/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/dam0GPOAvVI/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                },
+                "channelTitle": "Tech With Tim",
+                "liveBroadcastContent": "none",
+                "publishTime": "2021-02-01T16:00:23Z",
+            },
+        },
+        {
+            "kind": "youtube#searchResult",
+            "etag": "k-w4HpSFjadNEzOdVdxayIsg9mg",
+            "id": {"kind": "youtube#video", "videoId": "FW1LOP09RM8"},
+            "snippet": {
+                "publishedAt": "2019-09-15T14:45:00Z",
+                "channelId": "UCeVMnSShP_Iviwkknt83cww",
+                "title": "Should You Learn Django or Flask?",
+                "description": "Flask and Django are both awesome python frameworks which can get you started with python backends very quickly.",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/FW1LOP09RM8/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/FW1LOP09RM8/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/FW1LOP09RM8/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                },
+                "channelTitle": "CodeWithHarry",
+                "liveBroadcastContent": "none",
+                "publishTime": "2019-09-15T14:45:00Z",
+            },
+        },
+        {
+            "kind": "youtube#searchResult",
+            "etag": "5xfAs8PfjXG89JBMTx4o_2qA088",
+            "id": {"kind": "youtube#video", "videoId": "0HXg9_r_7MM"},
+            "snippet": {
+                "publishedAt": "2022-03-02T12:52:31Z",
+                "channelId": "UCeVMnSShP_Iviwkknt83cww",
+                "title": "Flask in 6 Minutes 🔥",
+                "description": "Python flask Introduction and History: In this video, we will look into the flask framework which is based on python. This video will ...",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/0HXg9_r_7MM/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/0HXg9_r_7MM/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/0HXg9_r_7MM/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                },
+                "channelTitle": "CodeWithHarry",
+                "liveBroadcastContent": "none",
+                "publishTime": "2022-03-02T12:52:31Z",
+            },
+        },
+        {
+            "kind": "youtube#searchResult",
+            "etag": "wNci7BBO8iT8Omq0zv7oK8jhFfo",
+            "id": {"kind": "youtube#video", "videoId": "oVA0fD13NGI"},
+            "snippet": {
+                "publishedAt": "2022-11-07T21:21:42Z",
+                "channelId": "UCcabW7890RKJzL968QWEykA",
+                "title": "CS50 2022 - Lecture 9 - Flask",
+                "description": "This is CS50, Harvard University's introduction to the intellectual enterprises of computer science and the art of programming.",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://i.ytimg.com/vi/oVA0fD13NGI/default.jpg",
+                        "width": 120,
+                        "height": 90,
+                    },
+                    "medium": {
+                        "url": "https://i.ytimg.com/vi/oVA0fD13NGI/mqdefault.jpg",
+                        "width": 320,
+                        "height": 180,
+                    },
+                    "high": {
+                        "url": "https://i.ytimg.com/vi/oVA0fD13NGI/hqdefault.jpg",
+                        "width": 480,
+                        "height": 360,
+                    },
+                },
+                "channelTitle": "CS50",
+                "liveBroadcastContent": "none",
+                "publishTime": "2022-11-07T21:21:42Z",
+            },
+        },
+    ],
+}
+
+video_stat_list_result = {
+    "kind": "youtube#videoListResponse",
+    "etag": "jF7ZmQfE1JBqtgIkaPwwT162dVs",
+    "items": [
+        {
+            "kind": "youtube#video",
+            "etag": "EM72uLMYEgjquW_Ev5ketVNYsso",
+            "id": "zmWf_cHyo8s",
+            "statistics": {
+                "viewCount": "74462",
+                "likeCount": "2947",
+                "favoriteCount": "0",
+                "commentCount": "219",
+            },
+        }
+    ],
+    "pageInfo": {"totalResults": 1, "resultsPerPage": 1},
+}
+
+channel_stat_list_result = {
+    "kind": "youtube#channelListResponse",
+    "etag": "3PM0_2gtm7isvE3jMo7RQIagKKM",
+    "pageInfo": {"totalResults": 1, "resultsPerPage": 5},
+    "items": [
+        {
+            "kind": "youtube#channel",
+            "etag": "ieyZyBST8UeQrOZVz1iR2tixp3Q",
+            "id": "UCIvaYmXn910QMdemBG3v1pQ",
+            "statistics": {
+                "viewCount": "14634734282",
+                "subscriberCount": "28800000",
+                "hiddenSubscriberCount": False,
+                "videoCount": "160655",
+            },
+        }
+    ],
+}
+
+channel_snippet_list_result = {
+    "kind": "youtube#channelListResponse",
+    "etag": "rYDJi8wkBH3I5sff83cwAxcCpeY",
+    "pageInfo": {"totalResults": 1, "resultsPerPage": 5},
+    "items": [
+        {
+            "kind": "youtube#channel",
+            "etag": "zAxQIErg6_Fb-3Y3JwjXRuB-O5U",
+            "id": "UCIvaYmXn910QMdemBG3v1pQ",
+            "snippet": {
+                "title": "Zee News",
+                "description": "Zee Media Corporation Ltd (ZMCL), India's largest news network, touches the lives of over 150 million Indians through a clutch of national and regional news channels. \n\nZee News, which is the flagship channel of the company, has the 'Soch Badlo Desh Badlo' tag line which shows the focus on hardcore and serious news. The channel's programmes have won several prestigious national and international awards.\n\nThe specific channels operated by Zee Media Corporation Ltd are Zee News, Zee Business, Zee Punjab Haryana Himachal, Zee Kalinga, Zee Rajasthan, Zee Bihar and Jharkhand, Zee 24 Gantalu, Zee Madhya Pradesh Chattisgarh, , Zee Salaam, Zee 24 Taas - the first 24-hour Marathi news channel. 24 Ghanta, a 24 hour Bangla news channel is operated by a subsidiary company known as Zee Akaash News Private Limited.\n\nZee Media Corporation Ltd also supplies content to the international broadcasting business of Zee in USA, Europe, Africa, Middle East and Asia Pacific.",
+                "customUrl": "@zeenews",
+                "publishedAt": "2007-06-19T12:05:49Z",
+                "thumbnails": {
+                    "default": {
+                        "url": "https://yt3.ggpht.com/ytc/AL5GRJXB0kt6-akLK0AtwYKPZ1lWM-XE-VEed7Occd0tERM=s88-c-k-c0x00ffffff-no-rj",
+                        "width": 88,
+                        "height": 88,
+                    },
+                    "medium": {
+                        "url": "https://yt3.ggpht.com/ytc/AL5GRJXB0kt6-akLK0AtwYKPZ1lWM-XE-VEed7Occd0tERM=s240-c-k-c0x00ffffff-no-rj",
+                        "width": 240,
+                        "height": 240,
+                    },
+                    "high": {
+                        "url": "https://yt3.ggpht.com/ytc/AL5GRJXB0kt6-akLK0AtwYKPZ1lWM-XE-VEed7Occd0tERM=s800-c-k-c0x00ffffff-no-rj",
+                        "width": 800,
+                        "height": 800,
+                    },
+                },
+                "localized": {
+                    "title": "Zee News",
+                    "description": "Zee Media Corporation Ltd (ZMCL), India's largest news network, touches the lives of over 150 million Indians through a clutch of national and regional news channels. \n\nZee News, which is the flagship channel of the company, has the 'Soch Badlo Desh Badlo' tag line which shows the focus on hardcore and serious news. The channel's programmes have won several prestigious national and international awards.\n\nThe specific channels operated by Zee Media Corporation Ltd are Zee News, Zee Business, Zee Punjab Haryana Himachal, Zee Kalinga, Zee Rajasthan, Zee Bihar and Jharkhand, Zee 24 Gantalu, Zee Madhya Pradesh Chattisgarh, , Zee Salaam, Zee 24 Taas - the first 24-hour Marathi news channel. 24 Ghanta, a 24 hour Bangla news channel is operated by a subsidiary company known as Zee Akaash News Private Limited.\n\nZee Media Corporation Ltd also supplies content to the international broadcasting business of Zee in USA, Europe, Africa, Middle East and Asia Pacific.",
+                },
+                "country": "IN",
+            },
+        }
+    ],
+}
diff --git a/tests/test_util.py b/tests/test_util.py
index 8677c5f..5a64f1c 100644
--- a/tests/test_util.py
+++ b/tests/test_util.py
@@ -1,20 +1,97 @@
 import os
 import types
 import unittest
-from pyytdata import PyYtData
+from unittest import mock
+
+from dotenv import load_dotenv
+from test_mock_data import (
+    channel_snippet_list_result, channel_stat_list_result,
+    video_list_snippet_result, video_search_snippet_result,
+    video_stat_list_result
+)
+
+import pyytdata
+from pyytdata import PyYtData, util
+
+load_dotenv()
 
 
 class TestPyYtData(unittest.TestCase):
     def test_check_env(self):
         self.assertTrue(os.environ.get("API_KEY") is not None)
 
-    def setUp(self):
-        self.data = PyYtData("flask", 1)
+    @mock.patch(
+        "pyytdata.util.fetcher.VideoDataFetcher.get_result",
+        return_value=video_search_snippet_result,
+    )
+    @mock.patch(
+        "pyytdata.util.fetcher.VideoDataFetcher.qtype",
+        new_callable=mock.PropertyMock,
+        return_value="search",
+    )
+    def test_get_videoinfo(self, get_result_mock, qtype_mock):
+        self.data = PyYtData("flask", 6)
         self.rslt = self.data.get_videoinfo()
-
-    def test_get_videoinfo(self):
         self.assertIsInstance(self.rslt, types.GeneratorType)
-        self.assertTrue(len(list(self.rslt)) == 1)
+        self.assertTrue(len(list(self.rslt)) == 6)
+
+
+class TestVideoInfo(unittest.TestCase):
+    @mock.patch(
+        "pyytdata.util.fetcher.VideoDataFetcher.get_result",
+        return_value=video_list_snippet_result,
+    )
+    @mock.patch(
+        "pyytdata.util.fetcher.VideoDataFetcher.qtype",
+        new_callable=mock.PropertyMock,
+        return_value="list",
+    )
+    def test_get_result(self, get_result_moc, qtype_mock):
+        video_fetcher = util.fetcher.VideoDataFetcher()
+        vid = util.info.VideoInfo(video_fetcher, "snippet", video_id="zmWf_cHyo8s")
+        assert (
+            vid.get_info(0).title
+            == "More Python Code Smells: Avoid These 7 Smelly Snags"
+        )
+
+
+class TestChannelInfo(unittest.TestCase):
+    @mock.patch(
+        "pyytdata.util.fetcher.ChannelDataFetcher.get_result",
+        return_value=channel_snippet_list_result,
+    )
+    def test_get_result(self, get_result_moc):
+        channel_fetcher = util.fetcher.ChannelDataFetcher()
+        channel_info = util.info.ChannelInfo(
+            channel_fetcher, "snippet", channel_name="zeenews"
+        )
+        assert channel_info.get_info().title == "Zee News"
+
+
+class TestVideoStat(unittest.TestCase):
+    @mock.patch(
+        "pyytdata.util.fetcher.VideoDataFetcher.get_result",
+        return_value=video_stat_list_result,
+    )
+    def test_get_result(self, get_result_moc):
+        video_fetcher = util.fetcher.VideoDataFetcher()
+        vid = util.info.VideoStatInfo(
+            video_fetcher, "statistic", video_id="zmWf_cHyo8s"
+        )
+        assert vid.get_info().total_view == "74462"
+
+
+class TestChannelStat(unittest.TestCase):
+    @mock.patch(
+        "pyytdata.util.fetcher.ChannelDataFetcher.get_result",
+        return_value=channel_stat_list_result,
+    )
+    def test_get_result(self, get_result_moc):
+        channel_fetcher = util.fetcher.ChannelDataFetcher()
+        channel_info = util.info.ChannelStatInfo(
+            channel_fetcher, "statistic", channel_name="zeenews"
+        )
+        assert channel_info.get_info().total_viewcount == "14634734282"
 
 
 if __name__ == "__main__":