Google 提供了大量 API 供开发人员选择。 Google 提供的每项服务都有一个关联的 API。作为其中之一,Youtube Data API 使用起来非常简单,提供的功能如下:
- 搜索视频
- 处理视频,如检索有关视频的信息、插入视频、删除视频等。
- 处理订阅,例如列出所有订阅、插入或删除订阅。
- 检索有关评论的信息,例如对 parentId 等标识的特定评论的回复。
在本文中,我们将讨论 Google Youtube API。请按照以下步骤启用 API 并开始使用它。
- 创建新项目、启用 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 Key和OAuth 。 OAuth 以 .json 文件的形式为您提供客户端 ID 和密钥。 OAuth 通常用于需要授权的情况,例如检索用户喜欢的视频。因此,对于其他不需要授权的情况,例如使用关键字搜索视频或搜索相关视频等,我们将使用 API 密钥。
- 安装:可以使用简单的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