<div class="yt-widget" id="yt-widget">

  <div class="yt-skeleton yt-card" style="pointer-events:none">

    <div class="yt-thumb"></div>

    <div class="yt-title-sk"></div><div class="yt-title-sk2"></div>

  </div>

  <div class="yt-skeleton yt-card" style="pointer-events:none">

    <div class="yt-thumb"></div>

    <div class="yt-title-sk"></div><div class="yt-title-sk2"></div>

  </div>

  <div class="yt-skeleton yt-card" style="pointer-events:none">

    <div class="yt-thumb"></div>

    <div class="yt-title-sk"></div><div class="yt-title-sk2"></div>

  </div>

</div>


<style>

.yt-widget{display:flex;gap:20px;justify-content:center;flex-wrap:wrap;max-width:1100px;margin:0 auto}

.yt-card{background:#fff;border-radius:12px;overflow:hidden;width:320px;box-shadow:0 2px 12px rgba(0,0,0,0.08);text-decoration:none;color:inherit;transition:transform .2s,box-shadow .2s;display:block}

.yt-card:hover{transform:translateY(-4px);box-shadow:0 8px 24px rgba(0,0,0,0.14)}

.yt-thumb{position:relative;width:100%;padding-top:56.25%;background:#eee;overflow:hidden}

.yt-thumb img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}

.yt-play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:54px;height:54px;background:rgba(255,0,0,0.88);border-radius:50%;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s}

.yt-card:hover .yt-play{opacity:1}

.yt-play svg{width:22px;height:22px;fill:#fff;margin-left:3px}

.yt-info{padding:14px 16px 18px}

.yt-title{font-size:14px;font-weight:600;line-height:1.4;color:#111;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

.yt-date{margin-top:8px;font-size:12px;color:#999}

.yt-skeleton .yt-thumb{background:#e0e0e0;padding-top:56.25%}

.yt-skeleton .yt-title-sk{height:14px;background:#e0e0e0;border-radius:4px;margin:14px 16px 6px;animation:pulse 1.2s infinite}

.yt-skeleton .yt-title-sk2{height:14px;background:#e0e0e0;border-radius:4px;margin:0 16px 18px;width:60%;animation:pulse 1.2s infinite}

@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.4}}

.yt-error{text-align:center;color:#999;font-size:13px;padding:20px;width:100%}

</style>


<script>

(function() {

  var API_KEY    = 'AIzaSyBqtLBZyc-BTM4omVG_SbP9nQR1h504JAQ';

  var CHANNEL_ID = 'UCLJl8-mbCfolWMkh1F1qfjA';

  var MAX_VIDEOS = 3;

  var FETCH_COUNT = 10;

  var widget = document.getElementById('yt-widget');


  function formatDate(d) {

    return new Date(d).toLocaleDateString('ru-RU',{day:'numeric',month:'long',year:'numeric'});

  }

  function parseDuration(iso) {

    var m = iso.match(/PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/);

    if (!m) return 0;

    return (parseInt(m[1]||0)*3600)+(parseInt(m[2]||0)*60)+(parseInt(m[3]||0));

  }


  fetch('https://www.googleapis.com/youtube/v3/search?key='+API_KEY+'&channelId='+CHANNEL_ID+'&part=id&order=date&type=video&maxResults='+FETCH_COUNT)

    .then(function(r){return r.json()})

    .then(function(data){

      if(data.error) throw new Error(data.error.message);

      var ids = data.items.map(function(i){return i.id.videoId});

      return fetch('https://www.googleapis.com/youtube/v3/videos?key='+API_KEY+'&id='+ids.join(',')+'&part=snippet,contentDetails');

    })

    .then(function(r){return r.json()})

    .then(function(data){

      if(data.error) throw new Error(data.error.message);

      var videos = data.items.filter(function(v){

        return parseDuration(v.contentDetails.duration) >= 180;

      }).slice(0, MAX_VIDEOS);

      if(!videos.length) throw new Error('Нет длинных видео');

      widget.innerHTML = videos.map(function(v){

        return '<a class="yt-card" href="https://www.youtube.com/watch?v='+v.id+'" target="_blank" rel="noopener">'

          +'<div class="yt-thumb"><img src="https://i.ytimg.com/vi/'+v.id+'/hqdefault.jpg" loading="lazy">'

          +'<div class="yt-play"><svg viewBox="0 0 24 24"><path d="M8 5v14l11-7z"/></svg></div></div>'

          +'<div class="yt-info"><div class="yt-title">'+v.snippet.title+'</div>'

          +'<div class="yt-date">'+formatDate(v.snippet.publishedAt)+'</div></div></a>';

      }).join('');

    })

    .catch(function(e){

      widget.innerHTML='<div class="yt-error">Не удалось загрузить видео.<br>'+e.message+'</div>';

    });

})();

</script>