Youtube api播放列表ID

时间:2012-02-20 16:49:33

标签: php api youtube

我正在使用@ http://code.google.com/apis/youtube/2.0/developers_guide_php.html找到的测试代码来创建播放列表:

$newPlaylist = $yt->newPlaylistListEntry();
$newPlaylist->summary = $yt->newDescription()->setText($desc);
$newPlaylist->title = $yt->newTitle()->setText($title);
// post the new playlist
$postLocation = 'http://gdata.youtube.com/feeds/api/users/default/playlists';
try {
  $playlist = $yt->insertEntry($newPlaylist, $postLocation);
  } 
catch (Zend_Gdata_App_Exception $e) {
  echo $e->getMessage();
}

播放列表已创建,但如何获取刚刚创建的播放列表的ID或网址?

3 个答案:

答案 0 :(得分:2)

我有同样的问题。我设法得到了更多,但我仍然无法获得播放列表ID。这是我做的:

而不是:

$playlist = $yt->insertEntry($newPlaylist, $postLocation);

我用过:

$playlist = $yt->insertEntry($newPlaylist, $postLocation, 'Zend_Gdata_YouTube_PlaylistListEntry');

但是当我尝试通过$playlist->getPlaylistID()$playlist->playlistId->text获取ID时,我会得到相同的例外情况:

  

早于2的版本不支持yt:playlistId元素。

即使我之前使用$yt->setMajorProtocolVersion(2);

设置了它

答案 1 :(得分:0)

这是一个完整而彻底的黑客攻击,我遇到了同样的问题,所以我在第229行的Zend / Gdata / YouTube / PlaylistListEntry.php上课了。我注释了if else语句。

 /**
 * Returns the Id relating to the playlist.
 *
 * @throws Zend_Gdata_App_VersionException
 * @return Zend_Gdata_YouTube_Extension_PlaylistId  The id of this playlist.
 */
public function getPlaylistId()
{
    /*if (($this->getMajorProtocolVersion() == null) ||
        ($this->getMajorProtocolVersion() == 1)) {
        require_once 'Zend/Gdata/App/VersionException.php';
        throw new Zend_Gdata_App_VersionException('The yt:playlistId ' .
            'element is not supported in versions earlier than 2.');
    } else {*/
        return $this->_playlistId;
    //}
}

我很乐意有人向我们展示如何以正确的方式解决这个问题,但这就是这样做的

function printPlaylistListEntry($playlistListEntry, $showPlaylistContents = false)
    {

      $this->yt->setMajorProtocolVersion(2);
      echo '<br>Title: ' . $playlistListEntry->title->text . "\n";
      echo '<br>Description: ' . $playlistListEntry->description->text . "\n";
      echo '<br>playlistId: ' . $playlistListEntry->playlistId->text . "\n";

...(来自youtube v2 php api)。

将返回playlistid。

标题: therighttitle

描述: therightdescription

playlistId: therightplaylistId

编辑:我认为这可能是一个更好的解决方案:

if ($this->getMajorProtocolVersion() < 2) {
        require_once 'Zend/Gdata/App/VersionException.php';
        throw new Zend_Gdata_App_VersionException('The yt:playlistId ' .
            'element is not supported in versions earlier than 2.');
    } else {

        return $this->_playlistId;
    }

用这个替换getPlaylistId()函数,遵循前面的getDescription函数的逻辑,并且它不那么hacky。再次完全接受批评为什么这对于zend人来说是好主意还是不是一个好主意。

答案 2 :(得分:0)

你不需要任何特殊的黑客来完成这项工作。您只需要显式设置$ playlist变量的协议版本以及$ yt变量。如您所述,请先设置$ yt的主要协议版本:

$yt->setMajorProtocolVersion(2);

然后在初始化$ playlist之后,同时设置协议:

$playlist = $yt->insertEntry($newPlaylist, $postLocation, 'Zend_Gdata_YouTube_PlaylistListEntry');
$playlist->setMajorProtocolVersion(2);

一旦你这样做,你应该能够得到你的播放列表ID:)

$playlist_id = $playlist->getPlaylistID();