📜  Youtube 数据 API |组 1

📅  最后修改于: 2021-10-19 06:09:30             🧑  作者: Mango

Google 提供了大量 API 供开发人员选择。 Google 提供的每项服务都有一个关联的 API。作为其中之一,Youtube Data API 使用起来非常简单,提供的功能如下:

  • 搜索视频
  • 处理视频,如检索有关视频的信息、插入视频、删除视频等。
  • 处理订阅,例如列出所有订阅、插入或删除订阅。
  • 检索有关评论的信息,例如对 parentId 等标识的特定评论的回复。

在本文中,我们将讨论 Google Youtube API。请按照以下步骤启用 API 并开始使用它。

  1. 创建新项目、启用 API 和创建凭据:在此步骤中,我们将创建一个项目并启用 API。
    • 转到 Google Developers Console,然后单击页面右上角的登录。使用有效 Google 帐户的凭据登录。如果您没有 google 帐户,请先设置一个帐户,然后使用详细信息在 Google Developers 主页上登录。
    • 现在导航到开发人员仪表板并创建一个新项目。
    • 单击启用 API 选项
    • 在搜索字段中,搜索Youtube Data API并选择下拉列表中的Youtube Data API选项。

    • 您将被重定向到一个显示有关Youtube Data API信息的屏幕,以及两个选项: ENABLE 和 TRY API
    • 单击启用选项以开始使用 API。
    • APIs & Services下的侧边栏中,选择Credentials
    • 凭据选项卡中,选择创建凭据下拉列表,然后选择API 密钥
      有两种类型的凭据: API KeyOAuth 。 OAuth 以 .json 文件的形式为您提供客户端 ID 和密钥。 OAuth 通常用于需要授权的情况,例如检索用户喜欢的视频。因此,对于其他不需要授权的情况,例如使用关键字搜索视频或搜索相关视频等,我们将使用 API 密钥。
  2. 安装:可以使用简单的pip命令安装用于Python 的Google API 客户端:
    pip install --upgrade google-api-python-client

让我们从搜索函数开始。

搜索方法有五种变体 – 按关键字搜索、按位置搜索、搜索实时事件、搜索相关视频和搜索我的视频。让我们介绍前两种类型的搜索方法。

按关键字搜索函数:这将根据搜索查询返回视频、频道和播放列表的列表。默认情况下,如果跳过type 参数,方法将显示视频、频道和播放列表。 max results参数的默认值为 5。本示例检索与关键字“Geeksforgeeks”相关联的结果。

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_keyword(query, max_results):
       
    # calling the search.list method to
    # retrieve youtube search results
    search_keyword = youtube_object.search().list(q = query, part = "id, snippet",
                                               maxResults = max_results).execute()
       
    # extracting the results from search response
    results = search_keyword.get("items", [])
   
    # empty list to store video, 
    # channel, playlist metadata
    videos = []
    playlists = []
    channels = []
       
    # 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']))
  
        # playlist result object
        elif result['id']['kind'] == "youtube# playlist":
            playlists.append("% s (% s) (% s) (% s)" % (result["snippet"]["title"],
                                 result["id"]["playlistId"],
                                 result['snippet']['description'],
                                 result['snippet']['thumbnails']['default']['url']))
  
        # channel result object
        elif result['id']['kind'] == "youtube# channel":
            channels.append("% s (% s) (% s) (% s)" % (result["snippet"]["title"],
                                   result["id"]["channelId"], 
                                   result['snippet']['description'], 
                                   result['snippet']['thumbnails']['default']['url']))
           
    print("Videos:\n", "\n".join(videos), "\n")
    print("Channels:\n", "\n".join(channels), "\n")
    print("Playlists:\n", "\n".join(playlists), "\n")
   
if __name__ == "__main__":
    youtube_search_keyword('Geeksforgeeks', max_results = 10)
     

输出:
按位置搜索函数:此示例检索与关键字“Geeksforgeeks”相关联的结果。该请求检索locationRadius参数值指定的点的 100km(由locationRadius参数值指定)内的前 5 个结果。

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 = 5):
       
    # calling the search.list method to retrieve youtube search results
    search_location = youtube_object.search().list(q = query, type ='video',
                                           location ='20.593683, 78.962883',
                              locationRadius ='100km', 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
        videos.append(result["id"]["videoId"])
    video_ids = ", ".join(videos)
    video_response = youtube_object.videos().list(id = video_ids, part ='snippet,
                                                     recordingDetails').execute()
           
    search_videos = []
    for video_result in video_response.get("items", []):
        search_videos.append("% s, (% s, % s)" %(video_result["snippet"]["title"],
                         video_result["recordingDetails"]["location"]["latitude"],
                       video_result["recordingDetails"]["location"]["longitude"]))
  
    print ("Videos:\n", "\n".join(search_videos), "\n")
    
if __name__ == "__main__":
    youtube_search_location('Geeksforgeeks', max_results = 5)

输出:

注意: location参数是一个字符串,用于指定地理位置的纬度/经度坐标。

  • location 参数标识区域中心的点。
  • locationRadius 参数指定与视频关联的位置与该点之间的最大距离,以便视频仍包含在搜索结果中。

type参数只能是此搜索方法类型中的视频。在此示例中,我们使用了印度德里的纬度/经度坐标。

注意:我们在上面的例子中只使用了有限的参数。还有许多其他参数可以设置,如果未设置,则可以从 Youtube 搜索列表文档中找到它们采用的默认值。请参阅文档以全面了解可用参数。

参考资料: https : //developers.google.com/youtube/v3/docs/search/list