Skip to content

Instantly share code, notes, and snippets.

@downthecrop
Created April 21, 2023 18:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save downthecrop/7861f67859d1973cb65592ef357f5227 to your computer and use it in GitHub Desktop.
Save downthecrop/7861f67859d1973cb65592ef357f5227 to your computer and use it in GitHub Desktop.
ChatGPT being insanely smart.

Bryce Matthes: If I want to calculate the combined total of all of a YouTube channels videos how should I do that? I want the exact number.


ChatGPT: To calculate the combined total of all views for a YouTube channel's videos, you'll need to use the YouTube Data API. The API allows you to interact with YouTube's database and fetch information like video views. To get the exact number of combined total views, you can follow these steps:

Create a Google API project and enable YouTube Data API v3:Go to the Google Developers Console: https://console.developers.google.com/Create a new project, or use an existing one.In the "Dashboard", click "Enable APIs and Services" and search for "YouTube Data API v3". Enable it for your project.

Get an API key:In the Google Developers Console, navigate to "Credentials" under "APIs & Services".Click "Create credentials" and choose "API key". Save the generated API key for later use.

Install the Google API client library for Python (if you haven't already):Open a terminal/command prompt and run pip install google-api-python-client.

Write a Python script to fetch the total views for all videos in the channel:python

import googleapiclient.discovery

def get_channel_videos(api_key, channel_id):
    youtube = googleapiclient.discovery.build("youtube", "v3", developerKey=api_key)

    request = youtube.search().list(
        part="id",
        channelId=channel_id,
        maxResults=50,
        type="video",
        fields="nextPageToken,items(id(videoId))"
    )
    response = request.execute()

    video_ids = [item["id"]["videoId"] for item in response["items"]]
    while "nextPageToken" in response:
        request = youtube.search().list(
            part="id",
            channelId=channel_id,
            maxResults=50,
            type="video",
            fields="nextPageToken,items(id(videoId))",
            pageToken=response["nextPageToken"]
        )
        response = request.execute()
        video_ids.extend([item["id"]["videoId"] for item in response["items"]])

    return video_ids

def get_total_views(api_key, video_ids):
    youtube = googleapiclient.discovery.build("youtube", "v3", developerKey=api_key)

    total_views = 0
    for i in range(0, len(video_ids), 50):
        request = youtube.videos().list(
            part="statistics",
            id=",".join(video_ids[i:i + 50]),
            fields="items(statistics(viewCount))"
        )
        response = request.execute()

        total_views += sum(int(item["statistics"]["viewCount"]) for item in response["items"])

    return total_views

if __name__ == "__main__":
    API_KEY = "YOUR_API_KEY"  # Replace with your API key
    CHANNEL_ID = "CHANNEL_ID"  # Replace with the channel ID you want to get the total views for

    video_ids = get_channel_videos(API_KEY, CHANNEL_ID)
    total_views = get_total_views(API_KEY, video_ids)

    print(f"Total views for channel {CHANNEL_ID}: {total_views}")

Replace "YOUR_API_KEY" with the API key you saved earlier, and "CHANNEL_ID" with the channel ID of the YouTube channel you want to calculate the combined total views for.

Run the script, and it will print the combined total views for the specified YouTube channel.

Keep in mind that YouTube Data API has a quota limit, which may vary depending on your account. If you need to process a large number of channels, you may need to optimize the script or request additional quota.


Bryce Matthes: I want a combined total length of all the videos


ChatGPT: To calculate the combined total length of all videos in a YouTube channel, you'll need to modify the Python script I provided earlier to fetch the video durations and sum them up. Here's the updated script:python

import googleapiclient.discovery
from isodate import parse_duration


def get_channel_videos(api_key, channel_id):
    youtube = googleapiclient.discovery.build("youtube", "v3", developerKey=api_key)

    request = youtube.search().list(
        part="id",
        channelId=channel_id,
        maxResults=50,
        type="video",
        fields="nextPageToken,items(id(videoId))"
    )
    response = request.execute()

    video_ids = [item["id"]["videoId"] for item in response["items"]]
    while "nextPageToken" in response:
        request = youtube.search().list(
            part="id",
            channelId=channel_id,
            maxResults=50,
            type="video",
            fields="nextPageToken,items(id(videoId))",
            pageToken=response["nextPageToken"]
        )
        response = request.execute()
        video_ids.extend([item["id"]["videoId"] for item in response["items"]])

    return video_ids


def get_total_duration(api_key, video_ids):
    youtube = googleapiclient.discovery.build("youtube", "v3", developerKey=api_key)

    total_duration = 0
    for i in range(0, len(video_ids), 50):
        request = youtube.videos().list(
            part="contentDetails",
            id=",".join(video_ids[i:i + 50]),
            fields="items(contentDetails(duration))"
        )
        response = request.execute()

        total_duration += sum(parse_duration(item["contentDetails"]["duration"]).total_seconds() for item in response["items"])

    return total_duration


if __name__ == "__main__":
    API_KEY = "YOUR_API_KEY"  # Replace with your API key
    CHANNEL_ID = "CHANNEL_ID"  # Replace with the channel ID you want to get the total duration for

    # Install the isodate library if you haven't already
    # Run `pip install isodate` in the terminal/command prompt

    video_ids = get_channel_videos(API_KEY, CHANNEL_ID)
    total_duration = get_total_duration(API_KEY, video_ids)

    print(f"Total duration for channel {CHANNEL_ID}: {total_duration} seconds")

Before you run the updated script, you'll need to install the isodate library, which is used for parsing ISO 8601 durations returned by the YouTube Data API. To install the library, run pip install isodate in your terminal/command prompt.

After you've installed the isodate library, replace "YOUR_API_KEY" with the API key you saved earlier, and "CHANNEL_ID" with the channel ID of the YouTube channel you want to calculate the combined total length for. Run the script, and it will print the combined total length in seconds for the specified YouTube channel.

You can convert the duration in seconds to hours, minutes, and seconds by modifying the print statement in the script like this:python

hours, remainder = divmod(total_duration, 3600)
minutes, seconds = divmod(remainder, 60)
print(f"Total duration for channel {CHANNEL_ID}: {hours} hours, {minutes} minutes, and {seconds} seconds")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment