Search code examples
pythonyoutube-apiyoutube-data-apigoogle-developers-console

Youtube data api v3 does not allow access to playlists, scope issue?


I have a list with videos that I would like to add to a playlist with the help of the youtube api v3. I have oauth set up in my code as well as the developers console:

# Sample Python code for youtube.channels.list
# See instructions for running these code samples locally:
# https://developers.google.com/explorer-help/code-samples#python

import os

import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors

scopes = ["https://www.googleapis.com/auth/youtube"]

# Disable OAuthlib's HTTPS verification when running locally.
# *DO NOT* leave this option enabled in production.
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

api_service_name = "youtube"
api_version = "v3"
client_secrets_file = "client_secret_xxx.apps.googleusercontent.com.json"

# Get credentials and create an API client
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
    client_secrets_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(
    api_service_name, api_version, credentials=credentials)

Then I use this function to add the videos to my playlist:

def add_video_to_playlist(youtube,videoID,playlistID):
  add_video_request=youtube.playlistItems().insert(
  part="snippet",
  body={
        'snippet': {
          'playlistId': playlistID, 
          'resourceId': {
                  'kind': 'youtube#video',
              'videoId': videoID
            }
        #'position': 0
        }
}
 ).execute()

The scopes in my developer account are set: Screenshot

The error message I get is the following:

HttpError: <HttpError 403 when requesting https://youtube.googleapis.com/youtube/v3/playlistItems?part=snippet&alt=json returned "Forbidden". Details: "[{'message': 'Forbidden', 'domain': 'youtube.playlistItem', 'reason': 'playlistItemsNotAccessible'}]">

Where am I doing something wrong?


Solution

  • To answer my own question here: The scopes you set in the developers console also need to be added when creating the credentials. what I had to do is change

    scopes = ["https://www.googleapis.com/auth/youtube"]
    

    to

    scopes = ["https://www.googleapis.com/auth/youtube", "https://www.googleapis.com/auth/youtube.force-ssl", 
              "https://www.googleapis.com/auth/youtubepartner"]