In this tutorial, we are going to learn how to upload a video to YouTube using YouTube Data API in Python.
Makes sure your account is verified. If not, go to https://www.youtube.com/verify to verify your account.
This method supports media upload. Uploaded files must conform to these constraints:
- Maximum file size: 128GB
- Accepted Media MIME types:
video/*
,application/octet-stream
Step 1. Enable YouTube Data API service
- Log in to your Google Cloud Platform,
- Select your project
- Enable YouTube Data API service
If this is your first time working with Google API service, to learn how to create your first Google Project.
Step 2. Install Python Library
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Buy Me a Coffee? Your support is much appreciated!
PayPal Me: https://www.paypal.me/jiejenn/5
Venmo: @Jie-Jenn
Buy Me a Coffee? Your support is much appreciated!
PayPal Me: https://www.paypal.me/jiejenn/5
Venmo: @Jie-Jenn
Source Code:
import datetime
from Google import Create_Service
from googleapiclient.http import MediaFileUpload
CLIENT_SECRET_FILE = '<client file.json>'
API_NAME = 'youtube'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/youtube.upload']
service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
upload_date_time = datetime.datetime(2020, 12, 25, 12, 30, 0).isoformat() + '.000Z'
request_body = {
'snippet': {
'categoryI': 19,
'title': 'Upload Testing',
'description': 'Hello World Description',
'tags': ['Travel', 'video test', 'Travel Tips']
},
'status': {
'privacyStatus': 'private',
'publishAt': upload_date_time,
'selfDeclaredMadeForKids': False,
},
'notifySubscribers': False
}
mediaFile = MediaFileUpload('HelloWorld.MP4')
response_upload = service.videos().insert(
part='snippet,status',
body=request_body,
media_body=mediaFile
).execute()
service.thumbnails().set(
videoId=response_upload.get('id'),
media_body=MediaFileUpload('thumbnail.png')
).execute()
Google.py
import pickle
import os
from google_auth_oauthlib.flow import Flow, InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload
from google.auth.transport.requests import Request
def Create_Service(client_secret_file, api_name, api_version, *scopes):
print(client_secret_file, api_name, api_version, scopes, sep='-')
CLIENT_SECRET_FILE = client_secret_file
API_SERVICE_NAME = api_name
API_VERSION = api_version
SCOPES = [scope for scope in scopes[0]]
print(SCOPES)
cred = None
pickle_file = f'token_{API_SERVICE_NAME}_{API_VERSION}.pickle'
# print(pickle_file)
if os.path.exists(pickle_file):
with open(pickle_file, 'rb') as token:
cred = pickle.load(token)
if not cred or not cred.valid:
if cred and cred.expired and cred.refresh_token:
cred.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
cred = flow.run_local_server()
with open(pickle_file, 'wb') as token:
pickle.dump(cred, token)
try:
service = build(API_SERVICE_NAME, API_VERSION, credentials=cred)
print(API_SERVICE_NAME, 'service created successfully')
return service
except Exception as e:
print('Unable to connect.')
print(e)
return None
def convert_to_RFC_datetime(year=1900, month=1, day=1, hour=0, minute=0):
dt = datetime.datetime(year, month, day, hour, minute, 0).isoformat() + 'Z'
return dt
I’m enjoying the video. Please upload the update video. 🙂
hi can i use this code to upload vidoes from google drive to my youtube channel?
You have a typo somewhere in your code.
Thank you very much!
Your example is simple and works fine! Different from the one from Youtube API documentation, that is not even compatible with python 3.
possible errors that I found:
“AttributeError: ‘MediaFileUpload’ object has no attribute ‘_fd’”
– Usually because wrong file path as passed as argument
“”The request metadata specifies an invalid
scheduled publishing time.”. Details: “The request metadata specifies an invalid scheduled publishing time.””
– To schedule a post, you should set privacyStatus as private, and of course, use datatime format according to the ISO 8601
Hope it helps someone as this video/example helped me
Regards!
ModuleNotFoundError: No module named ‘google_auth_oauthlib’
Other people suggest using conda instead of pip to install, but I can’t get it to work. Any suggestions?
$ pip install google-auth-oauthlib
I would donate to this post if it was on Odysee
Thanks! this is very helpful.
I’m getting stuck on the lagging page. After getting the message “This app wants access to your Google account”, I select continue, but get no response after that. Any help would be appreciated.
Hi, I keep installing pip install google-auth-oauthlib on my terminal, but spyder keeps giving me this error ModuleNotFoundError: No module named ‘google_auth_oauthlib’.
How can I solve it?
Awesome work!, one note is that accordingly to the documentation, it should be `categoryId` not `categoryI`. Cheers!
ModuleNotFoundError: No module named ‘Google’
nothing works iv already pip installed everything
response_upload = service.videos().insert(
AttributeError: ‘NoneType’ object has no attribute ‘videos’
It’s good. Thanks. Code is good.
Hey Man Good work!,
Im trying to replicate the same in colab but im facing and error
when i try to pass this code
“service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)”
[Errno 98] Address already in use
please give your inputs