Code4IT

The place for .NET enthusiasts, Azure lovers, and backend developers

How to get video details from YouTube with .NET Core 3

2020-03-17 3 min read Blog

We have already seen how to search for videos in a YouTube channel. Now it’s time to get details for a single video.

Table of Contents

Just a second!
If you are here, it means that you are a software developer. So, you know that storage, networking, and domain management have a cost .

If you want to support this blog, please ensure that you have disabled the adblocker for this site. I configured Google AdSense to show as few ADS as possible - I don't want to bother you with lots of ads, but I still need to add some to pay for the resources for my site.

Thank you for your understanding.
- Davide

I have already talked about how to retrieve a list of YouTube videos by its channel ID.

Now it’s time to check the details of a single video. Let’s say that you like a song, you listen to it at least 2 times a day and you want to download its description because it contains the lyrics.

And let’s say that this song is Tooth Fairy by Nanowar of Steel.

You can just copy and paste, right? Nah, too easy! 😁

Initial steps

The basic setup is the same I explained in my previous article about how to search for videos on a YouTube channel.

What you need to do is:

  1. Retrieve you API key;
  2. Create a .NET Core application
  3. Install Google.Apis and Google.Apis.YouTube.v3 NuGet packages
  4. Create the class that will hold the video details:
public class YouTubeVideoDetails
{
    public string VideoId { get; set; }
    public string Description { get; set; }
    public string Title { get; set; }
    public string ChannelTitle { get; set; }
    public DateTime? PublicationDate { get; set; }
}

Also, since you want to get the details of a video, you need the VideoId. You can retrieve it in 2 ways: programmatically, using the procedure from the previous article, or analyzing the YouTube URL: if we have https://www.youtube.com/watch?v=CzvQxQYKO88, the id is CzvQxQYKO88.

Now we have everything we need. Let’s go!

Add a YouTube service

Again, we need to instantiate the YouTube service.

using (var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
    ApiKey = '<your api key>'
}))
{
    // your code here
}

Download video details

Since YouTube provides an object for each service, we must use the correct one, and then we need to specify the video ID:

var searchRequest = youtubeService.Videos.List("snippet");
searchRequest.Id = "CzvQxQYKO88";

Once we have created the request, we need to retrieve the result:

var searchResponse = await searchRequest.ExecuteAsync();

The searchResponse object contains various information shared with other services, like pagination. We don’t need those info, and we can go straight to the video details:

var youTubeVideo = searchResponse.Items.FirstOrDefault();

Finally, we can populate our YouTueVideoDetails object:

YouTubeVideoDetails videoDetails = new YouTubeVideoDetails()
{
    VideoId = youTubeVideo.Id,
    Description = youTubeVideo.Snippet.Description,
    Title = youTubeVideo.Snippet.Title,
    ChannelTitle = youTubeVideo.Snippet.ChannelTitle,
    PublicationDate = youTubeVideo.Snippet.PublishedAt
};

The youTubeVideo object contains references to the thumbnails. As you might remember, in the article about how to search for videos associated to a YouTube channel, I explained that the images that you get with the Search endpoint are different to the ones here, in the Videos endpoint. My suggestion is to try both the examples on my GitHub page (see below) and find the differences.

Final result

Ok, we are ready to join all the pieces of the puzzle!

public async Task<YouTubeVideoDetails> GetVideoDetails()
{
    YouTubeVideoDetails videoDetails = null;
    using (var youtubeService = new YouTubeService(new BaseClientService.Initializer()
    {
        ApiKey = "<your-api-key>",
    }))
    {
        var searchRequest = youtubeService.Videos.List("snippet");
        searchRequest.Id = "CzvQxQYKO88";
        var searchResponse = await searchRequest.ExecuteAsync();

        var youTubeVideo = searchResponse.Items.FirstOrDefault();
        if(youTubeVideo!=null)
        {
            videoDetails = new YouTubeVideoDetails()
            {
                VideoId = youTubeVideo.Id,
                Description = youTubeVideo.Snippet.Description,
                Title = youTubeVideo.Snippet.Title,
                ChannelTitle = youTubeVideo.Snippet.ChannelTitle
            };
        }
    }
    return videoDetails;
}

You can see a full example on this GitHub repository.

Now we have the lyrics, and we are ready to learn about macroeconomics, power metal and inflation! Enjoy!

This article first appeared on Code4IT