mirror of
https://github.com/Arrowar/StreamingCommunity.git
synced 2025-06-07 12:05:35 +00:00
Merge pull request #10 from EmanueleSpadaro/main
feat: download all episodes at once
This commit is contained in:
commit
4f35a4c4ae
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
bin
|
||||||
|
lib
|
||||||
|
lib64
|
||||||
|
*__pycache__
|
||||||
|
pyvenv.cfg
|
||||||
|
|
||||||
|
# Project specific
|
||||||
|
videos/
|
||||||
|
tmp/
|
||||||
|
Src/Util/file_list.txt
|
@ -8,6 +8,7 @@ from Src.Util.m3u8 import dw_m3u8
|
|||||||
|
|
||||||
# General import
|
# General import
|
||||||
import requests, os, re, json, sys
|
import requests, os, re, json, sys
|
||||||
|
from enum import Enum
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
# [func]
|
# [func]
|
||||||
@ -23,7 +24,7 @@ def get_info_tv(id_film, title_name, site_version, domain):
|
|||||||
'User-Agent': get_headers()
|
'User-Agent': get_headers()
|
||||||
})
|
})
|
||||||
|
|
||||||
if req.ok():
|
if req.ok:
|
||||||
return req.json()['props']['title']['seasons_count']
|
return req.json()['props']['title']['seasons_count']
|
||||||
else:
|
else:
|
||||||
console.log(f"[red]Error: {req.status_code}")
|
console.log(f"[red]Error: {req.status_code}")
|
||||||
@ -96,8 +97,31 @@ def get_m3u8_audio(json_win_video, json_win_param, tv_name, n_stagione, n_ep, ep
|
|||||||
console.log(f"[red]Error: {req.status_code}")
|
console.log(f"[red]Error: {req.status_code}")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
def main_dw_tv(tv_id, tv_name, version, domain):
|
def actually_dw(tv_id, eps, index_ep_select, domain, token, tv_name, season_select, lower_tv_name):
|
||||||
|
embed_content = get_iframe(tv_id, eps[index_ep_select]['id'], domain, token)
|
||||||
|
json_win_video, json_win_param = parse_content(embed_content)
|
||||||
|
m3u8_url = get_m3u8_url(json_win_video, json_win_param)
|
||||||
|
m3u8_key = get_m3u8_key_ep(json_win_video, json_win_param, tv_name, season_select, index_ep_select+1, eps[index_ep_select]['name'])
|
||||||
|
|
||||||
|
mp4_name = f"{lower_tv_name.replace('+', '_')}_{str(season_select)}_{str(index_ep_select+1)}"
|
||||||
|
mp4_format = mp4_name + ".mp4"
|
||||||
|
mp4_path = os.path.join("videos", mp4_format)
|
||||||
|
|
||||||
|
m3u8_url_audio = get_m3u8_audio(json_win_video, json_win_param, tv_name, season_select, index_ep_select+1, eps[index_ep_select]['name'])
|
||||||
|
|
||||||
|
if m3u8_url_audio != None:
|
||||||
|
console.print("[red]=> Use m3u8 audio")
|
||||||
|
|
||||||
|
dw_m3u8(m3u8_url, m3u8_url_audio, m3u8_key, mp4_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TvDownloadBehaviour(Enum):
|
||||||
|
DOWNLOAD_EPISODE = 0
|
||||||
|
DOWNLOAD_SEASON = 1
|
||||||
|
|
||||||
|
def main_dw_tv(tv_id, tv_name, version, domain, tv_download_behaviour):
|
||||||
|
|
||||||
token = get_token(tv_id, domain)
|
token = get_token(tv_id, domain)
|
||||||
|
|
||||||
@ -106,23 +130,18 @@ def main_dw_tv(tv_id, tv_name, version, domain):
|
|||||||
console.print(f"[blue]Season find: [red]{get_info_tv(tv_id, tv_name, version, domain)}")
|
console.print(f"[blue]Season find: [red]{get_info_tv(tv_id, tv_name, version, domain)}")
|
||||||
season_select = msg.ask("\n[green]Insert season number: ")
|
season_select = msg.ask("\n[green]Insert season number: ")
|
||||||
|
|
||||||
|
|
||||||
|
console.print(tv_download_behaviour)
|
||||||
|
|
||||||
eps = get_info_season(tv_id, tv_name, domain, version, token, season_select)
|
eps = get_info_season(tv_id, tv_name, domain, version, token, season_select)
|
||||||
for ep in eps:
|
|
||||||
console.print(f"[green]Ep: [blue]{ep['n']} [green]=> [purple]{ep['name']}")
|
|
||||||
index_ep_select = int(msg.ask("\n[green]Insert ep number: ")) - 1
|
|
||||||
|
|
||||||
embed_content = get_iframe(tv_id, eps[index_ep_select]['id'], domain, token)
|
|
||||||
json_win_video, json_win_param = parse_content(embed_content)
|
|
||||||
m3u8_url = get_m3u8_url(json_win_video, json_win_param)
|
|
||||||
m3u8_key = get_m3u8_key_ep(json_win_video, json_win_param, tv_name, season_select, index_ep_select+1, eps[index_ep_select]['name'])
|
|
||||||
|
|
||||||
mp4_name = f"{lower_tv_name.replace('+', '_')}_{str(season_select)}_{str(index_ep_select+1)}"
|
if (tv_download_behaviour == TvDownloadBehaviour.DOWNLOAD_SEASON.value):
|
||||||
mp4_format = mp4_name + ".mp4"
|
for ep in eps:
|
||||||
mp4_path = os.path.join("videos", mp4_format)
|
console.print(f"[green]Ep: [blue]{ep['n']} [green]=> [purple]{ep['name']}")
|
||||||
|
index_ep_select = int(ep['n']) - 1
|
||||||
m3u8_url_audio = get_m3u8_audio(json_win_video, json_win_param, tv_name, season_select, index_ep_select+1, eps[index_ep_select]['name'])
|
actually_dw(tv_id, eps, index_ep_select, domain, token, tv_name, season_select, lower_tv_name)
|
||||||
|
else:
|
||||||
if m3u8_url_audio != None:
|
for ep in eps:
|
||||||
console.print("[red]=> Use m3u8 audio")
|
console.print(f"[green]Ep: [blue]{ep['n']} [green]=> [purple]{ep['name']}")
|
||||||
|
index_ep_select = int(msg.ask("\n[green]Insert ep number: ")) - 1
|
||||||
dw_m3u8(m3u8_url, m3u8_url_audio, m3u8_key, mp4_path)
|
actually_dw(tv_id, eps, index_ep_select, domain, token, tv_name, season_select, lower_tv_name)
|
3
run.py
3
run.py
@ -34,7 +34,8 @@ def main():
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
console.print(f"[green]\nTv select: {db_title[index_select]['name']}")
|
console.print(f"[green]\nTv select: {db_title[index_select]['name']}")
|
||||||
download_tv(db_title[index_select]['id'], db_title[index_select]['name'].replace(" ", "+"), site_version, domain)
|
tv_download_behaviour = int(msg.ask(f"\n[blue]Do you want to download specific episodes or an entire season? (0-> Specific | 1 -> Entire season): ", choices=['0', '1']))
|
||||||
|
download_tv(db_title[index_select]['id'], db_title[index_select]['name'].replace(" ", "+"), site_version, domain, tv_download_behaviour)
|
||||||
|
|
||||||
console.print("\n[red]Done")
|
console.print("\n[red]Done")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user