【问题标题】:Yii + Zend gdata. Youtube uploadYii + Zend gdata。优酷上传
【发布时间】:2012-07-01 16:25:40
【问题描述】:

我想用下一个方式上传视频:

  1. 我只是将文件上传到服务器(像往常一样)
  2. 我的服务器端 Yii 应用程序从 YouTube 上的一个特殊帐户获取该视频并将其上传到 Youtube 上

我有什么:

  • 我的 YouTube (google) 帐户名称和电子邮件。 “姓名”或“姓名@gmail.com”
  • 我的密码
  • 我在 Google 的“产品信息中心”中找到的开发者密钥
  • 应用程序的名称,命名为“myapp”:

产品仪表板:myapp

所以,我在 google 中阅读了一些文档,并决定对我来说最好的方法是使用 ClientLogin 身份验证类型,因为我只有一个帐户可以使用,并且我拥有所有必要的数据。我找到了 ZendFramework 的 GData 示例并将其导入到我的 Yii 应用程序中。

我特别简化了代码,只是为了从 /upload 目录上传一个视频来测试它是否有效。我希望在我上传的 YT 帐户中找到一个视频。当然没有视频,我在这里:-) 完整的动作代码如下:

Yii::import('application.vendors.*');
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

$yt_user = 'myYTname';
$yt_pass = 'myYTpass';
$yt_source = 'myapp';
$yt_api_key = 'veryVERYlongKEYhere';

$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
    $username = $yt_user,
    $password = $yt_pass,
    $service = 'youtube',
    $client = null,
    $source = $yt_source,
    $loginToken = null,
    $loginCaptcha = null,
    $authenticationURL
);
$yt = new Zend_Gdata_YouTube($httpClient, $yt_source, null, $yt_api_key);
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$filesource = $yt->newMediaFileSource(Yii::getpathOfAlias('webroot').'/upload/videos/video.mp4');
$filesource->setContentType('video/mp4');
$filesource->setSlug('video.mp4');
$myVideoEntry->setMediaSource($filesource);
$myVideoEntry->setVideoTitle('My Test Movie');
$myVideoEntry->setVideoDescription('My Test Movie description');
$myVideoEntry->setVideoCategory('Autos');
$myVideoEntry->SetVideoTags('cars, funny');
$myVideoEntry->setVideoDeveloperTags(array('mydevtag', 'anotherdevtag'));

$uploadUrl = "http://uploads.gdata.youtube.com/feeds/api/users/{$yt_user}/uploads";
try {
    $newEntry = $yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry');
} catch (Zend_Gdata_App_HttpException $httpException) {
    echo $httpException->getRawResponseBody();
} catch (Zend_Gdata_App_Exception $e) {
    echo $e->getMessage();
}

如您所见,官方示例中有很多默认代码。但它不起作用。没有人 echo 向我显示信息。但是当我删除try-catch的时候,报错了:

Zend_Gdata_App_HttpException
Read timed out after 10 seconds 

【问题讨论】:

  • UPD 1:我通过在 ZendHTTP 类中设置新的超时参数来删除超时异常。所以现在我的应用程序页面只是加载加载加载,然后显示 nithong。无异常信息等
  • UPD 2:我尝试上传的视频是 300 Kb 大小,所以即使 10 秒也不需要传输数据
  • UPD 3:我用 XDebug 调试了我的应用程序,发现仍然存在愚蠢的超时异常。上传 300Kb 文件需要 100 秒超时...出了点问题,但我不明白是什么...

标签: yii youtube-api zend-gdata


【解决方案1】:

所以,这个问题我自己解决了:) 首先:不要尝试从本地主机上传! 然后在我的情况下,我得到了一个错误,我没有说我的开发密钥!因此,如果您遇到同样的错误,请尝试更改:

    $newEntry = $yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry');

通过添加第 4 个参数 - 额外的标题:

$yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry', array(
    'X-GData-Key' => 'key=yourBIGbigBIGdeveloperKEYhere'
));

祝你好运,享受 youtube API 的乐趣!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多