You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求实现YouTube播放列表启动随机无重复循环播放的代码方案

Solution for Shuffling YouTube Playlist Without Repeats & Looping

Got it, let's tackle this problem head-on—you want a way to shuffle your YouTube playlist (PLl_KM23gznEAZW-INW8ty4QNaHH8JCnNW) completely without repeats, play through every single one of those ~1500 videos, then loop the whole shuffled process again. I’ve dealt with similar playlist automation needs before, so here’s a solid solution using the YouTube Data API and the YouTube IFrame Player API for full playback control.

Prerequisites First

  • You’ll need a YouTube Data API v3 key:
    • Create a project in the Google Cloud Console, enable the YouTube Data API v3, and generate an API key—this is free for small-scale use like this.
    • Keep this key handy, you’ll plug it into the code below.

Full Code Implementation

This code will:

  1. Fetch all video IDs from your playlist (handling API pagination since you have ~1500 videos)
  2. Shuffle the list using the Fisher-Yates algorithm (guaranteed no repeats)
  3. Play each video in sequence via the YouTube IFrame player
  4. Once all videos finish, reshuffle and restart the cycle
// Replace with your YouTube Data API key
const API_KEY = 'YOUR_API_KEY_HERE';
const PLAYLIST_ID = 'PLl_KM23gznEAZW-INW8ty4QNaHH8JCnNW';
let videoQueue = [];
let player;

// Fetch all video IDs from the playlist (handles pagination)
async function fetchAllPlaylistVideos() {
  let allVideos = [];
  let nextPageToken = null;

  do {
    const response = await fetch(
      `https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&playlistId=${PLAYLIST_ID}&maxResults=50&pageToken=${nextPageToken}&key=${API_KEY}`
    );
    const data = await response.json();
    
    allVideos.push(...data.items.map(item => item.contentDetails.videoId));
    nextPageToken = data.nextPageToken;
  } while (nextPageToken);

  return allVideos;
}

// Fisher-Yates shuffle for fair, repeat-free randomization
function shuffleArray(array) {
  const shuffled = [...array];
  for (let i = shuffled.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
  }
  return shuffled;
}

// Initialize YouTube IFrame Player and start playback cycle
function onYouTubeIframeAPIReady() {
  player = new YT.Player('player', {
    height: '360',
    width: '640',
    events: {
      'onStateChange': onPlayerStateChange
    }
  });

  // Start the cycle when the player is ready
  player.addEventListener('onReady', async () => {
    await startPlaylistCycle();
  });
}

// Handle video end event to play next in queue
function onPlayerStateChange(event) {
  if (event.data === YT.PlayerState.ENDED) {
    playNextVideo();
  }
}

// Play next video in queue; reshuffle if queue is empty
async function playNextVideo() {
  if (videoQueue.length === 0) {
    console.log('Playlist complete—reshuffling and restarting!');
    const allVideos = await fetchAllPlaylistVideos();
    videoQueue = shuffleArray(allVideos);
  }

  const nextVideoId = videoQueue.shift();
  player.loadVideoById(nextVideoId);
}

// Start the initial playlist cycle
async function startPlaylistCycle() {
  const allVideos = await fetchAllPlaylistVideos();
  videoQueue = shuffleArray(allVideos);
  playNextVideo();
}

// Load the YouTube IFrame API script
(function() {
  const tag = document.createElement('script');
  tag.src = 'https://www.youtube.com/iframe_api';
  const firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
})();

How to Use This

  1. Create a basic HTML file with a div for the player:
    <div id="player"></div>
    
  2. Paste the JavaScript code above into a <script> tag in your HTML, replacing YOUR_API_KEY_HERE with your actual API key.
  3. Open the HTML file in a browser—your playlist will start shuffling and playing all videos without repeats, then loop the process.

Key Notes

  • API Quota: Each fetch of your playlist uses ~30 API requests (since we pull 50 videos per page for 1500 total). YouTube’s free quota gives you 10,000 units per day, so this is well within limits even if you run it all day.
  • Playback Control: The player will automatically move to the next video when the current one ends. If you need pause/skip controls, you can add buttons that call player.pauseVideo() or playNextVideo() directly.
  • No External Dependencies: This uses only vanilla JS and YouTube’s official APIs, so no extra libraries are needed.

If you run into issues with API key setup or player initialization, feel free to drop a comment with the error message—I’ll help you troubleshoot!

内容的提问来源于stack exchange,提问作者JIM HALLOCK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:14:55