вот быстрый грязный способ сделать это, не касаясь API вообще.
Я не предполагаю, что это лучший метод или что-то в этом роде, и я уверен, что есть более разумные способы, но он определенно работает с текущей службой каналов Youtube.
Мое решение - PHP с использованием компонента Zend_Feed_Reader из Zend Framework, если вам нужна рука, чтобы настроить это, если вы не знакомы с ним, дайте мне знать.
По сути, вы можете скачать версию 1.11 с Zend.com здесь и затем убедиться, что файлы фреймворка доступны на вашем пути включения PHP.
Если вы уже используете Zend Framework в шаблоне MVC, вы можете сделать это в выбранном вами действии контроллера:
$channel = 'Blanktv'; //change this to your channel name
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads';
$feed = Zend_Feed_Reader::import($url);
$this->view->feed = $feed;
Тогда вы можете сделать это, по вашему мнению:
<h1>Latest Video</h1>
<div>
<?php
$i=0;
foreach ($this->feed as $entry)
{
$urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId());
$videoId = end($urlChop);
echo '<h3><a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">' . $entry->getTitle() . '</a></h3>';
echo '<p>Uploaded on: '. $entry->getDateCreated() .'</p>';
echo '<a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">
<img src="http://img.youtube.com/vi/' . $videoId .'/hqdefault.jpg">
</a>';
$i++;
if($i==1) break;
}
?>
</div>
в противном случае вы можете сделать:
<?php
$channel = 'Blanktv'; //change this to your channel
$url = 'https://gdata.youtube.com/feeds/api/users/'.$channel.'/uploads';
$feed = Zend_Feed_Reader::import($url);
?>
<h1>Latest Video</h1>
<div>
<?php
$i=0;
foreach ($feed as $entry)
{
$urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId());
$videoId = end($urlChop);
echo '<h3><a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">' . $entry->getTitle() . '</a></h3>';
echo '<p>Uploaded on: '. $entry->getDateCreated() .'</p>';
echo '<a href="http://www.youtube.com/watch?v=' . $videoId .'" target="_blank">
<img src="http://img.youtube.com/vi/' . $videoId .'/hqdefault.jpg">
</a>';
$i++;
if($i==1) break;
}
?>
</div>
В последнем методе вам, вероятно, потребуется использовать оператор php require для файлов Zend_Feed_Reader и т. Д. ...
Надеюсь, это поможет, как я сказал, дайте мне знать, если вам нужна рука.
Всего наилучшего,
Dave
ОБНОВЛЕНИЕ: В ответ на ваши комментарии о кешировании
Привет, Том, вот еще одно быстрое и грязное решение, которое не использует кеш, но может быть очень быстрым в реализации.
Причина, по которой я не пошел с компонентом кэширования, заключается в том, что я подумал, что в данных обстоятельствах будет достаточно простого решения БД. Я также подумал, что тянуть за корма, чтобы сравнить, новый он или нет, не будет самым экономичным для вас.
Вы можете автоматизировать этот процесс для автоматического запуска в указанное время, но если вы не хотите автоматизировать процесс и не возражаете, нажав ссылку для обновления видео вручную, вы можете запустить его таким образом.
Мое решение опять-таки основано на ZF, но, поскольку вы в порядке, взломав его на что-то полезное с cakephp, у вас не должно возникнуть никаких проблем, если вы сделаете то же самое здесь.
Сначала создайте новую таблицу (в предположении, что MySQL db):
CREATE TABLE `yourdbname`.`latestvid` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique identifier',
`videoId` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video id',
`videoTitle` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video title',
`uploadDate` VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'Video upload date'
) ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO `yourdbname`.`latestvid` (`id`, `videoId`, `videoTitle`, `uploadDate`) VALUES (NULL, '--', '--', '--');
Это создаст таблицу для вашей последней видеоинформации для использования в вашем шаблоне, однако установленные по умолчанию значения не будут работать с вашим шаблоном по очевидным причинам.
Затем вы можете сделать что-то похожее на это:
public function updateAction()
{
$this->_helper->viewRenderer->setNoRender(); // disable view
$this->_helper->layout()->disableLayout(); // disable layout
$user = 'Blanktv'; // insert your channel name
$url = 'https://gdata.youtube.com/feeds/api/users/'.$user.'/uploads';
$feed = Zend_Feed_Reader::import($url);
if(!$feed)
{
die("couldn't access the feed"); // Note: the Zend component will display an error if the feed is not available so this wouldn't really be necessary for ZF
}
else
{
$i=0;
foreach ($feed as $entry)
{
$urlChop = explode ('http://gdata.youtube.com/feeds/api/videos/',$entry->getId());
$videoId = end($urlChop);
$videoTitle = $entry->getTitle();
$uploadDate = $entry->getDateCreated();
// use your preferred method to update the db record where the id = 1
$i++;
if($i==1) break;
}
}
}
Может быть, пойти и дать мне знать, как вы поживаете?
Вам просто нужно настроить шаблон, чтобы получить переменные из базы данных вместо Youtube, за исключением миниатюры.
Полагаю, вы всегда можете пойти дальше и сохранить изображения и т. Д., Так как миниатюра все еще извлекается из Youtube и может замедлить работу.
Вы можете настроить скрипт, чтобы скопировать миниатюру на свой собственный сервер и сохранить путь в БД или использовать стандартную миниатюру, если вы запускаете серию видеороликов, для которых требуется стандартный брендинг - в любом случае, надеюсь, это поможет.
: - D
Dave