我在寻找YouTube网址可以使用的所有功能吗?解析所有可能的YouTube网址
http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=related
到目前为止,我已经看过feature = relmfu,related,fvst,fvwrel。有没有这个地方的列表。另外,我的最终目标是从所有可能的youtube网址中提取视频ID(6FWUJJF1ai)。我怎样才能做到这一点?这似乎很困难。有没有人已经做到了?
我在寻找YouTube网址可以使用的所有功能吗?解析所有可能的YouTube网址
http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=related
到目前为止,我已经看过feature = relmfu,related,fvst,fvwrel。有没有这个地方的列表。另外,我的最终目标是从所有可能的youtube网址中提取视频ID(6FWUJJF1ai)。我怎样才能做到这一点?这似乎很困难。有没有人已经做到了?
为你的帮助写了代码....解决的功劳纯粹是弗兰克的。
import urlparse as ups
m = ups.urlparse('http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=related')
print ups.parse_qs(m.query)['v']
从下面的答案https://stackoverflow.com/a/43490746/8534966,我跑了55种不同的测试案例,并能得到51场比赛。见my tests。
所以我写了一些别的,如果代码来解决它:
# Get YouTube video ID
if "watch%3Fv%3D" in youtube_url:
# e.g.: https://www.youtube.com/attribution_link?a=8g8kPrPIi-ecwIsS&u=/watch%3Fv%3DyZv2daTWRZU%26feature%3Dem-uploademail
search_pattern = re.search("watch%3Fv%3D(.*?)%", youtube_url)
if search_pattern:
youtube_id = search_pattern.group(1)
elif "watch?v%3D" in youtube_url:
# e.g.: http://www.youtube.com/attribution_link?a=JdfC0C9V6ZI&u=%2Fwatch%3Fv%3DEhxJLojIE_o%26feature%3Dshare
search_pattern = re.search("v%3D(.*?)&format", youtube_url)
if search_pattern:
youtube_id = search_pattern.group(1)
elif "/e/" in youtube_url:
# e.g.: http://www.youtube.com/e/dQw4w9WgXcQ
youtube_url += " "
search_pattern = re.search("/e/(.*?) ", youtube_url)
if search_pattern:
youtube_id = search_pattern.group(1)
else:
# All else.
search_pattern = re.search("(?:[?&]vi?=|\/embed\/|\/\d\d?\/|\/vi?\/|https?:\/\/(?:www\.)?youtu\.be\/)([^&\n?#]+)",
youtube_url)
if search_pattern:
youtube_id = search_pattern.group(1)
你可能反而要考虑的URL解析器as suggested on this Gist的更广泛。
它会解析超过urlparse可以做的事情。
谁在乎它可以拥有哪些功能? Youtube实际上并不支持'fried_spam'功能,但是如果我向你传递像http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=fried_spam这样的链接,它可以正常工作,并且没有理由不应该从中提取'6FWUjJF1ai'。 – 2012-01-11 04:43:14
@Karl:我如何编写正则表达式来从该URL中提取vid? – Bruce 2012-01-11 04:51:35