gpt4 book ai didi

python - Youtube Data API 不断请求授权

转载 作者:行者123 更新时间:2023-12-01 17:35:02 24 4
gpt4 key购买 nike

我正在尝试制作一个简单的 python 程序,它使用 Youtube Data API 来检索基于 Youtube 搜索查询的结果。

我已经创建了我的 OAuth 凭据并有一个 client_secrets JSON。每次我运行我的 python 程序时,它都会要求我获取授权 key ,以便我可以进行查询。我必须打开 chrome 并访问 API 提供给我的 URL,然后登录我的 Google 帐户并粘贴 key 。

有人可以演示我如何使这个过程自动化吗?我已经在网上和 stackoverflow 上阅读过我需要一个刷新 token ,或者以某种方式存储一个,这样它就不会每次都提示我进行授权。

我的代码(从 https://developers.google.com/youtube/v3/docs/search/list 复制):

# -*- coding: utf-8 -*-

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
# the OAuth 2.0 information for this application, including its client_id and
# client_secret.
CLIENT_SECRETS_FILE = "client_secret.json"

# This OAuth 2.0 access 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.iteritems():
if value:
good_kwargs[key] = value
return good_kwargs

def search_list_by_keyword(client, **kwargs):
# See full sample for function
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_by_keyword(client,
part='snippet',
maxResults=25,
q='surfing',
type='')

最佳答案

我只是遇到了同样的问题。在搜索“YouTube Data Api v3”文档后,我发现了这一点:

If you are using the installed app flow, authorization credentials are not stored in this sample code, so subsequent executions will prompt for reauthorization.



所以我想你应该改用“Web Server App”流程。没有办法解决这个问题。

关于python - Youtube Data API 不断请求授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52167804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com