gpt4 book ai didi

ruby-on-rails - 解析 youtube 网址

转载 作者:数据小太阳 更新时间:2023-10-29 06:51:18 26 4
gpt4 key购买 nike

我写了一个 ruby​​ youtube url 解析器。它旨在接受以下结构之一的 youtube url 输入(这些是目前我能找到的 youtube url 结构,也许还有更多?):

http://youtu.be/sGE4HMvDe-Q
http://www.youtube.com/watch?v=Lp7E973zozc&feature=relmfu
http://www.youtube.com/p/A0C3C1D163BE880A?hl=en_US&fs=1

目的是仅保存剪辑或播放列表的 ID,以便可以将其嵌入,因此如果它是剪辑:'sGE4HMvDe-Q',或者如果它是播放列表:'p/A0C3C1D163BE880A'

我编写的解析器对于这些 url 工作正常,但似乎有点脆弱和冗长,我只是想知道是否有人可以建议一个更好的 ruby​​ 方法来解决这个问题?

def parse_youtube
a = url.split('//').last.split('/')
b = a.last.split('watch?v=').last.split('?').first.split('&').first
if a[1] == 'p'
url = "p/#{b}"
else
url = b
end
end

最佳答案

def parse_youtube url
regex = /(?:.be\/|\/watch\?v=|\/(?=p\/))([\w\/\-]+)/
url.match(regex)[1]
end

urls = %w[http://youtu.be/sGE4HMvDe-Q
http://www.youtube.com/watch?v=Lp7E973zozc&feature=relmfu
http://www.youtube.com/p/A0C3C1D163BE880A?hl=en_US&fs=1]

urls.each {|url| puts parse_youtube url }
# sGE4HMvDe-Q
# Lp7E973zozc
# p/A0C3C1D163BE880A

根据您的使用方式,您可能需要更好地验证该 URL 确实来自 youtube。

更新:

几年后回到这个话题。我一直对原始答案的草率感到恼火。由于 Youtube 域的有效性无论如何都没有得到验证,我删除了一些内容。

NODE                     EXPLANATION
--------------------------------------------------------------------------------
(?: group, but do not capture:
--------------------------------------------------------------------------------
. any character except \n
--------------------------------------------------------------------------------
be 'be'
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
watch 'watch'
--------------------------------------------------------------------------------
\? '?'
--------------------------------------------------------------------------------
v= 'v='
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
(?= look ahead to see if there is:
--------------------------------------------------------------------------------
p 'p'
--------------------------------------------------------------------------------
\/ '/'
--------------------------------------------------------------------------------
) end of look-ahead
--------------------------------------------------------------------------------
) end of grouping
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
[\w\/\-]+ any character of: word characters (a-z,
A-Z, 0-9, _), '\/', '\-' (1 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
) end of \1

关于ruby-on-rails - 解析 youtube 网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6556772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com