forked from youtube/api-samples
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
"Added sample: python/upload_thumbnail.py"
- Loading branch information
1 parent
ccd009e
commit 4e1ff58
Showing
1 changed file
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#!/usr/bin/python | ||
|
||
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 Cloud Console }} at | ||
# {{ https://cloud.google.com/console }}. | ||
# 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_secrets.json" | ||
|
||
# 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" | ||
|
||
# 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 {{ Cloud Console }} | ||
{{ https://cloud.google.com/console }} | ||
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)) | ||
|
||
def get_authenticated_service(args): | ||
flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, | ||
scope=YOUTUBE_READ_WRITE_SCOPE, | ||
message=MISSING_CLIENT_SECRETS_MESSAGE) | ||
|
||
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())) | ||
|
||
# Call the API's thumbnails.set method to upload the thumbnail image and | ||
# associate it with the appropriate video. | ||
def upload_thumbnail(youtube, video_id, file): | ||
youtube.thumbnails().set( | ||
videoId=video_id, | ||
media_body=file | ||
).execute() | ||
|
||
if __name__ == "__main__": | ||
# The "videoid" option specifies the YouTube video ID that uniquely | ||
# identifies the video for which the thumbnail image is being updated. | ||
argparser.add_argument("--video-id", required=True, | ||
help="ID of video whose thumbnail you're updating.") | ||
# The "file" option specifies the path to the thumbnail image file. | ||
argparser.add_argument("--file", required=True, | ||
help="Path to thumbnail image file.") | ||
args = argparser.parse_args() | ||
|
||
if not os.path.exists(args.file): | ||
exit("Please specify a valid file using the --file= parameter.") | ||
|
||
youtube = get_authenticated_service(args) | ||
try: | ||
upload_thumbnail(youtube, args.video_id, args.file) | ||
except HttpError, e: | ||
print "An HTTP error %d occurred:\n%s" % (e.resp.status, e.content) | ||
else: | ||
print "The custom thumbnail was successfully set." |