5 августа 2012 г.

Взаимодействие WordPress и Youtube

Ситуация достаточно простая: нужно взять видео ролики с конкретного канала Youtube, в определенном порядке (сортировка по новизне, популярности и т.п.), вывести в нужном месте на странице WordPress и оставить комментарий к нему через соответствующий плагин вконтакте.


Каталог плагинов предлагает разные варианты интеграции 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->items0$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 ниже объекта с плеером
Поскольку все id роликов уникальны, мы получаем набор уникальных адресов (http://наш_блог.ru/video/?id=youtubeid) с комментариями, привязанными к этим уникальным страницам. Вот так получается:

Страница с роликом и комментариями


Очевидных минуса тут два:
  • если меняется url блога - все комментарии теряются (если только вконтакт не предоставляет возможность их переноса между ресурсами - я не изучал этот момент);
  • в отличии от того же Disqus нельзя получить число комментариев и вывести его куда-нибудь в нужное место.
В остальном - это легкое и универсальное решение, подходящее не только для WordPress, но и любых сайтов на PHP.

Комментариев нет:

Отправить комментарий