Каталог плагинов предлагает разные варианты интеграции Youtube в блог, среди них: Tubepres, Screenshots, YoutubeFeeder ну и массу других. Набор возможностей достаточно богатый у каждого из них. Однако, ни один плагин не решает поставленную задачу.
Как обычно, пришлось делать все руками..
Решение оказалось не сложным. В качестве источника информации был выбран rss-feed нужного канала Youtube. Дальше - дело техники вытащить из него необходимую информацию. Сделал я это так:
<?php
$maxitems = 1;
$channel = "имя канала";
$rss = fetch_rss('http://gdata.youtube.com/feeds/base/users/'.$channel.'/uploads?alt=rss&v=2&orderby=published&client=ytapi-youtube-profile&max-results='.$maxitems);
$items = array_slice($rss->items, 0, $maxitems);
foreach ( $items as $item ) {
$youtubeid = substr(substr(strchr($item['link'],'='),1),0,strpos(substr(strchr($item['link'],'='),1),'&'));
$youtubelink = $item['link'];
$youtubetitle = $item['title'];
}
?>
Что есть что:
- maxitems - максимальное число записей из фида.
- channel - имя канала
- youtubeid - id искомого ролика (или роликов если maxitems > 1)
- youtubetitle - заголовок ролика
- youtubelink - полная ссылка на ролик (в формате http://www.youtube.com/watch?v=youtubeid)
Не забудьте только подключить библиотеку для обработки rss-фидов:
include_once(ABSPATH . WPINC . '/rss.php')
Сделать это можно или непосредственно перед обработкой запроса, или в "шапке" шаблона, что бы использовать его и на других страницах.
К слову о сортировке - параметр
orderby
отвечает за сортировку роликов. Вот некоторые значения этого параметра: published - по дата публикации, rating - по рейтингу, viewCount - по число просмотров. Более подробную информацию по API Youtube надо смотреть в документации.Дальше полученный ролик надо вывести в нужное место. Просто вставляем в код соответствующий объект:
<object width="600" height="400">
<param name="movie" value="http://www.youtube.com/v/<?=$youtubeid;?>?version=3&hl=ru_RU&fs=1"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<param name="color" value="red"></param>
<embed src="http://www.youtube.com/v/<?=$youtubeid;?>?version=3&hl=ru_RU&fs=1" type="application/x-shockwave-flash" width="600" height="400" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>
В случае, если выводимых роликов > 1, тогда нужно предыдущий блок
<object>...</object>
вставить в тело цикла foreach {}
, предварительно обернув необходимыми div'ами для украшения. Получается примерно так:Пример вывода роликов: заголовок, миниатюра, id |
Что бы получить миниатюру ролика - достаточно вставить картинку с таким адресом:
http://i.ytimg.com/vi/id_ролика/default.jpg - картинка 120x90 px
http://i.ytimg.com/vi/id_ролика/0.jpg - картинка 4800x360 px
Теперь про комментарии. Для добавления комментариев в WordPress огромное число плагинов, один Disqus чего стоит. Проблема только в том, что все эти плагины не поддерживают авторизацию через вконтакт. Есть, конечно, плагины реализующие такую возможность, но попутно приносящие с собой изменения в БД, массу багов и, судя по отзывам, очень не стабильную работу. Так что комментирование роликов было решено сделать так:
- создаем отдельную страницу для WP, например video.php
- передаем ей GET-параметром id ролика, например, так:
http://наш_блог.ru/video/?id=youtubeid - на этой странице обрабатываем GET-параметр (не забывать экранировать его и удалить лишние символы для безопасности) и вставляем полученный id ролика в
<object>...</object>
- берем соответствующий виджет для комментариев из документации вконтакте и вставляем его в код страницы video.php ниже объекта с плеером
Страница с роликом и комментариями |
Очевидных минуса тут два:
- если меняется url блога - все комментарии теряются (если только вконтакт не предоставляет возможность их переноса между ресурсами - я не изучал этот момент);
- в отличии от того же Disqus нельзя получить число комментариев и вывести его куда-нибудь в нужное место.
Комментариев нет:
Отправить комментарий