Поиск видео по YouTube

Создадим собственный поиск по видеофайлам с популярного сервиса youtube используя его API.

Разметка HTML

<div class="wrapper">
    
    <form class="blocks" action="#" method="get">
        <p><input type="text" class="search" /></p>
        <p><input type="Submit" class="btn" value="Поиск" /></p>
        <ul class="reset autocomplete"></ul>
    </form>
    
    <ul class="reset videos"></ul>
    
</div>

javascript

Для реализации задуманного воспользуемся плагином для jQuery - YouTube Search Utility - это файл tubeutil.js
Плагин является просто оболочкой для YouTube GDATA API. Утилита создает URL адреса, предоставляя дружественный интерфейс для взаимодействия с результатами поиска.


Что же может эта утилита?

  • Поиск по youtube с помощью ключевых слов
  • Поиск по каналам youtube
  • Выбор конкретного видео
  • Автозавершение предложения

Использование очень простое и позволяет интегрировать поисковую систему youtube на любой сайт.
Прежде чем начать внедрять сие на сайт, вы должны получить ключ YouTube API для разработчиков (зайдите на http://code.google.com/apis/youtube/dashboard/ заполните поля и получите ключ)

Поиск видео по YouTube

Итак, ключ получили.... продолжим...

Сначала инициализируем jQTubeUtil, чтобы можно было обращаться с запросами к YouTube.

$(function(){
    jQTubeUtil.init({
        key: '', // ваш API ключ - обязательно!
        orderby: 'viewCount', // опция, доступные значения: relevance, published, viewCount, rating
        time: 'all_time', // опция, доступные значения: today, this_week, this_month, all_time
        maxResults: 9
    });
});


Далее создадим функцию, которая будет показывать результаты - show_videos()

function show_videos(){
    var val = $('.blocks').find('.search').val(); // get value from '.search' element
    $('.videos').addClass('preloader').html(''); // add preloader class and clear HTML in '.videos' element
    jQTubeUtil.search(val, function(response){ // init search method
        var html = '';
        for (v in response.videos) {
            var video = response.videos[v], // YouTube video object
            minutes = parseInt(video.duration / 60),
            seconds = video.duration % 60;
            // create 'li' element
            html += '<li>';
            html += '<p class="image"><a href="http://www.youtube.com/watch?v='+video.videoId+'">';
            html += '<img src="' + video.thumbs[1].url + '" alt="' + video.title + '" title="' + video.title + '" />';
            html += '</a></p>'
            html += '<p class="entry"><a href="http://www.youtube.com/watch?v='+video.videoId+'">' + video.title + '</a>';
            html += '<small>' + minutes + ':' + (seconds < 10 ? '0'+seconds : seconds) + '</small>';
            html += '</p>';
            html += '</li>';
        }
        $('.videos').removeClass('preloader').html(html); // remove preloder class and show videos
    });
}

Теперь создадим автозаполнение предложений.

$('.search').keyup(function(){
    var val = $(this).val(); // get '.search' value when the user releases a key on the keyboard
    jQTubeUtil.suggest(val, function(response){
        var html = '';
        for(s in response.suggestions){
            var sug = response.suggestions[s];
            html += '<li><a href="#">'+sug+'</a></li>';
        }
        if (response.suggestions.length)
            $('.autocomplete').html(html).fadeIn(500); // show suggestions if exists
        else
            $('.autocomplete').fadeOut(500); // hide '.autocomplete' element
    });
}); 

И наконец, создадим событие при нажатии на элемент '.btn' и анкор в элементе '.autocomplete'

$('.btn').click(function(){
    show_videos();
    $('.autocomplete').fadeOut(500);
    return false;
});
 
$('.autocomplete').find('a').live('click', function(){
    // .live() method is able to affect elements that have not yet been added to the DOM
    var text = $(this).text();
    $('.blocks').find('.search').val(text);
    $('.autocomplete').fadeOut(500);
    show_videos();
    return false;
});

CSS

ul.reset,
ul.reset li {
    display:block;
    list-style:none;
    padding:0;
    margin:0;
}
 
.blocks {
    float:left;
    width:1000px;
    margin-bottom:50px;
    position:relative;
}
 
.blocks p {
    float:left;
    margin:0;
}
 
.blocks .search {
    float:left;
    width:258px;
    height:42px;
    line-height:42px;
    padding:0 10px;
    font-size:13px;
    color:#8c8c8c;
    background:url(../gfx/input.png) no-repeat;
    border:none;
}
 
.blocks .btn {
    float:left;
    width:71px;
    height:42px;
    border:none;
    text-indent:-9999px;
    cursor:pointer;
    background:url(../gfx/btn.png) no-repeat;
}
 
ul.autocomplete {
    display:none;
    width:300px;
    padding:10px;
    position:absolute;
    top:50px;
    left:0;
    background:#fff;
    border:1px solid #e4e4e4;
    /* CSS3 */
    -moz-border-radius:8px;
    -webkit-border-radius:8px;
    border-radius:8px;
}
 
ul.autocomplete li a {
    display:block;
    padding:5px 10px;
    font-size:11px;
    outline:none;
}
 
ul.autocomplete li a:hover {
    background:#f5f5f5;
    color:#991b22;
    /* CSS3 */
    -moz-border-radius:4px;
    -webkit-border-radius:4px;
    border-radius:4px;
}
 
.videos {
    float:left;
    clear:both;
    width:100%;
    min-height:200px;
}
 
.videos.preloader {
    background:url(../gfx/loader.gif) no-repeat center;
}
 
ul.videos li {
    float:left;
    width:300px;
    padding:10px;
    margin:0 5px 5px 0;
}
 
ul.videos li p {
    margin:0;
    padding:0;
}
 
.videos .image {
    float:left;
    width:120px;
    height:90px;
    font-size:0;
    line-height:0;
    padding:5px;
    background:#fff;
    border:1px solid #E6E6E6;
    overflow:hidden;
}
 
.videos .entry {
    float:right;
    width:163px;
    font-weight:bold;
}
 
.videos .entry small {
    display:block;
    font-weight:normal;
    color:#ACACAC;
}

СКАЧАТЬСкачек: 577
44,97 Kb
Кто скачал?

ДЕМОПосмотреть
пример