2

私はこのようなhtmlを持っています

<iframe width="560" height="315" src="http://www.youtube.com/embed/Wa6CA3YqV2Q" frameborder="0" allowfullscreen></iframe>

Wa6CA3YqV2Q正規表現でビデオIDを取得するにはどうすればよいですか? これを達成する他の方法はありますか?

UPD: Nokogiri を使用しましたがhttp://www.youtube.com/embed/Wa6CA3YqV2Q、なんとか取得できました。このリンクを含むビデオの ID を取得するにはどうすればよいですか?

4

5 に答える 5

5

以下のコードは、任意の vimeo または youtube の URL を受け取り、ビデオ ID とプロバイダーを返します。

あなたのモデルで

def parse_video_url(url)
    @url = url

    youtube_formats = [
        %r(https?://youtu\.be/(.+)),
        %r(https?://www\.youtube\.com/watch\?v=(.*?)(&|#|$)),
        %r(https?://www\.youtube\.com/embed/(.*?)(\?|$)),
        %r(https?://www\.youtube\.com/v/(.*?)(#|\?|$)),
        %r(https?://www\.youtube\.com/user/.*?#\w/\w/\w/\w/(.+)\b)
      ]

    vimeo_formats = [%r(https?://vimeo.com\/(\d+)), %r(https?:\/\/(www\.)?vimeo.com\/(\d+))]  

    @url.strip!

    if @url.include? "youtu"
      youtube_formats.find { |format| @url =~ format } and $1
      @results = {provider: "youtube", id: $1}
      @results
    elsif @url.include? "vimeo"  
      vimeo_formats.find { |format| @url =~ format } and $1
      @results = {provider: "vimeo", id: $1}
      @results
    else
      return nil # There should probably be some error message here
    end  
end

次に、コントローラーで次のように呼び出します。

@results = @course.parse_video_url(@course.video_url)
# Access the hash with @results[:provider] or @results [:id]

ビューでは、IF ステートメントを記述して、プロバイダー/ID コンボに関連する埋め込みコードを表示できます。

于 2015-04-03T08:18:17.507 に答える
1

以下で終了

string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q'

result =  string.split('/').last
于 2013-06-14T09:01:56.687 に答える
0

あなたが使用することができます

string.scan(/src="\S+\/(\w+)"/)[0][0]

しかし、多くの HTML 作業を行っている場合は、Nokogiri などの完全な HTML パーサーまたはおそらくもっと軽量なものを使用することをお勧めします。

于 2013-06-14T07:47:11.093 に答える
0

正規表現で解析できるかもしれませんが、自分が何をしているのか本当にわかっていない限り、任意の html を正規表現で解析するのは良くありません。このテーマについては歴史的な論争がたくさんあります。興味がある場合は検索してください。

適切な方法は、ドキュメントを解析することです。Rails 用の優れたパーサーがあります。

http://nokogiri.org/

于 2013-06-14T07:49:06.993 に答える
0

これを試して:

string = 'http://www.youtube.com/embed/Wa6CA3YqV2Q'
regex = /^(?:https?:\/\/)?(?:www\.)?\w*\.\w*\/(?:watch\?v=)?((?:p\/)?[\w\-]+)/
match = string.match(regex)
if match
  return match[1]
end
return ''

ここから入手して、少し変更しました: YouTube URL の解析

于 2013-12-20T06:59:55.163 に答える