Как предотвратить ошибку «HTTPS NOT SUPPORTED» в youtube-dl путем проверки идентификаторов видео? - PullRequest
0 голосов
/ 10 июля 2019

Я использую модуль pafy для получения URL-адресов для аудио видео на YouTube. Сам Pafy использует модуль youtube-dl для подключения к youtube. Идентификатор видео находится в части URL: '/ watch? V = videoID'

Я храню videoId этих видео, но время от времени видео больше не доступно, и поэтому мне нужно проверить. Проверки, которые я пытался осуществить, не смогли выявить некоторые крайние случаи, например, запрет на авторские права для моей страны на этом видео.

Я уже попробовал 2 вещи. Использование YouTube API oEmbed и использование официального API YouTube.

import requests


YT_API_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

answers = []
answers2 = []

def isValidVid(vId):

    add = f'https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v={str(vId)}'
    answer = requests.get(add)

    answers.append(answer)

    state = answer.ok
    if not state:
        print(f'{vId} has become invalid ')
    return state



def isValidVid2(vId):

    add = f'https://www.googleapis.com/youtube/v3/videos?part=id&id={vId}&key={YT_API_KEY}'
    answer = requests.get(add)

    answers2.append(answer)

    state = answer.ok
    if not state:
        print(f'{vId} has become invalid ')
    return state

vIds=['x26LZrX_vuI', #copyright blocked in my country
    'tRqCOIsTx8M', #works fine
    ]

for vid in vIds:
    isValidVid(vid)
    isValidVid2(vid)

for a,b in zip(answers,answers2):
    print(a.content.split(','),'\n')
    print(b.content.split(','),'\n'*2)

Выполнение этого фрагмента приводит к следующему выводу (извините, выглядит уродливо):

['b\'{"provider_name":"YouTube"', '"thumbnail_url":"https:\\\\/\\\\/i.ytimg.com\\\\/vi\\\\/x26LZrX_vuI\\\\/hqdefault.jpg"', '"type":"video"', '"thumbnail_width":480', '"width":459', '"version":"1.0"', '"thumbnail_height":360', '"author_url":"https:\\\\/\\\\/www.youtube.com\\\\/user\\\\/whiteassboy9"', '"author_name":"whiteassboy9"', '"height":344', '"provider_url":"https:\\\\/\\\\/www.youtube.com\\\\/"', '"html":"\\\\u003ciframe width=\\\\"459\\\\" height=\\\\"344\\\\" src=\\\\"https:\\\\/\\\\/www.youtube.com\\\\/embed\\\\/x26LZrX_vuI?feature=oembed\\\\" frameborder=\\\\"0\\\\" allow=\\\\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\\\\" allowfullscreen\\\\u003e\\\\u003c\\\\/iframe\\\\u003e"', '"title":"Cradle Of Filth Hallowed Be Thy Name Lyrics"}\'']

['b\'{\\n "kind": "youtube#videoListResponse"', '\\n "etag": "\\\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/0OApMzmvJ5MISdLQorUKdgn8QAI\\\\""', '\\n "pageInfo": {\\n  "totalResults": 1', '\\n  "resultsPerPage": 1\\n }', '\\n "items": [\\n  {\\n   "kind": "youtube#video"', '\\n   "etag": "\\\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/Sdc-dVIem9K8Yo5a4co2ZdNy_b8\\\\""', '\\n   "id": "x26LZrX_vuI"\\n  }\\n ]\\n}\\n\'']


['b\'{"version":"1.0"', '"provider_name":"YouTube"', '"thumbnail_url":"https:\\\\/\\\\/i.ytimg.com\\\\/vi\\\\/tRqCOIsTx8M\\\\/hqdefault.jpg"', '"author_url":"https:\\\\/\\\\/www.youtube.com\\\\/user\\\\/Kikuku94"', '"width":459', '"thumbnail_height":360', '"provider_url":"https:\\\\/\\\\/www.youtube.com\\\\/"', '"html":"\\\\u003ciframe width=\\\\"459\\\\" height=\\\\"344\\\\" src=\\\\"https:\\\\/\\\\/www.youtube.com\\\\/embed\\\\/tRqCOIsTx8M?feature=oembed\\\\" frameborder=\\\\"0\\\\" allow=\\\\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\\\\" allowfullscreen\\\\u003e\\\\u003c\\\\/iframe\\\\u003e"', '"height":344', '"type":"video"', '"thumbnail_width":480', '"author_name":"Kikuku94"', '"title":"Metallica - Disposable Heroes (Studio Version)"}\''] 

['b\'{\\n "kind": "youtube#videoListResponse"', '\\n "etag": "\\\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/HP3fEMhAlfsUHWjDdwxAE4mcxLg\\\\""', '\\n "pageInfo": {\\n  "totalResults": 1', '\\n  "resultsPerPage": 1\\n }', '\\n "items": [\\n  {\\n   "kind": "youtube#video"', '\\n   "etag": "\\\\"Bdx4f4ps3xCOOo1WZ91nTLkRZ_c/h2d05hbW0K56lbhpO-q8FN9qVdU\\\\""', '\\n   "id": "tRqCOIsTx8M"\\n  }\\n ]\\n}\\n\'']

Если я использую pafy для получения URL-адреса аудио-ресурса после использования одной из функций validation, возникает ошибка с youtube-dl, которую я распознаю как ту же ошибку, которую вы получите при предоставлении неверного идентификатора видео:

mrl = pafy.new(vIds[0]).url

OSError: ERROR: HTTP is not supported.

Я предполагаю, что здесь больше ловушек, чем запретов на авторское право, таких как частные видео, если у вас есть какие-то уловки, которые я слушаю!

Спасибо за помощь!

...