📜  Youtube 数据 API |组 2

📅  最后修改于: 2021-10-22 04:24:33             🧑  作者: Mango

先决条件: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 和密钥。

  1. 转到 Google Google Developers Console,然后单击页面右上角的登录。使用有效 Google 帐户的凭据登录。如果您没有 google 帐户,请先设置一个帐户,然后使用详细信息在 Google Developers 主页上登录。
  2. 现在导航到开发人员仪表板并创建一个新项目。
  3. 单击启用 API 选项
  4. 在搜索字段中,搜索Youtube Data API并选择下拉列表中的 Youtube Data API 选项。
  5. 您将被重定向到显示有关 Youtube Data API 信息的屏幕,以及两个选项: ENABLE 和 TRY API
  6. 单击启用选项以开始使用 API。
  7. 在 APIs & Services 下的侧边栏中,选择Credentials
  8. 在页面顶部,选择OAuth 同意屏幕选项卡。选择一个电子邮件地址,如果尚未设置,请输入产品名称,然后单击保存按钮。
  9. 凭据选项卡中,选择创建凭据下拉列表,然后选择OAuth 客户端 ID 。 OAuth 通常用于需要授权的情况,例如检索用户喜欢的视频。
  10. 选择其他应用程序类型,输入名称“YouTube Data API Myvideos”,然后单击“创建”按钮。
  11. 单击确定。
  12. 单击客户端 ID 右侧的下载按钮以下载 JSON 文件。
  13. 将文件保存并重命名为 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()) 以获取可能的完整参数列表。

参考:

  1. https://developers.google.com/youtube/v3/docs/
  2. https://developers.google.com/youtube/v3/docs/search/list