2017-05-10 11 views
1

私は、ユーザーがYoutubeのビデオURLを貼り付けることができるページを持っています。そして、ビデオのサムネイル画像を取得するために、ビデオのIDを抽出する必要があります。難しい部分は、ビデオURLからビデオIDを抽出する信頼できる方法を得ることです。ここには数多くの正規表現の解決法がありますが、私にとっては100%信頼できるものはありません。ここではいくつかあります:ビデオURLを指定して、Youtube APIからYoutubeビデオIDを取得するにはどうすればよいですか?

  1. JavaScript REGEX: How do I get the YouTube video id from a URL?
  2. Youtube API - Extract video ID

それは長い正規表現を持っている人のコンテストのようなものです。私は、正しい方法は、YouTubeのAPIからこの情報を取得することであろうように感じるが、それを見て、このオプションのように思えることはできません:あなたはすべてを見ることができるように

https://developers.google.com/apis-explorer/#p/youtube/v3/

は、動画IDに基づいています。現実の世界のユーザーはビデオIDが何であるかを知ることさえできないので、私はビデオに関するあらゆる情報を得るために実際のビデオIDが必要であることはばかげている。 VimeoにはこのAPIが組み込まれています。次に例を示します。

https://vimeo.com/api/oembed.json?url=https://vimeo.com/29474908

誰もがいくつかの正規表現を含まない、このためのソリューションを持っていますか?

答えて

1

Doing a search with the APIは、さまざまなYouTube URLタイプで動作します。 URLはクエリ用語としてqとして渡されます。

https://www.googleapis.com/youtube/v3/search/?key=<YOUR_KEY>&part=snippet&q=youtu.be/M7lc1UVf-VE 

たぶん、いくつかの場合には、複数の項目をもたらす可能性が、通常の検索結果には、ちょうど1試合です:私はthis answerからURLのバリエーションの一部でテストされ、最も働い

{ 
    kind: "youtube#searchListResponse", 
    etag: ""m2yskBQFythfE4irbTIeOgYYfBU/j2Px-5q--mgJEsrfjg4L0Mgn_L8"", 
    regionCode: "ES", 
    pageInfo: { 
     totalResults: 1, 
     resultsPerPage: 5 
    }, 
    items: [ 
     { 
      kind: "youtube#searchResult", 
      etag: ""m2yskBQFythfE4irbTIeOgYYfBU/_1gFVi_i_djlS4OZWPGtcZ3iSLQ"", 
      id: { 
       kind: "youtube#video", 
       videoId: "M7lc1UVf-VE" 
      }, 
      snippet: { 
       publishedAt: "2013-04-10T17:25:04.000Z", 
       channelId: "UC_x5XG1OV2P6uZZ5FSM9Ttw", 
       title: "YouTube Developers Live: Embedded Web Player Customization", 
       description: "On this week's show, Jeff Posnick covers everything you need to know about using player parameters to customize the YouTube iframe-embedded player.", 
       thumbnails: { 
        default: { 
         url: "https://i.ytimg.com/vi/M7lc1UVf-VE/default.jpg", 
         width: 120, 
         height: 90 
        }, 
        medium: { 
         url: "https://i.ytimg.com/vi/M7lc1UVf-VE/mqdefault.jpg", 
         width: 320, 
         height: 180 
        }, 
        high: { 
         url: "https://i.ytimg.com/vi/M7lc1UVf-VE/hqdefault.jpg", 
         width: 480, 
         height: 360 
        } 
       }, 
       channelTitle: "Google Developers", 
       liveBroadcastContent: "none" 
      } 
     } 
    ] 
} 

var urls = [ 
    '//www.youtube-nocookie.com/embed/M7lc1UVf-VE?rel=0', 
    'https://www.youtube.com/watch?v=M7lc1UVf-VE&feature=channel', 
    'https://www.youtube.com/watch?v=M7lc1UVf-VE&playnext_from=TL&videos=osPknwzXEas&feature=sub', 
    'https://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I', // <---- invalid 
    'https://youtu.be/M7lc1UVf-VE', 
    'https://www.youtube.com/watch?v=M7lc1UVf-VE&feature=youtu.be', 
    'https://youtu.be/M7lc1UVf-VE', 
    'https://www.youtube.com/watch?v=M7lc1UVf-VE&feature=channel', 
    'https://www.youtube.com/watch?v=M7lc1UVf-VE&playnext_from=TL&videos=osPknwzXEas&feature=sub', 
    'https://www.youtube.com/ytscreeningroom?v=M7lc1UVf-VE', // <---- invalid 
    'https://www.youtube.com/embed/M7lc1UVf-VE?rel=0', 
    'https://www.youtube.com/watch?v=M7lc1UVf-VE', 
    'https://youtube.com/v/M7lc1UVf-VE?feature=youtube_gdata_player', 
    'https://youtube.com/vi/M7lc1UVf-VE?feature=youtube_gdata_player', // <---- invalid 
    'https://youtube.com/?v=M7lc1UVf-VE&feature=youtube_gdata_player', 
    'https://www.youtube.com/watch?v=M7lc1UVf-VE&feature=youtube_gdata_player', 
    'https://youtube.com/?vi=M7lc1UVf-VE&feature=youtube_gdata_player', // <---- invalid 
    'https://youtube.com/watch?v=M7lc1UVf-VE&feature=youtube_gdata_player', 
    'https://youtube.com/watch?vi=M7lc1UVf-VE&feature=youtube_gdata_player', 
    'https://youtu.be/M7lc1UVf-VE?feature=youtube_gdata_player' 
]; 

var my_key = '<YOUR_KEY>'; 

function getUri(uri){ 
    $.get('https://www.googleapis.com/youtube/v3/search/?key='+my_key+'&part=snippet&q='+uri, function(data) { 
     if(data.items.length !== 0) 
      console.log(data.items[0].snippet.publishedAt); 
     else 
      console.warn('no items for',uri) 
    }); 
} 

for (i = 0; i < urls.length; ++i) { 
    getUri(urls[i]); 
} 
関連する問題