Convert a youtube video url to embed code

前端 未结 7 1456
青春惊慌失措
青春惊慌失措 2020-12-07 10:07

I\'m using this to convert youtube url to embed url.

text(t).html().replace(/(?:http:\\/\\/)?(?:www\\.)?(?:youtube\\.com)\\/(?:watch\\?v=)?(.+)/g, \'

        
相关标签:
7条回答
  • 2020-12-07 10:30

    This works fine for me on ReactJS

    <iframe src={`https://www.youtube.com/embed/${url.split('='}[1]&autoplay=false`} controls allowfullscreen />
    
    0 讨论(0)
  • 2020-12-07 10:31

    I've been using this pair of functions to convert youtube links in a block of html from a wysiwyg editor into embedded iframes.

    As with other solutions, this can still mangle some other html in the block.

    • works with multiple videos in one block of text
    • works with http or https links
    • works with both the direct url of the video youtube.com/watch?v=UxSOKvlAbwI and the share links youtu.be/UxSOKvlAbwI

    code:

    createYoutubeEmbed = (key) => {
      return '<iframe width="420" height="345" src="https://www.youtube.com/embed/' + key + '" frameborder="0" allowfullscreen></iframe><br/>';
    };
    
    transformYoutubeLinks = (text) => {
      if (!text) return text;
      const self = this;
    
      const linkreg = /(?:)<a([^>]+)>(.+?)<\/a>/g;
      const fullreg = /(https?:\/\/)?(www\.)?(youtube\.com\/watch\?v=|youtu\.be\/)([^& \n<]+)(?:[^ \n<]+)?/g;
      const regex = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([^& \n<]+)(?:[^ \n<]+)?/g;
    
      let resultHtml = text;  
    
      // get all the matches for youtube links using the first regex
      const match = text.match(fullreg);
      if (match && match.length > 0) {
        // get all links and put in placeholders
        const matchlinks = text.match(linkreg);
        if (matchlinks && matchlinks.length > 0) {
          for (var i=0; i < matchlinks.length; i++) {
            resultHtml = resultHtml.replace(matchlinks[i], "#placeholder" + i + "#");
          }
        }
    
        // now go through the matches one by one
        for (var i=0; i < match.length; i++) {
          // get the key out of the match using the second regex
          let matchParts = match[i].split(regex);
          // replace the full match with the embedded youtube code
          resultHtml = resultHtml.replace(match[i], self.createYoutubeEmbed(matchParts[1]));
        }
    
        // ok now put our links back where the placeholders were.
        if (matchlinks && matchlinks.length > 0) {
          for (var i=0; i < matchlinks.length; i++) {
            resultHtml = resultHtml.replace("#placeholder" + i + "#", matchlinks[i]);
          }
        }
      }
      return resultHtml;
    };
    

    jsfiddle

    0 讨论(0)
  • 2020-12-07 10:37
    function popYouTubeId(buttonid) {
        var youTubeUrl = $(buttonid).attr('data-url');
        var youTubeId;
        var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
        var match = youTubeUrl.match(regExp);
        if (match && match[2].length == 11) {
           youTubeId = match[2];
        } else {
            youTubeId = 'no video found';
       }
       $('#ytvideo').html('<div class="youtubepopup"><a class="closex">x</a><iframe width="560" height="315" src="//www.youtube.com/embed/' + youTubeId + '" frameborder="0" allowfullscreen></iframe></div>');
       $('a.closex').click( function(){
           $('.youtubepopup').remove();
       });
    }
    
    var buttonid;
    
    $('.videobutton').click( function(){
        buttonid = '#'+$(this).attr('id');
        popYouTubeId(buttonid);
    });
    

    Some elaboration on isherwood's demo for your consideration. Simplifies, and packs more into the function for multiple use.

    jsfiddle

    0 讨论(0)
  • 2020-12-07 10:41

    Who needs jQuery. Below is pure javascript code using URL() function to get v parameter from YouTube URL and insertAdjacentHTML() from replacing current <script> tag with <iframe>

    <script>
    const url = "https://www.youtube.com/watch?v=qRv7G7WpOoU";
    const v = new URL(url).searchParams.get('v');
    
    document.currentScript.insertAdjacentHTML(
      'beforebegin',
      `<h1>Video id=${v}</h1>` +
      `<iframe
          width="480" height="270"
          src="https://www.youtube.com/embed/${v}?feature=oembed"
          allowfullscreen></iframe>`
      );
    </script>
    
    0 讨论(0)
  • 2020-12-07 10:43

    I am late to respond but here what I used to convert the youTube url to Embed and make the video work.

    <script>
        function myFunction() {
            var str = "https://www.youtube.com/watch?v=1adfD9";
            var res = str.split("=");
            var embeddedUrl = "https://www.youtube.com/embed/"+res[1];
            document.getElementById("demo").innerHTML = res;
        }
    </script>
    

    I hope this helps

    0 讨论(0)
  • 2020-12-07 10:48

    To anyone looking at this in 2020, you can get the embed code by using the oembed API.

    https://www.youtube.com/oembed?url=<URL>&format=<FORMAT>
    

    example:

    https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=gBrmnB5aOSI&format=json
    

    The response you will get is

    {
    "type": "video",
    "thumbnail_width": 480,
    "provider_name": "YouTube",
    "title": "Intro To Live Streaming on YouTube",
    "thumbnail_height": 360,
    "provider_url": "https://www.youtube.com/",
    "version": "1.0",
    "height": 270,
    "author_name": "YouTube Creators",
    "html": "<iframe width=\"480\" height=\"270\" src=\"https://www.youtube.com/embed/gBrmnB5aOSI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>",
    "author_url": "https://www.youtube.com/user/creatoracademy",
    "width": 480,
    "thumbnail_url": "https://i.ytimg.com/vi/gBrmnB5aOSI/hqdefault.jpg"
    }
    

    you can use the html data for the iframe

    0 讨论(0)
提交回复
热议问题