<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marethyu12</title>
    <description>The latest articles on DEV Community by Marethyu12 (@marethyu12).</description>
    <link>https://dev.to/marethyu12</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F321309%2Fd0a854a8-075c-4935-851e-4538c8553ba2.png</url>
      <title>DEV Community: Marethyu12</title>
      <link>https://dev.to/marethyu12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marethyu12"/>
    <language>en</language>
    <item>
      <title>My Graduation Project</title>
      <dc:creator>Marethyu12</dc:creator>
      <pubDate>Mon, 25 May 2020 21:04:49 +0000</pubDate>
      <link>https://dev.to/marethyu12/my-graduation-project-2doh</link>
      <guid>https://dev.to/marethyu12/my-graduation-project-2doh</guid>
      <description>&lt;h2&gt;
  
  
  What is my final project?
&lt;/h2&gt;

&lt;p&gt;I build a CLI for downloading YouTube videos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Link to repository
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/marethyu"&gt;
        marethyu
      &lt;/a&gt; / &lt;a href="https://github.com/marethyu/gotube"&gt;
        gotube
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A very simple command line tool for downloading YouTube videos.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
GoTube&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://travis-ci.com/marethyu/gotube" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/2876c1953a91f03613f44863440a03f3efa02282/68747470733a2f2f6170692e7472617669732d63692e636f6d2f6d617265746879752f676f747562652e7376673f6272616e63683d6d6173746572" alt="Build Status"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/eea7517b053e6c0d58f559be0af3c0f8f2b2078a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d76312e322d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/eea7517b053e6c0d58f559be0af3c0f8f2b2078a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d76312e322d626c7565" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Overview&lt;/h2&gt;
&lt;p&gt;This repository contains a single-file implementation of YouTube video downloader written in Go. It does not require any third-party packages, only built-in packages from the standard library. The code is compact and easily-readable.&lt;/p&gt;
&lt;h2&gt;
Installation&lt;/h2&gt;
&lt;p&gt;You can fetch one of the executable binaries (preferably latest one) from Releases. The binaries only support Windows (32 and 64 bit) and Linux (32 and 64 bit) this time.&lt;/p&gt;
&lt;p&gt;You can also install GoTube directly from command line. Simply just type a command below in your terminal:&lt;/p&gt;
&lt;div class="highlight highlight-source-gfm"&gt;&lt;pre&gt;go get github.com/marethyu/gotube&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
Building From Source&lt;/h2&gt;
&lt;p&gt;Run the following commands:&lt;/p&gt;
&lt;div class="highlight highlight-source-gfm"&gt;&lt;pre&gt;git clone https://github.com/marethyu/gotube.git
cd gotube
go get golang.org/x/sync/errgroup
go build gotube.go&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
How It Works?&lt;/h2&gt;
&lt;p&gt;When GoTube receives a YouTube video URL as an input, it will extract a video id portion of the URL. Then it sends a HTTP GET request to a server through URL &lt;code&gt;https://www.youtube.com/get_video_info&lt;/code&gt; with the video id as a query string. The…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/marethyu/gotube"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Why did I build it?
&lt;/h2&gt;

&lt;p&gt;There are zillions of third-party tools available for downloading YouTube videos. Why did I build my own when there is an abundance of them? Well, the part of the reason is to improve my skills in Go programming and to learn more about HTTP protocol. I believe that the important reason I built it is to help others to understand the inner workings of other popular open-source YouTube video downloaders like &lt;a href="https://github.com/ytdl-org/youtube-dl"&gt;youtube-dl&lt;/a&gt; for example.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did I build it?
&lt;/h2&gt;

&lt;p&gt;I used Go to build my project because it is an excellent programming language to build CLIs. I made sure my code is readable and compact. I tried my best to reduce any external dependencies which means I need to implement some features from scratch. I adhered to KISS principle so that my code can be read and understood in one sitting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional thoughts?
&lt;/h2&gt;

&lt;p&gt;I enjoyed building this project and I hope to inspire others to do a similar project. Also I would like to thank developers who helped me to refactor my code and add new features to my project.&lt;/p&gt;

</description>
      <category>devgrad2020</category>
      <category>octograd2020</category>
    </item>
  </channel>
</rss>
