【问题标题】:YouTube PHP API - Getting status of previously uploaded video?YouTube PHP API - 获取先前上传视频的状态?
【发布时间】:2026-01-22 03:10:01
【问题描述】:

刚刚开始研究 YouTube PHP API 并让基于浏览器的 Zend 上传脚本正常工作。但是,我找不到任何关于如何在上传视频后检索视频状态的文档。我需要这个的主要原因是错误处理 - 我需要能够知道视频是否被 YouTube 批准,因为从技术上讲,有人可以上传图像或文件太大。我需要知道视频已获得批准,以便我知道在最终用户返回网站时向他们显示什么消息(即“您的视频正在直播”或“视频上传失败”)。

YouTube PHP 基于浏览器的上传即使格式或大小不正确也会返回200 的URL 参数状态,这当然没有帮助。关于如何从 YT 对象获取此信息的任何想法?

总而言之,当用户返回网站时,我希望能够根据他们的特定视频 ID 创建一个 YT 对象,并希望能够确认它没有被拒绝。我正在使用 ClientLogin 来启动 YouTube obj:

$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
              $username = 'myuser@gmail.com',
              $password = 'mypassword',
              $service = 'youtube',
              $client = null,
              $source = 'MySource', // a short string identifying your application
              $loginToken = null,
              $loginCaptcha = null,
              $authenticationURL);

有什么想法吗?

【问题讨论】:

  • 为什么在将文件发送到 YouTube 之前无法检查用户是否上传了太大的文件?
  • 因为这不是我要问的问题:)
  • 是的,不是这样。但是仅仅检查文件是否太大会不会更容易?
  • 这可能在一个实例中起作用,但我更关注错误处理。 YouTube 将上传任何文件并返回 200 状态,无论它是电影、.jpg、word doc 等。我仍然需要能够检查特定的电影 ID 以查看状态,然后才能显示信息到用户。是的,你也可以检查这些,但我希望 YouTube 的 API 有内置的东西。
  • 好的,那么您可能需要等待某人回答。我很抱歉,但不知道答案 =(

标签: php youtube youtube-api


【解决方案1】:

如果有的话,你有 CallToken 吗?很简单。

对于这个例子,我使用 Zend_Gdata_Youtube 和 Zend AuthSub。

上传视频时,您有一个 CallToken,使用此呼叫令牌,您可以访问视频的状态。

$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
          $username = 'myuser@gmail.com',
          $password = 'mypassword',
          $service = 'youtube',
          $client = null,
          $source = 'MySource', // a short string identifying your application
          $loginToken = null,
          $loginCaptcha = null,
          $authenticationURL);

$youtube = new Zend_Gdata_YouTube( $httpClient, '', NULL, YOUTUBE_DEVELOPER_KEY );

$youtubeEntry = $youtube->getFullVideoEntry( 'ID_OF_YOUTUBE_MOVIE' ); 
// its the 11 digit id all youtube video's have

在 $youtubeEntry 中显示了有关视频的所有数据

$state = $youtubeEntry->getVideoState();

如果 state 为 null,则您的视频可用,否则将 state 设为这样的字符串。

(string) $state->getName();

大约有 4 个重要的州名。 (处理、拒绝、失败、受限)

【讨论】:

  • 不确定是否可以在这里使用调用令牌;我允许用户通过网络上传发布到一个特定的 YouTube 频道帐户。没有使用登录或用户身份验证,只是上传到频道。想法?
  • 如果有帮助,我正在使用 ClientLogin 来启动对象。我已经在上面的原始问题中添加了代码。
  • 好的,那么你就快到了。你有一个 httpclient,所以现在很容易获得你的视频状态。我已经在上面进行了编辑,希望对您有所帮助。
  • 你还在编辑上面的代码。现在完成了:D
  • 好吧,你把我弄丢了。在您的示例中,没有地方可以传入我要检查其状态的视频的 ID。请记住,此检查会在用户返回网站并且视频已提交到 YouTube 时进行。
【解决方案2】:

哇,经过几天的搜索和拼凑代码,终于找到了答案。创建$yt 对象后,使用以下命令检查状态:

$yt->setMajorProtocolVersion(2);
$youtubeEntry = $yt->getVideoEntry('YOUR_YOUTUBE_VID_ID', null, true);

if ($youtubeEntry->getControl()){
    $control = $youtubeEntry->getControl();
    $state = $control->getState()->getName();
}

如果视频因任何原因未被批准,则回显$state 会显示字符串'failed'。否则它是空的,这意味着它已被批准并且可以继续使用(猜测其他状态名称将是:处理、拒绝、失败、受限,正如 Mient-jan Stelling 上面所建议的)。

对于第一次使用 YouTube API 的人来说,这个答案是多么困难啊。解决了! (拍拍自己的背)

【讨论】: