2016-06-21 3 views
0

私のウェブページはYouTubeの再生リストを再生し、トラックの名前を一番下に表示します(その日の大半を費やしています)、サムネイルをプレイリストから再生している特定のビデオがトラックタイトルの最下部に表示されます。私は特定のビデオでこれを行う方法を理解していますが、これをビデオの再生リストにどのように実装しますか?再生される新しい曲ごとにイメージがリフレッシュされることが重要です。 https://jsfiddle.net/ruumL5s7/YouTubeを抽出するサムネイルを再生リスト内の動画から表示するとウェブページ上に表示

も、私は垂直方向に映像を合わせ、上部と下部のバーの間にdivをチャットで問題が生じています:ここで

は私の現在の仕事にjsfiddleです。私はまた、画面がリサイズされたときに、(完全な)バーを残さずに、下のバーに問題を抱えています。別のdivがすべて分断されています。だから、どんな支援も大歓迎です!

ありがとうございました!

HTML:

<!DOCTYPE html> 
      <html> 
       <head> 
       <title>Chat</title> 
       <link rel="stylesheet" href="main.css"> 
       </head> 

      <div class="all-content"> 

       <body> 

       <div class="header-bar"> 
        <div class="bar"> 

         <img src="C:\Users\jlewa\Desktop\assets\affinity_fm_only_letters.png" class="top-logo" style="float: left;"> 

         <ul class="standard-nav" style="float: left;"> 

         <li>Home</li> 
         <li>Lyrics Hub</li> 
         <li>Affinity LIVE</li> 
         <li>Merchandise</li> 

         </ul> 

        </div> 
        <div class="dropshadow"></div> 
       </div> 

       <div class="container-middle-third"> 
        <div class="youtube-video" style="float: left;"> 
        <div class="DJ-text">Affinity FM DJ Room</div> 
        <div class="DJ-underline"></div> 
        <div id="player" style="width: 1280px; height: 720px;"></div></div> 
        </div> 

        <div class="chat" style="float: left;"> 
        <div class="Chat-text">Chat</div> 
        <div class="Chat-underline"></div> 
        <input type="text" class="chat-name" placeholder="Chat"> 
        <div class="info-rect">Info</div> 
        <div class="chat-messages"></div> 
        <textarea placeholder="Join the conversation..."></textarea> 
        <div class="chat-status">Status: <span>Idle</span></div> 
        </div> 

       <div class="bottom-bar"> 

        <div class="thumbnail" id="thumbnail" style="float: left"></div> 

        <div class="title-bar" style="float: left;"> 

        <div class="title" id="title"></div> 
        <div class="dj-playing">Affinity FM is playing</div> 

        <div class="progress-background"> 
         <div id="progress-bar" class="progress-bar"></div> 
        </div> 

        </div> 
        <div class="subscribe" style="float: left;"> 

        <div class="g-ytsubscribe" data-channel="SAMusicPlaylist" data-layout="full" data-theme="dark" data-count="default"></div> 

        </div> 

       </div> 

       <script src="http://127.0.0.1:8080/socket.io/socket.io.js"></script> 

       <script src="https://apis.google.com/js/platform.js"></script> 

       <script> 
        (function() { 
        var getNode = function(s) { 
         return document.querySelector(s); 
        }, 

         // Get required nodes 
         status = getNode('.chat-status span'), 
         messages = getNode('.chat-messages'), 
         textarea = getNode('.chat textarea'), 
         chatName = getNode('.chat-name'), 

         statusDefault = status.textContent,  

         setStatus = function(s){ 
          status.textContent = s; 

          if(s !== statusDefault){ 
          var delay = setTimeout(function(){ 
           setStatus(statusDefault); 
           clearInterval(delay); 
          }, 3000); 
          } 
         }; 

        //try connection 
        try{ 
         var socket = io.connect('http://127.0.0.1:8080'); 
        } catch(e){ 
         //Set status to warn user 
        } 

        if(socket !== undefined){ 

         //Listen for output 
         socket.on('output', function(data){ 
         if(data.length){ 
          //Loop through results 
          for(var x = 0; x < data.length; x = x + 1){ 
          var message = document.createElement('div'); 
          message.setAttribute('class', 'chat-message'); 
          message.textContent = ': ' + data[x].message; 
          var name=document.createElement('span'); 
          name.setAttribute('class', 'userName'); 
          name.textContent = data[x].name; 

          message.insertBefore(name, message.firstChild); 

          //Append 
          messages.appendChild(message); 
          messages.insertBefore(message, messages.firstChild); 
          } 
         } 
         }); 

         //Listen for a status 
         socket.on('status', function(data){ 
         setStatus((typeof data === 'object') ? data.message : data); 

         if(data.clear === true){ 
          textarea.value = ''; 
         } 
         }); 

         //Listen for keydown 
         textarea.addEventListener('keydown', function(event){ 
         var self = this, 
          name = chatName.value; 

         if(event.which === 13 && event.shiftKey === false){ 
          socket.emit('input', { 
          name: name, 
          message: self.value 
          }); 
         } 
         }); 
        } 

        })(); 
       </script> 
       <script> 
        var time_total; 
        var timeout_setter; 
        var player; 
        var tag = document.createElement("script");//This code loads the IFrame Player API code asynchronously 

        tag.src = "https://www.youtube.com/iframe_api"; 
        var firstScriptTag = document.getElementsByTagName("script")[0]; 
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

        //This function creates an <iframe> (and YouTube player) OR uses the iframe if it exists at the "player" element after the API code downloads 
        function onYouTubeIframeAPIReady() 
        { 
        player = new YT.Player("player", 
              { 
         height: "853", 
         width: "480", 
         /* videoId: "GGmxVDXM5X2UxaP9PvWQ4Z171DXyGcq", */ 
         playerVars: { 
         listType:'playlist', 
         list: 'PL_GGmxVDXM5X2UxaP9PvWQ4Z171DXyGcq', 
         controls: '0', 
         html5: '1', 
         cc_load_policy: '0', 
         disablekb: '1', 
         iv_load_policy: '3', 
         modestbranding: '1', 
         showinfo: '0', 
         rel: '0', 


         }, 
         events: 
         { 
         "onReady": onPlayerReady, 
         "onStateChange": onPlayerStateChange 
         } 

        }); 
        } 


       var num = (1 + Math.floor(Math.random() * 10)); 


        //The API will call this function when the video player is ready 
        function onPlayerReady(event) 
        { 
        event.target.playVideo(); 
        time_total = convert_to_mins_and_secs(player.getDuration(), 1); 
        loopy(); 


        player.addEventListener('onStateChange', 'onPlayerStateChange'); 


        player.setShuffle({ 
        'shufflePlaylist': 1 
        });  
        } 

        function loopy() 
        { 
        var current_time = convert_to_mins_and_secs(player.getCurrentTime(), 0); 
        document.getElementById("progress-bar").style.width = (player.getCurrentTime()/player.getDuration())*100+"%"; 
        console.log(current_time + "/" + time_total); 
        timeout_setter = setTimeout(loopy, 300); 
        } 

        function convert_to_mins_and_secs(seconds, minus1) 
        { 
        var mins = (seconds>=60) ?Math.round(seconds/60):0; 
        var secs = (seconds%60!=0) ?Math.round(seconds%60):0; 
        var secs = (minus1==true) ?(secs-1):secs; //Youtube always displays 1 sec less than its duration time!!! Then we have to set minus1 flag to true for converting player.getDuration() 
        var time = mins + ":" + ((secs<10)?"0"+secs:secs); 
        return time; 
        } 

        // 5. The API calls this function when the player's state changes 
        function onPlayerStateChange(event) 
        { 
        if (event.data == YT.PlayerState.ENDED) 
        { 
         console.log("END!"); 
         clearTimeout(timeout_setter); 
         document.getElementById("progress-bar").style.cssText = "transition: none;"; 


        } 
        else if (event.data == YT.PlayerState.PLAYING) 
        { 
         console.log("PLAYING"); 
         loopy(); 
         document.getElementById("progress-bar").style.cssText = "transition: all 300ms linear 0s;"; 
         console.log(player.getPlayerState()); 
         if (player.getPlayerState() == 1) { 
         document.getElementById("title").innerText = player.getVideoData().title; 
         } 
        } 
        else if (event.data == YT.PlayerState.PAUSED) 
        { 
         event.target.playVideo(); 
         console.log("PLAUSED"); 
        } 
        else 
        { 
         console.log(event.data); 
        } 
        } 
       </script> 

       </body> 
      </div> 
      </html> 

CSS:

body { 
      background-color: #0f0f17; 
      margin: 0px; 
      width: 100%; 
     } 

     .container-middle-third{ 
      margin-top: 20px; 
      margin-left: 70px; 
     } 

     body, 
     textarea, 
     input { 
      font: 13px "Raleway", sans-serif; 
      color: #ffffff; 

     } 

     .all-content{ 
      width: 1920px; 
      display: block; 
      margin-left: auto; 
      margin-right: auto; 
     } 

     .bar{ 
      height: 90px; 
      width: 1920px; 
      background-color: #15151d; 
     } 

     .top-logo{ 
      max-height: 100%; 
      max-width: 100%; 
      margin-left: 4% 
     } 

     /*li{ 
      display: inline; 
      padding-right: 20px; 
     } 

     .standard-nav { 
      list-style: none; 
      padding: 0; 
      text-transform: uppercase; 
      line-height: 13px; 
      font-weight: 700; 
      margin-left: 63%; 
      max-height: 100%; 
     } */ 

     .DJ-text{ 
      font-weight: 700; 
      /*position:relative;*/ 
      text-transform: uppercase; 
     } 

     .Chat-text{ 
      font-weight: 700; 
      text-transform: uppercase; 
     } 

     .DJ-underline{ 
      width: 1280px; 
      height: 1px; 
      position:relative;top:10px; 
      background-color: #3f3f45; 
      margin: 0px 0px 40px; 
     } 

     .Chat-underline{ 
      width: 100%; 
      position:relative; 
      /*left:-140px;*/ 
      float:right; 
      height: 1px; 
      position:relative;top:10px; 
      background-color: #3f3f45; 
      margin: 0px 0px 40px; 
     } 

     .youtube-video{ 
     position: relative; 
     } 
     .transparent-layer{ 
      width: 850px; 
      height: 477px; 
      pointer-events: none; 
      background-color: #ffffff; 
     } 

     .ad{ 
      width: 728px; 
      height: 90px; 
      border: 1px solid #000000; 
      margin-left: 11px; 
      margin-top: 20px; 
     } 

     .chat { 
      position: relative; 
      min-width: 400px; 
      margin: 0px 0px 0px 112px; 
     } 
     .chat-messages, 
     .chat-textarea, 
     .chat-name { 
      border: 1px solid #1a1a23; 
      background-color: #1a1a23; 
     } 

     .userName{ 
      font-weight: 700; 
      color: #079ce0; 
     } 

     .chat-messages { 
      width:380px; 
      height:586px; 
      overflow-y:scroll; 
      padding:10px; 
     } 

     .chat-message { 
      margin-bottom:10px; 
     } 

     .info-rect{ 
      height: 40px; 
      width: 180px; 
      padding:10px; 
      max-width: 100%; 
      margin:0; 
      border:0; 
      display: flex; 
      align-items: center; 
      justify-content: center; 
      font-weight: 700; 
      text-transform: uppercase; 
      background-color: #15151d 
     } 

     .chat-name{ 
      height: 40px; 
      max-width: 100%; 
      width: 180px; 
      padding:10px; 
      border:0; 
      margin:0; 
      font-weight: 700; 
      text-transform: uppercase; 
      float:left; 
      text-align: center; 
     } 

     .chat textarea { 
      width:380px; 
      padding:10px; 
      margin:0; 
      border-top:0; 
      max-width:100%; 
      border-top: 1px solid #0f0f17; 
      border-bottom: 1px solid #1a1a23; 
      border-right: 1px solid #1a1a23; 
      border-left: 1px solid #1a1a23; 
      background-color: #1a1a23; 

     } 

     .chat-status { 
      color: #bbb; 
      opacity: 0; 
      background-color: #0f0f17; 
     } 

     .info-rect, 
     .chat textarea, 
     .chat-name { 
      max-width: 100%; 
     } 


     .bottom-bar{ 
      position: absolute; 
      bottom: 0; 
      display:table; 

     } 

     .thumbnail{ 
      width: 90px; 
      height: 80px; 
      opacity: 0.2; 
      background-color: #ffffff; 
     } 

     .title-bar{ 
      width:1372px; 
      height: 80px; 
      background-color: #1a1a23; 
     } 
     .title{ 
      font-weight: 700; 
      text-transform: uppercase; 
      margin-left: 30px; 
      margin-top: 25px; 
     } 
     .dj-playing{ 
      margin-left: 30px; 
     } 
     .progress-background{ 
      width: 1372px; 
      height: 3px; 
      background-color: #313139; 
      position: fixed; 
      bottom: 0; 
     } 
     .progress-bar{ 
      height: 3px; 
      width: 0px; 
      transition: all 300ms linear; 
      background-color: #fa1d57; 
      bottom: 0; 
     } 
     .subscribe{ 
      width: 458px; 
      height: 80px; 
      background-color: #15151d; 
      display:table-cell; 
     } 
     .g-ytsubscribe{ 
      width: 450px; 
      display: block; 
      margin-left: auto; 
      margin-right: auto; 
     } 
+0

http://www.reelseo.com/youtube-thumbnail-image/ –

答えて

0

あなたはあなたがjsのかのいずれかでそれを行うことができますYouTubeのAPI 3.

キーを使用する必要があり、この時間Php。

PHPの

<? 
    $api_key  = "AIzaSyDRfgPj9a2vnckVkSGoKktNfrozbMvjkdw"; 
    $play_list_id = "PLcV3JzAz3r32-on4upkyAv0VtvYXAl-Nz"; 
    $url   = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&id=" . $play_list_id; 

    $ch   = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 

    $response_raw = curl_exec($ch); 
    $response = json_decode($response_raw); 

    echo "default image :" . $response->items[0]->snippet->thumbnails->default->url; 
    echo "<br />\n<br />\n"; 
    echo "medium image :" . $response->items[0]->snippet->thumbnails->medium->url; 
    echo "<br />\n<br />\n"; 
    echo "maxres image :" . $response->items[0]->snippet->thumbnails->maxres->url; 
    echo "<br />\n<br />\n"; 
    echo print_r($response, 1); 
?> 

スクリプトの中で最も重要なことは、クエリパラメータとURLです。 $ api_keyと、$ play_list_idを自分で置き換えてください。

JavaScriptは、ほぼ同じことです。

JS

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
<script> 
function make_request() 
{ 
    var response  = ""; 
    var response1  = ""; 
    var api_key   = "AIzaSyBaS4_vwohJW7Ndb9EkjSqsoD75O4f4jXI"; 
    var play_list_id = "PLcV3JzAz3r32-on4upkyAv0VtvYXAl-Nz"; 
    var url    = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&id=" + play_list_id + "&key=" + api_key; 

    $.ajax 
    ({ 
     url: url, 
     dataType: "json", 
     type: "get", 
     async: false, 
     success: function(data) 
     { 
      response = JSON.stringify(data); 
      response1 = data; 
     } 
    }); 
    alert(response1.items[0].snippet.thumbnails.default.url); 
    console.log(response1.items[0].snippet.thumbnails.default.url); 
    console.log(response); 
} 

function init() 
{ 
    gapi.client.setApiKey("AIzaSyBaS4_vwohJW7Ndb9EkjSqsoD75O4f4jXI"); 
    gapi.client.load('youtube', 'v3').then(make_request); 
} 
</script> 
<script src="https://apis.google.com/js/client.js?onload=init"></script> 

アクションでそれらを見てみましょう:

しかし、覚えておいてください:あなたがPHPでそれをするとき、あなたはGoogleサーバーキーを作成する必要があります。あなたはjsでそれをするとき、何を推測するのですか?あなたはブラウザキーでそれを行います。しかし、最も重要なのは、開発者のコ​​ンソールでYouTubeのデータAPI 3を有効にすることを忘れないでください! KEY取得する

参考:私は巻き込まれたところ https://developers.google.com/api-client-library/javascript/start/start-js#choose-google-services

+0

は大丈夫そう、これはでした。だから、同じコードでapi v2とv3の両方を使用する能力がありますか?理由は分かりませんが、これは問題の原因になると考えました –

+0

「YouTube Player API」と「YouTube Data API」の2つの異なるAPIを指していることを理解しておいてください。 https:// developers。 google.com/youtube/iframe_api_reference https://developers.google.com/youtube/v3/ –

+0

ああ、私はあなたのJavaScriptコードを使って作業しています。私が正しく理解していれば、私は 'console.log(response);の下に一行のコードを置く必要があります。このように 'document.getElementById( "thumbnail");'サムネイルdiv内で使用するサムネイルを抽出するには?私はAPIの基本を積極的に進めていますが、消防用ホースから水を飲むのと同じです。 –

関連する問題