YouTube API 3 获取特定用户的最新视频
YouTube API 3 GET last videos from specific User
我需要帮助来使用新 API 版本从特定用户那里检索 YouTube 视频。
我在 console.developers.google.com
上创建了 YouTube 数据 API
OAuth 和 Public API 浏览器访问。
在我使用这段代码检索最新的 6 个视频之前:
$feedURL = 'http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?max-results=6';
$sxml = simplexml_load_file($feedURL);
foreach ($sxml->entry as $entry) {
$watch = (string)$media->group->player->attributes()->url;
}
如何使用 API 3 更新此代码?
我一直在 .net 中做类似的事情,它不像以前那么简单。
现在需要几个额外的步骤:
第 1 步:您需要通过以下方式获取用户的 channelId:
https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername={0}&key={1} - 其中 {0} 是用户名,密钥是您 API 密钥
第 2 步:您可以通过以下方式获取视频列表:
https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId={0}&key={1}
第 3 步:
https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,player&id={0}&key={1} - 其中 id 是从第 2 步返回的视频 ID。
希望对您有所帮助。
这实际上是一个两步过程。
https://developers.google.com/youtube/v3/guides/implementation/videos#videos-retrieve-uploads
第 1 步:检索频道上传视频的播放列表 ID
第 2 步:检索上传的视频列表
您可以链接这些请求。所以第二个请求可以是 1.requests 的回调函数。
更新答案 - 2018
<?php
/**
* Gets the latest YouTube channel video.
*/
class Youtube
{
/**
* Channel ID or Channel User.
*
* @access private
* @var string
*/
private $channel = "";
/**
* Class constructor.
*
* @param string $channel Channel ID or Channel User.
* @access public
*/
public function __construct($channel)
{
$this->channel = $channel;
}
/**
* Gets the video.
*
* @access public
* @return array
*/
public function video() : array
{
return array( 'title' => $this->getVideo('title'), 'id' => $this->getVideo('id') );
}
/**
* Gets the last video.
*
* @param string $property 'title' or 'id'
* @access private
* @return string
*/
private function getVideo($property) : string
{
$xml = null;
if ( @fopen('https://www.youtube.com/feeds/videos.xml?user=' . $this->channel, 'r') !== false ) {
$xml = simplexml_load_file('https://www.youtube.com/feeds/videos.xml?user=' . $this->channel); // Channel User
} elseif ( @fopen('https://www.youtube.com/feeds/videos.xml?channel_id=' . $this->channel, 'r') !== false ) {
$xml = simplexml_load_file('https://www.youtube.com/feeds/videos.xml?channel_id=' . $this->channel); // Channel ID
}
if ($xml !== null) {
$namespaces = $xml->getNamespaces(true);
$video = $xml->entry[0]->children($namespaces['yt']);
if ($property === 'title') {
return $xml->entry[0]->title;
} elseif ($property === 'id') {
return $video->videoId;
}
} else {
return "";
}
}
}
$channel = 'UChsXToK8E4U8lqXaabPwlBw'; // Channel ID or Channel User.
$Youtube = new Youtube($channel);
$video = $Youtube->video();
?>
<h1><?php echo $video['title']; ?></h1>
<iframe width="560" height="315" src="https://www.youtube.com/embed/<?php echo $video['id']; ?>?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
我需要帮助来使用新 API 版本从特定用户那里检索 YouTube 视频。
我在 console.developers.google.com
上创建了 YouTube 数据 APIOAuth 和 Public API 浏览器访问。
在我使用这段代码检索最新的 6 个视频之前:
$feedURL = 'http://gdata.youtube.com/feeds/api/users/USERNAME/uploads?max-results=6';
$sxml = simplexml_load_file($feedURL);
foreach ($sxml->entry as $entry) {
$watch = (string)$media->group->player->attributes()->url;
}
如何使用 API 3 更新此代码?
我一直在 .net 中做类似的事情,它不像以前那么简单。
现在需要几个额外的步骤:
第 1 步:您需要通过以下方式获取用户的 channelId:
https://www.googleapis.com/youtube/v3/channels?part=snippet&forUsername={0}&key={1} - 其中 {0} 是用户名,密钥是您 API 密钥
第 2 步:您可以通过以下方式获取视频列表:
https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId={0}&key={1}
第 3 步:
https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,player&id={0}&key={1} - 其中 id 是从第 2 步返回的视频 ID。
希望对您有所帮助。
这实际上是一个两步过程。
https://developers.google.com/youtube/v3/guides/implementation/videos#videos-retrieve-uploads
第 1 步:检索频道上传视频的播放列表 ID
第 2 步:检索上传的视频列表
您可以链接这些请求。所以第二个请求可以是 1.requests 的回调函数。
更新答案 - 2018
<?php
/**
* Gets the latest YouTube channel video.
*/
class Youtube
{
/**
* Channel ID or Channel User.
*
* @access private
* @var string
*/
private $channel = "";
/**
* Class constructor.
*
* @param string $channel Channel ID or Channel User.
* @access public
*/
public function __construct($channel)
{
$this->channel = $channel;
}
/**
* Gets the video.
*
* @access public
* @return array
*/
public function video() : array
{
return array( 'title' => $this->getVideo('title'), 'id' => $this->getVideo('id') );
}
/**
* Gets the last video.
*
* @param string $property 'title' or 'id'
* @access private
* @return string
*/
private function getVideo($property) : string
{
$xml = null;
if ( @fopen('https://www.youtube.com/feeds/videos.xml?user=' . $this->channel, 'r') !== false ) {
$xml = simplexml_load_file('https://www.youtube.com/feeds/videos.xml?user=' . $this->channel); // Channel User
} elseif ( @fopen('https://www.youtube.com/feeds/videos.xml?channel_id=' . $this->channel, 'r') !== false ) {
$xml = simplexml_load_file('https://www.youtube.com/feeds/videos.xml?channel_id=' . $this->channel); // Channel ID
}
if ($xml !== null) {
$namespaces = $xml->getNamespaces(true);
$video = $xml->entry[0]->children($namespaces['yt']);
if ($property === 'title') {
return $xml->entry[0]->title;
} elseif ($property === 'id') {
return $video->videoId;
}
} else {
return "";
}
}
}
$channel = 'UChsXToK8E4U8lqXaabPwlBw'; // Channel ID or Channel User.
$Youtube = new Youtube($channel);
$video = $Youtube->video();
?>
<h1><?php echo $video['title']; ?></h1>
<iframe width="560" height="315" src="https://www.youtube.com/embed/<?php echo $video['id']; ?>?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>