Skip to content

Commit

Permalink
Animefreak: Set Episode Number manually when possible (#560)
Browse files Browse the repository at this point in the history
* Set ep_no manually in animefreak

* Remove logging

* Update comment

* Update another comment

* Remove logging that evaded my remove logging commit

* Animefreak: set ep_no in scrape_episodes

* Util.py: Factor ep_no when figuring which episodes to get

* Correct spelling of comments

* Correct spelling of comments II

* cast grammar as int

* Remove string cast

* Cast ep_no as int

* Remove print
  • Loading branch information
AbdullahM0hamed committed Nov 16, 2020
1 parent 4838d08 commit a3d4fd9
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
11 changes: 10 additions & 1 deletion anime_downloader/sites/animefreak.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,16 @@ def _scrape_episodes(self):
# Negative index for episode links in cases where full episode
# list is available or if not default to usual episode list
episode_links = soup.select('ul.check-list')[-1].select('li a')
return [a.get('href') for a in episode_links][::-1]
episodes = [a.get('href') for a in episode_links][::-1]

# Get links ending with episode-.*, e.g. episode-74
episode_numbers = [int(re.search("episode-(\d+)", x.split("/")[-1]).group(1)) for x in episodes if re.search("episode-\d+", x.split("/")[-1])]

# Ensure that the number of episode numbers which have been extracted match the number of episodes
if len(episodes) == len(episode_numbers):
return [(x, y) for x, y in zip(episode_numbers, episodes)]

return episodes

def _scrape_metadata(self):
soup = helpers.soupify(helpers.get(self.url))
Expand Down
15 changes: 12 additions & 3 deletions anime_downloader/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,9 +165,14 @@ def download_metadata(file_format, metdata, episode, filename='metdata.json'):


def split_anime(anime, episode_range):
from anime_downloader.sites.anime import AnimeEpisode
try:
start, end = [int(x) for x in episode_range.split(':')]
anime = anime[start - 1:end - 1]
ep_range = [x for x in range(start, end)]
eps = [x for x in anime._episode_urls if x[0] in ep_range]

ep_cls = AnimeEpisode.subclasses[anime.sitename]
anime = [ep_cls(x[1], parent=anime, ep_no=x[0]) for x in eps]
except ValueError:
# Only one episode specified
episode = int(episode_range)
Expand All @@ -180,7 +185,7 @@ def parse_episode_range(max_range, episode_range):
if not episode_range:
episode_range = '1:'
if episode_range.endswith(':'):
length = max_range if type(max_range) == int else len(max_range)
length = max_range if type(max_range) == int else (int(max_range._episode_urls[-1][0]) - 1)
episode_range += str(length + 1)
if episode_range.startswith(':'):
episode_range = '1' + episode_range
Expand All @@ -199,7 +204,11 @@ def parse_ep_str(anime, grammar):
for episode in split_anime(anime, episode_grammar):
episodes.append(episode)
else:
episodes.append(anime[int(episode_grammar) - 1])
from anime_downloader.sites.anime import AnimeEpisode
ep = [x for x in anime._episode_urls if x[0] == int(grammar)][0]
ep_cls = AnimeEpisode.subclasses[anime.sitename]

episodes.append(ep_cls(ep[1], parent=anime, ep_no=ep[0]))
return episodes


Expand Down

0 comments on commit a3d4fd9

Please sign in to comment.