首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Youtube数据API v.3 -全自动oAuth流(Python)?

Youtube数据API v.3 -全自动oAuth流(Python)?
EN

Stack Overflow用户
提问于 2019-09-24 04:31:59
回答 3查看 3.1K关注 0票数 4

我一直在探索YouTube数据API。我的项目的前提很简单:使用API、身份验证(是的,我拥有帐户的凭据),然后简单地检索所有视频的列表,包括公共视频和私有视频。

我已经成功地完成了这一点,除了完全自动化的部分。我使用了来自不同来源的代码,当我在命令行上运行它时,它为我提供了一个在浏览器中使用的链接,以便进行授权。

看起来是这样的:

请访问此URL以授权此应用程序:https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=7932902759886-cb8ai84grcqshe24nn459ka46uh45ssj.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&state=zNVvgEyO47nmacvdEEAhDsQipY194k&prompt=consent&access_type=offline&code_challenge=aF7uTCghjwgwjg49o3fgiIU-_ryK19rDeX4l1uzr37w&code_challenge_method=S256输入授权代码:

……

下面是我的python代码片段:

代码语言:javascript
复制
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
...
...

# Get credentials and create an API client
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
    client_secrets_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(
    api_service_name, api_version, credentials=credentials)
## MAKE youtube SEARCH REQUEST
last_date = '2018-10-01T00:00:00Z'
request = youtube.search().list(
    part="snippet",
    forMine=True,
    maxResults=50,
    order="date",
    type="video"
)
all_items = []
response = request.execute()

我在这里的问题是:是否可以以编程方式执行授权,以便应用程序可以独立运行,而不必等待用户操作(从CMD字面上复制URL、访问获取令牌以及复制和粘贴令牌)?我想安排这一点,因此希望它在没有人为干预的情况下运行和验证。这有可能吗?如果是这样的话,能给我指出一些有用的例子和/或其他资源来帮助我达到这个目标吗?谢谢百万,

EN

Stack Overflow用户

发布于 2020-02-27 02:32:02

来自Credentialscredentials = flow.run_console()实例具有内置的刷新令牌的功能。如果需要,它将在执行请求时刷新令牌。

因此,您可以将credentials对象保存到泡菜中,并在需要时读取它。

对Google示例代码做一些修改:

代码语言:javascript
复制
def get_authenticated_service():
    if os.path.exists(CREDENTIALS_PICKLE_FILE):
        with open(CREDENTIALS_PICKLE_FILE, 'rb') as f:
            credentials = pickle.load(f)
    else:
        flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
        credentials = flow.run_console()
        with open(CREDENTIALS_PICKLE_FILE, 'wb') as f:
            pickle.dump(credentials, f)
    return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
票数 5
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58073119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档