Skip to content

Instantly share code, notes, and snippets.

@seguri
Created October 6, 2016 23:59
Show Gist options
  • Save seguri/c7c9b7c8ff58b6ff53bd4054a0056c14 to your computer and use it in GitHub Desktop.
Save seguri/c7c9b7c8ff58b6ff53bd4054a0056c14 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
#
# Add a youtube video to a youtube playlist.
# Usage:
# ./this.py --playlist-id <playlist_id> --video-id <video_id>
#
import httplib2
import os
import sys
from apiclient.discovery import build
from apiclient.errors import HttpError
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import argparser, run_flow
# The CLIENT_SECRETS_FILE variable specifies the name of a file that contains
# the OAuth 2.0 information for this application, including its client_id and
# client_secret. You can acquire an OAuth 2.0 client ID and client secret from
# the Google Developers Console at
# https://console.developers.google.com/.
# Please ensure that you have enabled the YouTube Data API for your project.
# For more information about using OAuth2 to access the YouTube Data API, see:
# https://developers.google.com/youtube/v3/guides/authentication
# For more information about the client_secrets.json file format, see:
# https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
CLIENT_SECRETS_FILE = "client_id.json"
# This variable defines a message to display if the CLIENT_SECRETS_FILE is missing.
MISSING_CLIENT_SECRETS_MESSAGE = """
WARNING: Please configure OAuth 2.0
To make this sample run you will need to populate the client_secrets.json file
found at:
%s
with information from the Developers Console
https://console.developers.google.com/
For more information about the client_secrets.json file format, please visit:
https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
""" % os.path.abspath(os.path.join(os.path.dirname(__file__), CLIENT_SECRETS_FILE))
# This OAuth 2.0 access scope allows for full read/write access to the authenticated
# user's account.
YOUTUBE_READ_WRITE_SCOPE = "https://www.googleapis.com/auth/youtube"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
# Authorize the request and store authorization credentials.
def get_authenticated_service(args):
flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, message=MISSING_CLIENT_SECRETS_MESSAGE, scope=YOUTUBE_READ_WRITE_SCOPE)
storage = Storage("%s-oauth2.json" % sys.argv[0])
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = run_flow(flow, storage, args)
return build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, http=credentials.authorize(httplib2.Http()))
if __name__ == "__main__":
argparser.add_argument("--playlist-id", required=True, help="ID for playlist")
argparser.add_argument("--video-id", required=True, help="ID for vieo to be added")
args = argparser.parse_args()
youtube = get_authenticated_service(args)
# https://developers.google.com/youtube/v3/docs/playlistItems/insert#request
add_video_response = youtube.playlistItems().insert(
part="snippet",
body=dict(
snippet=dict(
playlistId=args.playlist_id,
resourceId=dict(
kind="youtube#video",
videoId=args.video_id
)
)
)
).execute()
try:
success = add_video_response['kind'] == 'youtube#playlistItem'
except Exception as e:
success = False
print 'Added' if success else 'Error', args.video_id
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment