2016-10-22 15 views
0

私はYouTubeのURLを解析しようとしています。現時点では、私のコードは標準YouTubeのURLでOKです。分割youtubeのURLは

https://www.youtube.com/watch?v=tYMFIIVOHyo 

しかし、このようなリストまたはyoutu.beでは動作しません

https://www.youtube.com/watch?v=tYMFIIVOHyo&list=UUH3V-b6weBfTrDuyJgFioOw 
https://youtu.be/tYMFIIVOHyo?list=UUH3V-b6weBfTrDuyJgFioOw 
https://youtu.be/tYMFIIVOHyo 

私のコードは、私はこの問題を解決するにはどうすればよい

module CampingsHelper 
    def embed(youtube_url) 
    youtube_id = youtube_url.split("=").last 
    content_tag(:iframe, nil, src: "//www.youtube.com/embed/#{youtube_id}") 
end 

のですか?

ところで、私はurlがyoutubeからではない場合警告を表示したいと思います。

+0

コードでは、必要なパラメータが最後であると仮定しています。それをしないでください。クエリを分解し、必要な特定のパラメータの値にアクセスする必要があります。 URLクエリは、順序を変更することができます。 –

答えて

1

あなたは正規表現を使用することができます。

youtube_id = youtube_url[/(?<=v=)[^&]+|(?<=https:\/\/youtu.be\/)[^&?]+/] 

ちょうどそのURLはhttps://www.youtube.comhttps://youtube.comまたはhttps://youtu.be

+0

まずは、ありがとうございます!私の警告のために、私は方法を理解していますが、私はこのようなyoutubeのURLを置くためのフォームを使用します<%= f.text_field:youtube_url、class: "form-control"%>そして私はこれをどのようにすることができるかわかりません – nicolaswecandoit

+0

フロントエンド(クライアント側)のJavaScript検証が必要です。特定のソリューションをお勧めできません。申し訳ありません。 –

+1

心配しないで、私は検索します。 :) – nicolaswecandoit

2

あなたのコードが正しいことをやっていないと起動しない確認することができ、アラートを表示するには、

require 'uri' 

uri = URI.parse('https://www.youtube.com/watch?v=tYMFIIVOHyo&list=UUH3V-b6weBfTrDuyJgFioOw') 
uri.host # => "www.youtube.com" 
uri.query # => "v=tYMFIIVOHyo&list=UUH3V-b6weBfTrDuyJgFioOw" 
uri.query && URI.decode_www_form(uri.query).to_h # => {"v"=>"tYMFIIVOHyo", "list"=>"UUH3V-b6weBfTrDuyJgFioOw"} 
uri.query && URI.decode_www_form(uri.query).to_h['list'] # => "UUH3V-b6weBfTrDuyJgFioOw" 

uri = URI.parse('https://youtu.be/tYMFIIVOHyo?list=UUH3V-b6weBfTrDuyJgFioOw') 
uri.host # => "youtu.be" 
uri.query # => "list=UUH3V-b6weBfTrDuyJgFioOw" 
uri.query && URI.decode_www_form(uri.query).to_h # => {"list"=>"UUH3V-b6weBfTrDuyJgFioOw"} 
uri.query && URI.decode_www_form(uri.query).to_h['list'] # => "UUH3V-b6weBfTrDuyJgFioOw" 

uri = URI.parse('https://youtu.be/tYMFIIVOHyo') 
uri.host # => "youtu.be" 
uri.query # => nil 
uri.query && URI.decode_www_form(uri.query).to_h # => nil 
uri.query && URI.decode_www_form(uri.query).to_h['list'] # => nil 

URIがSを理解します。これは、URIと呼ばれるルビーが付属して、既存のホイールを使用することですURIを構築することを容易にするためのツールがあります。あなた自身の建物を試すことができますが、オッズは本当に良いですので、何かが恋しくなるので十分にテストされたライブラリを活用してください。

+0

あなたの返事をありがとう。私はコードフォーム@Oleksandrを使用してそれは完全に動作します。 – nicolaswecandoit

+0

YouTubeはURLのパラメータの順序を変更したり、値を持つクエリパラメータを追加したりするまで機能します。私は本当にショートカットを取らないことをお勧めします。彼らはめったに長期的には機能しません。 –