2012-01-11 88 views
2

我在尋找YouTube網址可以使用的所有功能嗎?解析所有可能的YouTube網址

http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=related 

到目前爲止,我已經看過feature = relmfu,related,fvst,fvwrel。有沒有這個地方的列表。另外,我的最終目標是從所有可能的youtube網址中提取視頻ID(6FWUJJF1ai)。我怎樣才能做到這一點?這似乎很困難。有沒有人已經做到了?

+2

誰在乎它可以擁有哪些功能? Youtube實際上並不支持'fried_spam'功能,但是如果我向你傳遞像http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=fried_spam這樣的鏈接,它可以正常工作,並且沒有理由不應該從中提取'6FWUjJF1ai'。 – 2012-01-11 04:43:14

+0

@Karl:我如何編寫正則表達式來從該URL中提取vid? – Bruce 2012-01-11 04:51:35

回答

6

您可以使用urlparse從您的網址獲取查詢字符串,然後您可以使用parse_qs從查詢字符串中獲取視頻ID。

+0

確實。比正則表達式會給你帶來的好得多。 – 2012-01-11 04:52:23

+0

@Frank:非常感謝!我一直在尋找這個很長一段時間...... – Bruce 2012-01-11 05:08:59

3

爲你的幫助寫了代碼....解決的功勞純粹是弗蘭克的。

import urlparse as ups 
m = ups.urlparse('http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=related') 
print ups.parse_qs(m.query)['v'] 
0

從下面的答案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)