질문/조언질답게시판
Extra Form
PHP PHP 5.5
CMS XpressEngine

게시판 확장변수 $youtube_url에 유튜브 공유주소 

https://www.youtube.com/watch?v=*********  또는 https://youtu.be/********* 형식으로 넣어서 iframe으로 유튜브 영상을 보여주는 소스입니다.

 

<script cond="$youtube_url">
var regs = [
      /https?:\/\/youtu.be\/([a-zA-Z0-9\-_]+)/gi, 
      /https?:\/\/www.youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)/gi
   ];
var area = $('#area');
var youtubeIframe = '<iframe _title="YouTube video player"  src="//www.youtube.com/embed/#[CODE]" frameborder="0" width="100%" height="100%" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"  allowfullscreen></iframe>';

 

유튜브 공유주소만을 확장변수 ( $youtube_url ) 에 입력하면 문제없이 잘 재생이 됩니다.

 

그러나 아래 이미지처럼 유튜브 공유주소에서 동영상 시작 시간을 설정 할 때

2020-05-11 17,21,53.JPEG

https://youtu.be/*********?t=60  이런 형식(60초부터 영상재생)의 공유주소를 확장변수에 입력하면 ?t=60 이 부분이 잘려져서 https://youtu.be/*********으로 인식이 되어서 60초부터 재생이 되는게 아니라 처음부터 동영상이 재생됩니다.

 

아래 소스 정규식(?)에서 소스에서

/https?:\/\/youtu.be\/([a-zA-Z0-9\-_]+)/gi, 

 

부분에서  ([a-zA-Z0-9\-_]+ )    ---->  "영문대소문자와 숫자0~9를 제거" 하라는 부분인것 같은데 이게 맞다면 혹시 이 부분이 작동되지 않게끔 하려면 어떻게 처리를 해야 하는 지 도움 좀 받을 수 있을까요?

 

 

<script cond="$youtube_url">
var regs = [
      /https?:\/\/youtu.be\/([a-zA-Z0-9\-_]+)/gi, 
      /https?:\/\/www.youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)/gi
   ];
var area = $('#area');
var youtubeIframe = '<iframe _title="YouTube video player"  src="//www.youtube.com/embed/#[CODE]" frameborder="0" width="100%" height="100%" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"  allowfullscreen></iframe>';
for( var i in regs){
  var html = area.html();
  while(true){
    var result = regs[i].exec(html);
    if( result == null){
      break;
    }
    console.log('result : ', result);
    var code = result[1];
    html = html.replace( result[0], youtubeIframe.replace('#[CODE]', code) );
    console.log('html : ', html);
    area.html( html );
  }
}
</script>

 

  • profile
    <script cond="$youtube_url">
    var regs = [
          /https?:\/\/youtu.be\/([a-zA-Z0-9\-_]+)(?:(?:\?t|\?start)\=([0-9]+))?/gi, 
          /https?:\/\/www.youtube.com\/watch\?v\=([a-zA-Z0-9\-_]+)(?:(?:\&|\&amp;)(?:t|start)\=([0-9]+))?/gi
       ];
    var area = $('#area');
    var youtubeIframe = '<iframe _title="YouTube video player"  src="//www.youtube.com/embed/#[CODE]" frameborder="0" width="100%" height="100%" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"  allowfullscreen></iframe>';
    for( var i in regs){
      var html = area.html();
      while(true){
        var result = regs[i].exec(html);
        if( result == null){
          break;
        }
        console.log('result : ', result);
        var code = result[1]+'?start='+result[2];
        html = html.replace( result[0], youtubeIframe.replace('#[CODE]', code) );
        console.log('html : ', html);
        area.html( html );
      }
    }
    </script>

     

    이렇게 해보시겠어요? 잘 될지 모르겠네요.

    혹시 동영상ID와 시작지점 사이에 다른 파라메터가 중간에 있으면 잘 안될겁니다.

     

    embed 에서는 '?start='로 시작지점을 지정하나봐요. t=은 해봤는데 안되는것 같습니다. https://support.google.com/youtube/answer/171780?hl=ko

     

    자동재생 부분도 적용하려면 var code = result[1]+'?start='+result[2]+'&autoplay=1';로 바꿔야할 것 같습니다.

  • profile ?
    답변 감사합니다. ^^
    알려주신대로 시도 해보겠습니다.
  • profile ?
    알려주신 팁대로 적용하니 문제가 해결이 되었습니다.
    답변감사합니다. ^^
  • ? profile
    안녕하세요! 제가 질문이 있어서, 글을 남깁니다!:) 저는 라이믹스를 이용하고 있는데요, 코드를 변경하려고 하는데, 어디서 변경해야할지 모르겠다구요, 코드를 변경하기 위해서 다른 프로그램이 필요한가요? 아니면, php my admin이나 파일질라등...어디서 변경해야하 하나요?ㅠㅠ
  • profile ?
    "코딩하기 좋은 코딩 프로그램" 과 같은 단어나 문장으로 검색을 해보시고 자신에게 적당할 것 같은 소프트웨어를 선택하세요.
    전 eidtplus를 사용중입니다.