Quantcast
Channel: Active questions tagged youtube-api - Stack Overflow
Viewing all articles
Browse latest Browse all 3637

Trying to access Youtube channel's captions with API, returned with KeyError

$
0
0

A few months ago, I created a program that goes to a Youtube channel and grabs the captions from all of the channels videos and then counts the amount of times a certain word is said, and when I created this program it worked perfectly. Now I have come back to this program, but my problem is that for some reason the code no longer works.

Here is my code:

from apiclient.discovery import buildfrom youtube_transcript_api import YouTubeTranscriptApifrom pytube import YouTubeimport os# Your Google API Keyapi_key = "Your Youtube API here"# The Youtube channel you want to extract data fromchannel_id = "Youtube channel here"# Youtube Buildyoutube = build('youtube', 'v3', developerKey=api_key)def get_channel_videos(channel_id):    # get Uploads playlist id    res = youtube.channels().list(id=channel_id,                                  part='contentDetails').execute()    playlist_id = res['items'][0]['contentDetails']['relatedPlaylists']['uploads']    videos = []    next_page_token = None    while 1:        res = youtube.playlistItems().list(playlistId=playlist_id,                                           part='snippet',                                           maxResults=50,                                           pageToken=next_page_token).execute()        videos += res['items']        next_page_token = res.get('nextPageToken')        if next_page_token is None:            break    return videosvideos = get_channel_videos(channel_id)video_ids = []  # list of all video_id of channelvideo_titles = []# Word to search forword1 = "firework"# Counter for the text filescounter = 1for video in videos:    video_ids.append(video['snippet']['resourceId']['videoId'])# Loops through every video on the youtube channelfor video_id in video_ids:    try:        # Gets the transcripts of youtube videos. Only gets English transcripts.        responses = YouTubeTranscriptApi.get_transcript(            video_id, languages=['en'])        # Get's the youtube video's link        yt = YouTube("https://www.youtube.com/watch?v="+str(video_id))        #print('\n'+"Video: "+"https://www.youtube.com/watch?v="+str(video_id)+'\n'+'\n'+"Captions:")        print("\n"+"Video Number: "+str(counter)+'\n'+"Video: "+"https://www.youtube.com/watch?v="+str(video_id)+'\n'+'Title: '+yt.title+'\n'+"Firework/s Wordcount:")        # This is for text file generation        filename = "video #" + str(counter) +".txt"        # Generates text file        with open(filename, "w") as file:            # Writes the title of the Youtube video at the top of the text file            file.write(yt.title)            # Whitespace            file.write("\n")            # Writes all the data grabbed from the transcripts into a text file            # in text form.            for i in responses:                file.write("{}\n".format(i))            counter += 1            file.close()            # This reads data from all the generated files,            # then converts all the data within the file to lowercase,            # then it counts the amount of times that the word you are searching            # for is used within each file that is generated.            fileTest = open(filename, "r")            read_data = fileTest.read()            word_count = read_data.lower().count(word1)            file.close()        # Prints out the word count.        print(word_count)        for response in responses:            text = response['text']    except Exception as e:            print(e)#for i in responses:

Here is the error I get:

Traceback (most recent call last):  File "D:\Downloads\YouTube-Caption-Project-main\main.py", line 47, in <module>    videos = get_channel_videos(channel_id)             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  File "D:\Downloads\YouTube-Caption-Project-main\main.py", line 30, in get_channel_videos    playlist_id = res['items'][0]['contentDetails']['relatedPlaylists']['uploads']                  ~~~^^^^^^^^^KeyError: 'items'

I found this problem that is of a similar vain to mine, but it didn't solve my problem: Performing google search in python with API, returned with KeyError

I tried placing the suggested code in the link, just below theres = youtube.channels().list(id=channel_id,part='contentDetails').execute() code, but in-turn, it gave me this error:

Traceback (most recent call last):  File "D:\Downloads\YouTube-Caption-Project-main\main.py", line 62, in <module>    for video in videos:TypeError: 'NoneType' object is not iterable

Viewing all articles
Browse latest Browse all 3637

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>