How to upload a video to YouTube using YouTube Data API in Python – Learn Data Analysis

How to upload a video to YouTube using YouTube Data API in Python

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

  1. Log in to your Google Cloud Platform,
  2. Select your project
  3. 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

 

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'

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