diff --git a/lib/yt_upload.py b/lib/yt_upload.py index 28e9c6f..df58e04 100644 --- a/lib/yt_upload.py +++ b/lib/yt_upload.py @@ -20,6 +20,7 @@ from googleapiclient.errors import HttpError from googleapiclient.http import MediaFileUpload from google_auth_oauthlib.flow import InstalledAppFlow + import utils logging.basicConfig(format='%(asctime)s %(message)s', level=logging.INFO) @@ -126,25 +127,44 @@ def initialize_upload(youtube, options): body=body, media_body=MediaFileUpload(path, chunksize=-1, resumable=True) ) - resumable_upload(insert_request) + video_id = resumable_upload(insert_request, 'video', 'insert') + + # If we get a video_id, upload is successful and we are able to set thumbnail + if video_id and options.get('--thumbnail'): + set_thumbnail(youtube, options.get('--thumbnail'), videoId=video_id) + + +def set_thumbnail(youtube, media_file, **kwargs): + kwargs = utils.remove_empty_kwargs(**kwargs) # See full sample for function + request = youtube.thumbnails().set( + media_body=MediaFileUpload(media_file, chunksize=-1, + resumable=True), + **kwargs + ) + + # See full sample for function + return resumable_upload(request, 'thumbnail', 'set') # This method implements an exponential backoff strategy to resume a # failed upload. -def resumable_upload(request): +def resumable_upload(request, resource, method): response = None error = None retry = 0 while response is None: try: - logging.info('Youtube : Uploading file...') + template = 'Youtube: Uploading %s...' + logging.info(template % resource) status, response = request.next_chunk() if response is not None: - if 'id' in response: - template = ('Youtube : Video was successfully ' - 'uploaded.\n' - 'Watch it at https://youtu.be/%s (post-encoding could take some time)') + if method == 'insert' and 'id' in response: + logging.info('Youtube : Video was successfully uploaded.') + template = 'Youtube: Watch it at https://youtu.be/%s (post-encoding could take some time)' logging.info(template % response['id']) + return response['id'] + elif method != 'insert' or "id" not in response: + logging.info('Youtube: Thumbnail was successfully set.') else: template = ('Youtube : The upload failed with an ' 'unexpected response: %s')