我正在尝试基于浏览器上传到 YouTube。我正在为 ZF2 使用 PHP、Zend Framework 2 和 ZendGData 客户端库。我已经按照 Google Developers 指南进行了设置,并成功地执行了未经授权的请求 - 即搜索视频。我还能够执行授权请求 - 即从我的 YouTube 帐户中检索我的全名。
当我尝试上传时 - 检索上传令牌时出现错误:
预期响应代码 200,得到 403
此操作需要开发人员密钥
错误 403
我的上传器控制器如下所示。如教程中所述,我已使用https://code.google.com/apis/youtube/dashboard设置了开发人员密钥,并将其包含在我的代码中。还提供了相应的用户/电子邮件和密码。我正在使用 Curl 连接到开发指南中未涵盖的 API,但我认为这不是问题所在。
`
namespace Uploader\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use ZendGData\YouTube;
use ZendGData\ClientLogin;
use Zend\Http\Client\Adapter;
class UploaderController extends AbstractActionController
{
public function indexAction()
{
$adapter = new Adapter\Curl();
$curl = new \ZendGData\HttpClient();
$curl->setAdapter($adapter);
$adapter->setOptions(array(
'curloptions' => array(
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => FALSE,
)
));
$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient = ClientLogin::getHttpClient(
$username = '***********@gmail.com',
$password = '*********',
$service = 'youtube',
$client = $curl,
$source = 'Testing', // a short string identifying your application
$loginToken = null,
$loginCaptcha = null,
$authenticationURL
);
$developerKey = 'AI39si55e**********************************************************************nY9p5NJ8y-8PwS9d8Jw';
$applicationId = 'Testing';
$clientId = "Youtube Tester V1";
$yt = new YouTube($httpClient, $applicationId, $clientId, $developerKey);
$yt->setMajorProtocolVersion(2);
$myVideoEntry = new YouTube\VideoEntry;
$myVideoEntry->setVideoTitle('My Test Movie');
$myVideoEntry->setVideoDescription('My Test Movie');
// The category must be a valid YouTube category!
$myVideoEntry->setVideoCategory('Autos');
// Set keywords. Please note that this must be a comma-separated string
// and that individual keywords cannot contain whitespace
$myVideoEntry->SetVideoTags('cars, funny');
$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$data = array('tokenValue' => $tokenArray['token'], 'postUrl' => $tokenArray['url']);
return new ViewModel( $data );
}
}
`
据我所知,我几乎完全遵循了开发人员指南并拥有开发人员密钥,但仍然出现错误。任何想法可能是什么问题?