It should work with this.
I currently use this stripped down snippet to upload videos (tho sometimes the lack of error handling shows)
def upload_to_youtube(filename):
# init youtube login
storage = Storage(os.path.join(PROJECT_PATH, CREDENTIALS_NAME))
credentials = storage.get()
logger.info("YouTube auth loaded")
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
http=credentials.authorize(httplib2.Http()))
logger.info("YouTube login successful")
# init video data
insert_request = youtube.videos().insert(
part="snippet,status",
body={
'snippet': {
'title': "title"
'description': "description",
'tags': ["a", "b"],
'categoryId': 22,
},
'status': {
'privacyStatus': "public",
}
},
# chunksize=-1 -> entire file will be uploaded in a single
media_body=MediaFileUpload(filename, chunksize=1024*1024,
resumable=True)
)
# start uploading
logger.info("Uploading file...")
response = None
while response is None:
try:
status, response = insert_request.next_chunk()
if status:
progress = status.progress()
logger.info("Upload status: %s", progress)
upload_to_youtube.update_state(meta={
'progress': progress * 100})
else:
if 'id' in response:
logger.info("Upload successful, http://youtu.be/%s",
response['id'])
return response
else:
logger.error("The upload failed with an "
"unexpected response: %s", response)
return None
except HttpError as e:
logger.error(e)
return None