php - 实施 Google API 示例时,无法通过 OAuth 2.0
问题描述
我正在尝试使用PlaylistItems: insert
YouTube 数据 API 示例通过 PHP 以编程方式将 YouTube 视频添加到播放列表。
我将示例托管https://[mydomain].com/custom/yt/insert.php
在该目录中并在该目录中运行提供的 composer 命令,以按照说明安装 api 客户端。
https://[mydomain].com/custom/yt/insert.php
我在 API 控制台中将 OAuth 重定向地址设置为并下载了secrets.json
文件并将其托管在同一目录中。
当我在浏览器中运行 insert.php 脚本时,我被带到一个页面,其中包含以下内容:
Open the following link in your browser: https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=194988007367-cnn3jdo0c4j6njsvorpcv1s5jdhej6iu.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fdjpanaflex.com%2Fcustom%2Fyt%2Finsert.php&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&approval_prompt=auto Enter verification code:
没有提供验证码,但是当我访问该网址时,我会完成身份验证过程,并且似乎成功完成了它。
但是,未执行将视频添加到播放列表的 API 调用:
playlistItemsInsert($service,
array('snippet.playlistId' => '[PLAYLIST ID OMITTED]',
'snippet.resourceId.kind' => 'youtube#video',
'snippet.resourceId.videoId' => '[VIDEO ID OMITTED]',
'snippet.position' => ''),
'snippet',
array('onBehalfOfContentOwner' => ''));
相反,我返回到提示我完成授权过程的页面。
为什么我的 API 调用没有进行?我的 OAuth 2.0 身份验证没有被存储吗?如果是这样,我该如何纠正?
解决方案
事实证明,Google 的示例被设计为从 CLI 运行,而我的基于浏览器的实现没有提供提示用户输入的方法,该方法getClient()
由从STDIN
.
由于身份验证代码是作为$authUrl
第一次运行脚本时打印到屏幕的变量中的参数提供的,因此我能够通过替换来解决我的问题
$authCode = trim(fgets(STDIN));
和:
$authCode = $_GET['code'];
推荐阅读
- javascript - 如果未使用速记未定义,则将变量添加到对象
- html - 如何在android中准确使用链接标签中的href属性?
- android - 如何使用改造在 Android 适配器类中创建多个函数
- php - 希望在方法 php 中返回一个数组
- text - 三.js/为什么文字纹理看起来这么惨?
- regex - 如何从 Postgres SELECT 将冒号插入 Mac 地址而不使用任何
- excel - 使用 worksheets.range 移动数据
- python - 线性回归 - 使用梯度方法的岭回归查找系数项的以下实现是否正确?
- c - 如何在 macOS 上使用 gcc 生成包含 C 源的程序集?
- php - 引导手风琴在 laravel 中无法动态正常工作