ruby-on-rails – 解析youtube网址
发布时间:2020-12-16 19:29:49 所属栏目:百科 来源:网络整理
导读:我写了一个 ruby youtube url解析器.它被设计为输入以下结构之一的youtube url(这些是我能找到的youtube url结构,也许还有更多?): http://youtu.be/sGE4HMvDe-Qhttp://www.youtube.com/watch?v=Lp7E973zozcfeature=relmfuhttp://www.youtube.com/p/A0C3C1D
我写了一个
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’ 我写的解析器适用于这些网址,但看起来有点脆弱和冗长,我只是想知道是否有人可以建议一个更好的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域的有效性无论如何都没有得到验证,我已经删除了一些slop. 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 – 使用geocoder gem进行测试
- ruby-on-rails – Rails:渴望加载as_json包含
- oracle ADF 12C错误:Calling the constructor for class or
- c – 为什么类的静态成员函数没有“常量正确性”的概念?
- Swift:按下标访问元组
- 在sqlite中将新列插入表中?
- c – ofstream :: operator <<(streambuf)是一种复制文件
- c# – 为什么不能从通用约束中隐含地推断出`this`的类型转换
- Cocos2D-X shader(四) 利用shader改变图片色相(Hue)
- Swift(十、类和结构体)