先决条件:用于处理视频的 Youtube Data API |组 1
我们最近讨论了视频列表方法的前两种变体,按视频 ID 的视频列表和按多个视频 ID 的视频列表。现在,让我们讨论另外两个变体——
- 视频列表最受欢迎的视频
- 视频列表我喜欢的视频
- 列出最流行的视频:
regionCode
参数说明您要检索视频的国家/地区。videoCategoryId
参数可以设置为检索特定类别中最流行的视频。# import libraries from apiclient.discovery import build import pprint # arguments to be passed to build function DEVELOPER_KEY = "Your_developer_key" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" # creating youtube resource object # for interacting with API youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey = DEVELOPER_KEY) def mostpopular_video_details(): # Call the videos.list method to retrieve video info list_videos_byid = youtube.videos().list( part = "id, snippet, contentDetails, statistics", chart ='mostPopular', regionCode ='IN', maxResults = 2, videoCategoryId ='').execute() # extracting the results from search response results = list_videos_byid.get("items", []) # empty list to store video details videos = [] n = 1 for result in results: videos.append("% s (% s) (% s) (% s) (% s) (% s)" % (n, result["snippet"]["title"], result['snippet']['description'], result["snippet"]["publishedAt"], result['contentDetails'], result["statistics"])) n = n + 1 print ("Videos:\n", "\n".join(videos), "\n") if __name__ == "__main__": mostpopular_video_details()
输出:
- 列出我喜欢的视频:这需要用户授权才能检索用户喜欢的视频。通过将
myRating
参数设置为不喜欢,可以检索不喜欢的视频。myRating
参数指示应该在授权用户的帐户内进行搜索。由于此方法需要用户的身份验证,因此我们将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 consent screen
选项卡。选择一个电子邮件地址,如果尚未设置,请输入产品名称,然后单击保存按钮。 - 在凭据选项卡中,选择创建凭据下拉列表,然后选择
OAuth Client 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: # 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 kwargs.items(): if value: good_kwargs[key] = value return good_kwargs def videos_list_my_liked_videos(client, **kwargs): kwargs = remove_empty_kwargs(**kwargs) response = client.videos().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() videos_list_my_liked_videos(client, part ='snippet, contentDetails, statistics', myRating ='like', maxResults = 2)
输出:
在执行代码时,它会询问授权码。要获取代码,我们需要按照以下行上方的命令提示符屏幕中提到的链接进行操作:输入授权代码。
现在点击链接并复制粘贴通过授予权限获得的授权码。
为方便起见,我们将
maxResults
参数设置为 2。有关完整的参数列表,请参阅 Youtube Data API Documentation-video.list()。
参考: https://developers.google.com/youtube/v3/docs/videos/list