You are currently viewing API данных Youtube для обработки видео | Набор-3

API данных Youtube для обработки видео | Набор-3

Обязательное условие: API данных Youtube для обработки видео | Набор-1Набор-2

Прежде чем продолжить, сначала посмотрите, как получить список допустимых категорий видео, чтобы определить, в какую категорию поместить видео. Для примера мы использовали значение “В” для regionCode параметра. Вы можете использовать любое другое значение. Только идентификаторы категорий, у которых assignable параметр имеет значение “True”, могут использоваться при вставке или обновлении видео.

Давайте обсудим, как вставить видео в учетную запись авторизованного пользователя на YouTube.

Найдите допустимые категории видео:

# importing library
from apiclient.discovery import build

# Arguments that need to passed
# to the build function
DEVELOPER_KEY = "API_key"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

# creating Youtube Resource Object
youtube_object = build(YOUTUBE_API_SERVICE_NAME,
							YOUTUBE_API_VERSION,
				developerKey = DEVELOPER_KEY)
	
def youtube_video_categories():
	
	# calling the videoCategory.list method
	# to retrieve youtube video categories result
	video_category = youtube_object.videoCategories(
	).list(part ='snippet', regionCode ='IN').execute()
	
	# extracting the results
	# from video_category response
	results = video_category.get("items", [])

	# empty list to store video category metadata
	videos_categories = []
	
	# extracting required info
	# from each result object
	for result in results:
		
		# video_categories result object
		videos_categories.append("% s, (% s % s)"
				%(result["id"],
				result["snippet"]["title"],
				result["snippet"]["assignable"]))

	print ("Video_Category_Id Catgeory_Name	 Assignable :\n",
						"\n".join(videos_categories), "\n")
	
if __name__ == "__main__":
	youtube_video_categories()

Выход:

Поскольку для вставки видео в учетную запись авторизованного пользователя требуется авторизация пользователя, поэтому мы создадим учетные данные типа OAuth для этого примера. Выполните следующие действия, чтобы создать Идентификатор клиента и Секретный ключ.

  1. Перейдите в консоль разработчиков Google Google и нажмите «Войти» в правом верхнем углу страницы. Войдите в систему, используя учетные данные действительной учетной записи Google. Если у вас нет учетной записи Google, сначала настройте учетную запись, а затем используйте данные для входа на домашнюю страницу разработчиков Google.
  2. Теперь перейдите на панель инструментов разработчика и создайте новый проект.
  3. Нажмите на опцию Включить API.
  4. В поле поиска найдите API данных Youtube и выберите опцию API данных Youtube, которая находится в раскрывающемся списке.
  1. Вы будете перенаправлены на экран с информацией об API данных Youtube, а также двумя вариантами : ВКЛЮЧИТЬ и ПОПРОБОВАТЬ API.
  2. Нажмите на опцию ВКЛЮЧИТЬ, чтобы начать работу с API.
  3. На боковой панели в разделе API и службы выберите Учетные данные.
  4. В верхней части страницы выберите вкладку Экран согласия OAuth. Выберите адрес электронной почты, введите название продукта, если оно еще не задано, и нажмите кнопку Сохранить.
  5. На вкладке Учетные данные выберите раскрывающийся список Создать учетные данные и выберите Идентификатор клиента OAuth. OAuth обычно используется там, где требуется авторизация, например, в случае получения понравившихся видео пользователя.
  6. Выберите тип приложения “Другое», введите имя «API данных YouTube Myvideos” и нажмите кнопку «Создать».
  7. Нажмите кнопку ОК.
  8. Нажмите на кнопку загрузки справа от идентификатора клиента, чтобы загрузить файл JSON.
  9. Сохраните и переименуйте файл как client_secret.json и переместите его в рабочий каталог.

Установите дополнительные библиотеки с помощью pip команды:

pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2

Мы загрузили образец видео — Изучите азбуку, чтобы показать, как работает загрузка. Идентификатор, фрагмент .title и фрагмент .CategoryID являются обязательными свойствами, все остальные являются необязательными.

Вставка видео: В этом примере показано, как загрузить видео в учетную запись авторизованного пользователя. Загрузка видео регулируется следующими ограничениями:

  1. Файл может принимать максимальный размер 128 МБ
  2. Допустимыми типами MIME мультимедиа являются только видео/*, приложение/октетный поток
# importing necessary libraries
import os
import urllib.request, urllib.parse, urllib.error
import http.client
import urllib.request
import urllib.error
import http.client
import httplib2
import random
import time
import google.oauth2.credentials
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow
from apiclient.http import MediaFileUpload

# The CLIENT_SECRETS_FILE variable
# specifies the name of a file that
# contains client_id and client_secret.
CLIENT_SECRETS_FILE = "client_secret.json"

# This scope allows for full read /
# write access to the authenticated
# user's account and requires requests
# to use an SSL connection.
SCOPES = ['https://www.googleapis.com/auth/youtube.force-ssl']
API_SERVICE_NAME = 'youtube'
API_VERSION = 'v3'

def get_authenticated_service():
flow = InstalledAppFlow.from_client_secrets_file(
					CLIENT_SECRETS_FILE, SCOPES)
					
credentials = flow.run_console()
return build(API_SERVICE_NAME, API_VERSION,
				credentials = credentials)

# Here we are telling HTTP Transport
# Library not to retry the video upload.
httplib2.RETRIES = 1

# MAX_RETRIES specifies the maximum number
# of retries that can done before giving up.
MAX_RETRIES = 10

# Always retry when these exceptions are raised.
RETRIABLE_EXCEPTIONS = (httplib2.HttpLib2Error, IOError,
						http.client.NotConnected,
						http.client.IncompleteRead,
						http.client.ImproperConnectionState,
						http.client.CannotSendRequest,
						http.client.CannotSendHeader,
						http.client.ResponseNotReady,
						http.client.BadStatusLine)

# Always retry when an apiclient.errors.HttpError
# with one of these status codes is raised.
RETRIABLE_STATUS_CODES = [500, 502, 503, 504]

# This method implements an exponential
# backoff strategy to resume a failed upload.
def resumable_upload(request, resource, method):
response = None
error = None
retry = 0

while response is None:
	try:
		
	print("Uploading the file...")
	status, response = request.next_chunk()
	
	if response is not None:
		
		if method == 'insert' and 'id' in response:
			print(response)
		elif method != 'insert' or 'id' not in response:
			print(response)
		else:
			exit("The file upload failed with an\
			unexpected response: % s" % response)
			
	except HttpError as e:
	if e.resp.status in RETRIABLE_STATUS_CODES:
		error = "A retriable HTTP error % d occurred:\n % s"
								% (e.resp.status, e.content)
	else:
		raise
	except RETRIABLE_EXCEPTIONS as e:
		error = "A retriable error occurred: % s" % e

	if error is not None:
		print(error)
	retry += 1
	
	if retry > MAX_RETRIES:
		exit("No longer attempting to retry.")

	max_sleep = 2 ** retry
	sleep_seconds = random.random() * max_sleep
	
	print(("Sleeping % f seconds and then retrying..."
									% sleep_seconds))
	time.sleep(sleep_seconds)
	
def print_response(response):
	print(response)

# Build a resource based on a list of
# properties given as key-value pairs.
# Leave properties with empty values
# out of the inserted resource.
def build_resource(properties):
	
	resource = {}
	for p in properties:
		
		# Given a key like "snippet.title", split into
		# "snippet" and "title", where
		# "snippet" will be an object and "title"
		# will be a property in that object.
		prop_array = p.split('.')
		ref = resource
		for pa in range(0, len(prop_array)):
		is_array = False
		key = prop_array[pa]
	
		# For properties that have array values,
		# convert a name like "snippet.tags[]" to
		# snippet.tags, and set a flag to handle
		# the value as an array.
		if key[-2:] == '[]':
			key = key[0:len(key)-2:]
			is_array = True
	
		if pa == (len(prop_array) - 1):
			
			# Leave properties without values
			# out of inserted resource.
			if properties[p]:
				if is_array:
					ref[key] = properties[p].split(', ')
				else:
					ref[key] = properties[p]
					
		elif key not in ref:
			# For example, the property is "snippet.title",
			# but the resource does not yet have a "snippet"
			# object. Create the snippet object here.
			# Setting "ref = ref[key]" means that in the
			# next time through the "for pa in range ..." loop,
			# we will be setting a property in the
			# resource's "snippet" object.
			ref[key] = {}
			ref = ref[key]
		else:
			# For example, the property is "snippet.description",
			# and the resource already has a "snippet" object.
			ref = ref[key]
	return resource

# Remove keyword arguments that are not set
def remove_empty_kwargs(**kwargs):
	good_kwargs = {}
	
	if kwargs is not None:
		for key, value in list(kwargs.items()):
			if value:
				good_kwargs[key] = value
	return good_kwargs

def videos_insert(client, properties, media_file, **kwargs):
	resource = build_resource(properties)
	kwargs = remove_empty_kwargs(**kwargs)
	request = client.videos().insert(body = resource,
			media_body = MediaFileUpload(media_file,
		chunksize =-1, resumable = True), **kwargs)
	
	
	return resumable_upload(request, 'video', 'insert')


if __name__ == '__main__':
	
	# When running locally, disable OAuthlib's
	# HTTPs verification. When running in production
	# * do not * leave this option enabled.
	os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
	client = get_authenticated_service()
	media_file = 'videoplayback.3gp'
	
	if not os.path.exists(media_file):
		exit('Please specify the complete valid file location.')
	
	videos_insert(client,
		{'snippet.categoryId': '27',
		'snippet.defaultLanguage': '',
		'snippet.description': 'Sample Leran ABC Video',
		'snippet.tags[]': '',
		'snippet.title': 'Sample Test video upload',
		'status.embeddable': '',
		'status.license': '',
		'status.privacyStatus': 'private',
		'status.publicStatsViewable': ''},
		media_file,
		part ='snippet, status')

Выход:

При выполнении кода он запросит код авторизации. Для получения кода вам необходимо перейти по ссылке, указанной на экране командной строки над строкой: Введите код авторизации.

Теперь перейдите по ссылке и скопируйте код авторизации, который вы получите, предоставив разрешение.

Теперь, как вы можете видеть из используемого аккаунта, он показывает, что видео загружено.

Рекомендации: