Module niconico_dl.templates
Expand source code
# niconico_dl - Templates
from copy import copy
HEADERS = [
{
"Host": "api.dmc.nico",
"Connection": "keep-alive",
"Accept": "*/*",
"Access-Control-Request-Method": "POST",
"Access-Control-Request-Headers": "content-type",
"Origin": "https://www.nicovideo.jp",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Dest": "empty",
"Referer": "https://www.nicovideo.jp/",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ja,en;q=0.9,en-GB;q=0.8,en-US;q=0.7"
},
{
"Host": "api.dmc.nico",
"Connection": "keep-alive",
"sec-ch-ua": '"Microsoft Edge";v="93", " Not;A Brand";v="99", "Chromium";v="93"',
"Accept": "application/json",
"Content-Type": "application/json",
"sec-ch-ua-mobile": "?0",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38",
"sec-ch-ua-platform": "Windows",
"Origin": "https://www.nicovideo.jp",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "https://www.nicovideo.jp/",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ja,en;q=0.9,en-GB;q=0.8,en-US;q=0.7"
},
{
"Host": "www.nicovideo.jp",
"Connection": "keep-alive",
"Cache-Control": "max-age=0",
"sec-ch-ua": '"Microsoft Edge";v="93", " Not;A Brand";v="99", "Chromium";v="93"',
"sec-ch-ua-mobile": "?0",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.40 Safari/537.36 Edg/92.0.902.9",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Sec-Fetch-Site": "none",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-User": "?1",
"Sec-Fetch-Dest": "document",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ja,en;q=0.9,en-GB;q=0.8,en-US;q=0.7"
}
]
MODES = ("hls_parameters", "http_output_download_parameters")
URLS = {
"base_heartbeat": "https://api.dmc.nico/api/sessions"
}
def _make_sessiondata(movie: dict, mode: str = MODES[0]) -> dict:
# 動画データからニコニコとの通信に使うセッションデータを作る関数。
data = {}
session = movie["session"]
data["content_type"] = "movie"
data["content_src_id_sets"] = [{"content_src_ids": []}]
lv, la = len(session["videos"]), len(session["audios"])
for _ in range(lv if lv >= la else la):
src_id_to_mux = {
"src_id_to_mux": {
"video_src_ids": copy(session["videos"]),
"audio_src_ids": copy(session["audios"])
}
}
data["content_src_id_sets"][0]["content_src_ids"].append(src_id_to_mux)
if mode == MODES[1]:
break
for k in ("videos", "audios"):
if len(session[k]) != 1:
session[k].pop(0)
del src_id_to_mux
data["timing_constraint"] = "unlimited"
data["keep_method"] = {
"heartbeat": {
"lifetime": session["heartbeatLifetime"]
}
}
data["recipe_id"] = session["recipeId"]
data["priority"] = session["priority"]
if mode in MODES:
parameters = {
MODES[1]: {
"use_well_known_port": "yes" if session["urls"][0]["isWellKnownPort"] else "no",
"use_ssl": "yes" if session["urls"][0]["isSsl"] else "no",
"transfer_preset": ""
}
}
if mode == MODES[0]:
parameters[MODES[0]] = parameters[MODES[1]]
parameters[MODES[0]]["segment_duration"] = 6000
del parameters[MODES[1]]
else:
raise ValueError("modeは`hls_parameters`か`http_output_download_parameters`である必要があります。")
data["protocol"] = {
"name": "http",
"parameters": {
"http_parameters": {
"parameters": parameters
}
}
}
data["content_uri"] = ""
data["session_operation_auth"] = {
"session_operation_auth_by_signature": {
"token": session["token"],
"signature": session["signature"]
}
}
data["content_id"] = session["contentId"]
data["content_auth"] = {
"auth_type": session["authTypes"]["http"],
"content_key_timeout": session["contentKeyTimeout"],
"service_id": "nicovideo",
"service_user_id": str(session["serviceUserId"])
}
data["client_info"] = {
"player_id": session["playerId"]
}
del session, movie
return {"session": data}
class NicoNicoAcquisitionFailed(Exception):
"""ニコニコ動画から情報を取得するのに失敗した際に発生するもの。"""
pass
Classes
class NicoNicoAcquisitionFailed (*args, **kwargs)
-
ニコニコ動画から情報を取得するのに失敗した際に発生するもの。
Expand source code
class NicoNicoAcquisitionFailed(Exception): """ニコニコ動画から情報を取得するのに失敗した際に発生するもの。""" pass
Ancestors
- builtins.Exception
- builtins.BaseException