Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pull request #1

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 38 additions & 4 deletions anime_dl/anime_dl.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,17 @@
from anime_dl.scrapper.anime1_me_creator import Anime1MeCreator
from anime_dl.scrapper.xgcartoon_creator import XgCartoonCreator
from anime_dl.scrapper.yhdm_one_creator import YhdmOneCreator
from anime_dl.utils.config_loader import ConfigLoader
from anime_dl.utils.logger import Logger
from anime_dl.validator.episode_name_validator import EpisodeNameValidator
from anime_dl.validator.season_validator import SeasonValidator
from anime_dl.validator.series_name_validator import SeriesNameValidator
from anime_dl.validator.video_url_validator import VideoUrlValidator
import re
import os
import ffmpeg

config_loader = ConfigLoader()
logger = Logger()


Expand All @@ -24,7 +28,9 @@ def main(url: str) -> None:

if re.search(regex.URL["lincartoon"]["domain"], url):
url = url.replace("lincartoon.com", "xgcartoon.com")

if re.search(regex.URL["dailygh"]["domain"], url):
url = url.replace("dailygh.com", "xgcartoon.com")

if re.search(regex.URL["xgcartoon"]["domain"], url):
scrapper = XgCartoonCreator()
elif re.search(regex.URL["anime1.me"]["domain"], url):
Expand All @@ -51,11 +57,39 @@ def main(url: str) -> None:
).set_next(episode_name_validator)

# downloader
seasons = []
for episode in episodes:
if not episode.season in seasons:
seasons.append(episode.season)
for i in range(len(seasons)):
print("("+str(i+1)+") "+seasons[i])
saves = input("Choose the seasons to download(ex: 1,2,3): ").split(",")
for i in range(len(saves)):
saves[i] = seasons[int(saves[i])-1]
ffmpeg_strategy = FfmpegStrategy()
downloader = Downloader(ffmpeg_strategy)
for episode in episodes:
video_url_validator.validate(episode)
downloader.download(episode)
if not episode.season in saves:
continue
fn = f"{episode.series_name}.{episode.season}.{episode.episode_name}.mp4"
fnt = f"{episode.series_name}.{episode.season}.{episode.episode_name}_temp.mp4"
fp = os.path.join(config_loader.get(section="DIRECTORY", key="output"),fn)
fpt = os.path.join(config_loader.get(section="DIRECTORY", key="output"),fnt)
try:
ffmpeg.input(fp).output('x.png', vframes=0, loglevel="quiet").run()
except ffmpeg._run.Error:
try:
os.remove(fp)
except:
pass
try:
os.remove(fpt)
except:
pass
video_url_validator.validate(episode)
downloader.download(episode)
else:
print("Skip "+fn+" (downloaded)")
except Exception as e:
logger.error(traceback.format_exc())
raise e
raise e
5 changes: 5 additions & 0 deletions anime_dl/const/regex.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
"series": "^https?:\/\/www\.lincartoon\.com\/detail\/([_a-zA-Z0-9\-]+)$",
"episode": "^https?:\/\/www\.lincartoon\.com\/video\/([_a-zA-Z0-9\-]+)\/([_a-zA-Z0-9\-]+)\.html$",
},
"dailygh": {
"domain": "^https?:\/\/www\.dailygh\.com\/.+$",
"series": "^https?:\/\/www\.dailygh\.com\/detail\/([_a-zA-Z0-9\-]+)$",
"episode": "^https?:\/\/www\.dailygh\.com\/video\/([_a-zA-Z0-9\-]+)\/([_a-zA-Z0-9\-]+)\.html$",
},
"anime1.me": {
"domain": "^https?:\/\/anime1\.me\/.+$",
"series_s": "^https?:\/\/anime1\.me\/\?cat=[0-9]+$",
Expand Down
19 changes: 11 additions & 8 deletions anime_dl/downloader/ffmpeg_strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,21 @@ def download(self, episode: Episode) -> None:
filename = (
f"{episode.series_name}.{episode.season}.{episode.episode_name}.mp4"
)
fnt = f"{episode.series_name}.{episode.season}.{episode.episode_name}_temp.mp4"
output = os.path.join(
config_loader.get(section="DIRECTORY", key="output"),
sanitize_filename(filename),
)
output_t = os.path.join(
config_loader.get(section="DIRECTORY", key="output"),
sanitize_filename(fnt),
)
os.makedirs(os.path.dirname(output), exist_ok=True)
if os.path.exists(output) is False:
logger.info(f"started download: {filename} ({url})")
stream = ffmpeg.input(url)
stream = ffmpeg.output(stream, output, vcodec="copy", acodec="copy")
ffmpeg.run(stream)
logger.info(f"downloaded: {filename}")
else:
logger.warning(f"file existed: {filename}")
logger.info(f"started download: {filename} ({url})")
stream = ffmpeg.input(url)
stream = ffmpeg.output(stream, output_t, vcodec="copy", acodec="copy")
ffmpeg.run(stream)
os.rename(output_t,output)
logger.info(f"downloaded: {filename}")
except:
logger.error(traceback.format_exc())