我在尋找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