先决条件:Youtube 数据 API |组 1
在上一篇文章中,我们讨论了搜索方法的前两种变体。现在让我们讨论剩下的三个 – 搜索实时事件、搜索相关视频和搜索我的视频。
按现场活动搜索:
给定示例检索与查询字符串Python Programming 关联的前 5 个直播。 type parameter
必须设置为值 video only。
eventType
参数可以从给定的一组值中获取任何值 – 已完成(这将仅包括已完成的广播)、现场(这将仅包括活动的广播)、即将到来(这将仅包括即将到来的广播)。
from apiclient.discovery import build
# Arguments that need to passed to the build function
DEVELOPER_KEY = "Your_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_search_location(query, max_results = 2):
# calling the search.list method to
# retrieve youtube search results
search_location = youtube_object.search().list(q = query,
type ='video', eventType ='live',
part = "id, snippet",
maxResults = max_results).execute()
# extracting the results from search response
results = search_location.get("items", [])
# empty list to store video metadata
videos = []
# extracting required info
# from each result object
for result in results:
# video result object
if result['id']['kind'] == "youtube# video":
videos.append("% s (% s) (% s) (% s)" % (result["snippet"]["title"],
result["id"]["videoId"], result['snippet']['description'],
result['snippet']['thumbnails']['default']['url']))
print ("Videos:\n", "\n".join(videos), "\n")
if __name__ == "__main__":
youtube_search_location('Social Media', max_results = 2)
输出:
按相关视频搜索:这将有助于检索与参数列表中视频 ID 指定的视频相关的视频。 type parameter
只能取值 video。
from apiclient.discovery import build
# Arguments that need to passed
# to the build function
DEVELOPER_KEY = "Your_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_search_relatedto(max_results = 2):
# calling the search.list method to
# retrieve youtube search results
search_relatedto = youtube_object.search().list(type ='video',
relatedToVideoId ='X06Vml-8X8A',
part = "id, snippet",
maxResults = max_results).execute()
# extracting the results from search response
results = search_relatedto.get("items", [])
# empty list to store video metadata
videos = []
# extracting required info from each result object
for result in results:
# video result object
if result['id']['kind'] == "youtube# video":
videos.append("% s (% s) (% s) (% s)" % (result["snippet"]["title"],
result["id"]["videoId"],
result['snippet']['description'],
result['snippet']['thumbnails']['default']['url']))
print ("Videos:\n", "\n".join(videos), "\n")
if __name__ == "__main__":
youtube_search_relatedto(max_results = 2)
输出:
搜索我的视频:本示例搜索授权用户帐户中与关键字“Geeksforgeeks”匹配的视频。 forMine
参数指示应该在授权用户的帐户内进行搜索。 type
参数也必须设置为 video。由于此方法需要用户的身份验证,因此我们将为此示例创建OAuth
类型的凭据。按照以下步骤生成客户端 ID 和密钥。
- 转到 Google Google Developers Console,然后单击页面右上角的登录。使用有效 Google 帐户的凭据登录。如果您没有 google 帐户,请先设置一个帐户,然后使用详细信息在 Google Developers 主页上登录。
- 现在导航到开发人员仪表板并创建一个新项目。
- 单击启用 API 选项。
- 在搜索字段中,搜索Youtube Data API并选择下拉列表中的 Youtube Data API 选项。
- 您将被重定向到显示有关 Youtube Data API 信息的屏幕,以及两个选项: ENABLE 和 TRY API 。
- 单击启用选项以开始使用 API。
- 在 APIs & Services 下的侧边栏中,选择Credentials 。
- 在页面顶部,选择OAuth 同意屏幕选项卡。选择一个电子邮件地址,如果尚未设置,请输入产品名称,然后单击保存按钮。
- 在凭据选项卡中,选择创建凭据下拉列表,然后选择OAuth 客户端 ID 。 OAuth 通常用于需要授权的情况,例如检索用户喜欢的视频。
- 选择其他应用程序类型,输入名称“YouTube Data API Myvideos”,然后单击“创建”按钮。
- 单击确定。
- 单击客户端 ID 右侧的下载按钮以下载 JSON 文件。
- 将文件保存并重命名为 client_secret.json 并将其移动到工作目录。
使用pip命令安装其他库:
pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
# importing libraries
import os
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
# 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)
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:
ref[key] = {}
ref = ref[key]
else:
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 kwargs.items():
if value:
good_kwargs[key] = value
return good_kwargs
def search_list_forMine(client, **kwargs):
kwargs = remove_empty_kwargs(**kwargs)
response = client.search().list(**kwargs).execute()
return print_response(response)
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()
search_list_forMine(client,
part ='snippet',
maxResults = 5,
forMine = True,
q ='Geeksforgeeks',
type ='video')
输出:
在执行代码时,它会要求提供授权码。要获取代码,您需要按照以下行上方的命令提示符屏幕中提到的链接进行操作:输入授权代码。
现在点击链接并复制粘贴您将通过授予权限获得的授权代码。
由于我们在此帐户中没有任何上传的视频,因此总结果值为 0。输出屏幕如下所示:
请参阅 Youtube 数据 API 文档 (search.list()) 以获取可能的完整参数列表。
参考:
- https://developers.google.com/youtube/v3/docs/
- https://developers.google.com/youtube/v3/docs/search/list