Buy Me a Coffee? Your support is much appreciated!
demo.py
import datetime
import time
from googleapiclient.http import MediaFileUpload
import pandas as pd
from google_apis import create_service
def video_categories():
video_categories = service.videoCategories().list(part='snippet', regionCode='US').execute()
df = pd.DataFrame(video_categories.get('items'))
return pd.concat([df['id'], df['snippet'].apply(pd.Series)[['title']]], axis=1)
API_NAME = 'youtube'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/youtube']
# SCOPES = ['https://www.googleapis.com/auth/youtube.upload']
client_file = 'client-secret.json'
service = create_service(client_file, API_NAME, API_VERSION, SCOPES)
print(video_categories())
"""
Step 1. Uplaod Video
"""
upload_time = (datetime.datetime.now() + datetime.timedelta(days=10)).isoformat() + '.000Z'
request_body = {
'snippet': {
'title': '<video title>',
'description': '<video description>',
'categoryId': '<category id>',
'tags': ['tags']
},
'status': {
'privacyStatus': 'private',
'publishedAt': upload_time,
'selfDeclaredMadeForKids': False
},
'notifySubscribers': False
}
video_file = 'demo video.mp4'
media_file = MediaFileUpload(video_file)
# print(media_file.size() / pow(1024, 2), 'mb')
# print(media_file.to_json())
# print(media_file.mimetype())
response_video_upload = service.videos().insert(
part='snippet,status',
body=request_body,
media_body=media_file
).execute()
uploaded_video_id = response_video_upload.get('id')
"""
Step 2. Update video thumbnail
"""
response_thumbnail_upload = service.thumbnails().set(
videoId=uploaded_video_id,
media_body=MediaFileUpload('thumbnail.png')
).execute()
"""
Step 3 (optional). Set video privacy status to "Public"
"""
video_id = uploaded_video_id
counter = 0
response_update_video = service.videos().list(id=video_id, part='status').execute()
update_video_body = response_update_video['items'][0]
while 10 > counter:
if update_video_body['status']['uploadStatus'] == 'processed':
update_video_body['status']['privacyStatus'] = 'public'
service.videos().update(
part='status',
body=update_video_body
).execute()
print('Video {0} privacy status is updated to "{1}"'.format(update_video_body['id'], update_video_body['status']['privacyStatus']))
break
# adjust the duration based on your video size
time.sleep(10)
response_update_video = service.videos().list(id=video_id, part='status').execute()
update_video_body = response_update_video['items'][0]
counter += 1