Fix manifest
This commit is contained in:
parent
e95d814709
commit
20b133dbb6
|
@ -7,7 +7,7 @@ import traceback
|
||||||
import youtube_dlc
|
import youtube_dlc
|
||||||
import urllib.error
|
import urllib.error
|
||||||
from tools.converters import *
|
from tools.converters import *
|
||||||
from tools.extractors import extract_yt_initial_data
|
from tools.extractors import extract_yt_initial_data, extract_yt_initial_player_response
|
||||||
from math import floor
|
from math import floor
|
||||||
from cachetools import TTLCache
|
from cachetools import TTLCache
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ ytdl_opts = {
|
||||||
"playlist_items": "1-100",
|
"playlist_items": "1-100",
|
||||||
"extract_flat": "in_playlist",
|
"extract_flat": "in_playlist",
|
||||||
"write_pages": True,
|
"write_pages": True,
|
||||||
"source_address": "0.0.0.0"
|
"source_address": "0.0.0.0"
|
||||||
}
|
}
|
||||||
ytdl = youtube_dlc.YoutubeDL(ytdl_opts)
|
ytdl = youtube_dlc.YoutubeDL(ytdl_opts)
|
||||||
|
|
||||||
|
@ -255,39 +255,41 @@ def get_more_stuff_from_file(id, result):
|
||||||
"second__liveNow": is_live(r)
|
"second__liveNow": is_live(r)
|
||||||
} for r in [get_useful_recommendation_data(r) for r in recommendations if get_useful_recommendation_data(r)])
|
} for r in [get_useful_recommendation_data(r) for r in recommendations if get_useful_recommendation_data(r)])
|
||||||
|
|
||||||
m_yt_player_config = re.search(r_yt_player_config, content)
|
# m_yt_player_config = re.search(r_yt_player_config, content)
|
||||||
if m_yt_player_config:
|
# if m_yt_player_config:
|
||||||
yt_player_config = json.loads(m_yt_player_config.group(1))
|
# yt_player_config = json.loads(m_yt_player_config.group(1))
|
||||||
player_response = json.loads(yt_player_config["args"]["player_response"])
|
|
||||||
if "dashManifestUrl" in player_response["streamingData"]:
|
|
||||||
result["second__providedDashUrl"] = player_response["streamingData"]["dashManifestUrl"]
|
|
||||||
result["liveNow"] = player_response["videoDetails"]["isLiveContent"]
|
|
||||||
|
|
||||||
# result = player_response
|
player_response = extract_yt_initial_player_response(content)
|
||||||
# return result
|
|
||||||
|
|
||||||
itagDict = {}
|
# result = player_response
|
||||||
for f in player_response["streamingData"]["adaptiveFormats"]:
|
# return result
|
||||||
if "indexRange" in f:
|
|
||||||
itagDict[str(f["itag"])] = {
|
if "dashManifestUrl" in player_response["streamingData"]:
|
||||||
"initRange": f["initRange"],
|
result["second__providedDashUrl"] = player_response["streamingData"]["dashManifestUrl"]
|
||||||
"indexRange": f["indexRange"],
|
result["liveNow"] = player_response["videoDetails"]["isLiveContent"]
|
||||||
"audioChannels": f["audioChannels"] if "audioChannels" in f else None
|
|
||||||
}
|
itagDict = {}
|
||||||
for f in result["adaptiveFormats"]:
|
for f in player_response["streamingData"]["adaptiveFormats"]:
|
||||||
if f["itag"] in itagDict:
|
if "indexRange" in f:
|
||||||
i = itagDict[f["itag"]]
|
itagDict[str(f["itag"])] = {
|
||||||
f["init"] = "{}-{}".format(i["initRange"]["start"], i["initRange"]["end"])
|
"initRange": f["initRange"],
|
||||||
f["index"] = "{}-{}".format(i["indexRange"]["start"], i["indexRange"]["end"])
|
"indexRange": f["indexRange"],
|
||||||
f["second__audioChannels"] = i["audioChannels"]
|
"audioChannels": f["audioChannels"] if "audioChannels" in f else None
|
||||||
if f["second__height"]:
|
}
|
||||||
resolution = str(f["second__height"]) + "p"
|
for f in result["adaptiveFormats"]:
|
||||||
f["resolution"] = resolution
|
if f["itag"] in itagDict:
|
||||||
label = resolution
|
i = itagDict[f["itag"]]
|
||||||
if f["fps"] > 30:
|
f["init"] = "{}-{}".format(i["initRange"]["start"], i["initRange"]["end"])
|
||||||
label += str(f["fps"])
|
f["index"] = "{}-{}".format(i["indexRange"]["start"], i["indexRange"]["end"])
|
||||||
f["qualityLabel"] = label
|
f["second__audioChannels"] = i["audioChannels"]
|
||||||
f["second__order"] = format_order(f)
|
if f["second__height"]:
|
||||||
|
resolution = str(f["second__height"]) + "p"
|
||||||
|
f["resolution"] = resolution
|
||||||
|
label = resolution
|
||||||
|
if f["fps"] > 30:
|
||||||
|
label += str(f["fps"])
|
||||||
|
f["qualityLabel"] = label
|
||||||
|
f["second__order"] = format_order(f)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
print("messed up extracting recommendations.")
|
print("messed up extracting recommendations.")
|
||||||
|
|
|
@ -2,6 +2,7 @@ import re
|
||||||
import json
|
import json
|
||||||
|
|
||||||
r_yt_initial_data = re.compile(r"""(?:^\s*window\["ytInitialData"\]|var ytInitialData) = (\{.+?\});(?:\s*$|</script>)""", re.S + re.M)
|
r_yt_initial_data = re.compile(r"""(?:^\s*window\["ytInitialData"\]|var ytInitialData) = (\{.+?\});(?:\s*$|</script>)""", re.S + re.M)
|
||||||
|
r_yt_initial_player_response = re.compile(r"""(?:^\s*window\["ytInitialPlayerResponse"\]|var ytInitialPlayerResponse) = (\{.+?\});(?:\s*$|</script>|var )""", re.S + re.M)
|
||||||
|
|
||||||
def extract_yt_initial_data(content):
|
def extract_yt_initial_data(content):
|
||||||
m_yt_initial_data = re.search(r_yt_initial_data, content)
|
m_yt_initial_data = re.search(r_yt_initial_data, content)
|
||||||
|
@ -10,3 +11,11 @@ def extract_yt_initial_data(content):
|
||||||
return yt_initial_data
|
return yt_initial_data
|
||||||
else:
|
else:
|
||||||
raise Exception("Could not match ytInitialData in content")
|
raise Exception("Could not match ytInitialData in content")
|
||||||
|
|
||||||
|
def extract_yt_initial_player_response(content):
|
||||||
|
m_yt_initial_player_response = re.search(r_yt_initial_player_response, content)
|
||||||
|
if m_yt_initial_player_response:
|
||||||
|
yt_initial_player_response = json.loads(m_yt_initial_player_response.group(1))
|
||||||
|
return yt_initial_player_response
|
||||||
|
else:
|
||||||
|
raise Exception("Could not match ytInitialPlayerResponse in content")
|
||||||
|
|
Loading…
Reference in New Issue