Giter Club home page Giter Club logo

animdl's Introduction

A highly efficient, powerful and fast anime scraper.


Overview

Installation

This project can be installed on to your device via different mechanisms, these mechanisms are listed below in the order of ease.

  1. PIP Installs Packages aka PIP Installation

    pip install animdl
  2. Installation from source

    First ensure Poetry is installed.

    Then run the following command:

    git clone https://www.github.com/justfoolingaround/animdl.git \
    && cd animdl \
    && poetry build \
    && pip install animdl \
    && cd ..

Support

You can contact the developer directly via this email. However, the most recommended way is to head to the discord server.

If you run into issues or want to request a new feature, you are encouraged to make a GitHub issue, won't bite you, trust me.

Usage

Usage: animdl [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  download  Download your favorite anime by query.
  grab      Stream the stream links to the stdout stream for external usage.
  schedule  Know which animes are going over the air when.
  search    Search for an anime in the provider.
  stream    Stream your favorite anime by query.

The stream option is disabled automatically if the project cannot find any of the supported streamers.

stream / download / grab

These commands are the main set of command in the project. All of them scrape the target site, the only difference is how it is used.

  • The stream option tosses the stream url to a player so that you can seamlessly binge your anime.

    • Streaming supports Discord Rich Presence with pypresence.
  • The download option downloads the anime to your local machine.

    • Downloading is done in the directory where you run the project.
    • -d flag can be used to specify a download folder as well.
    • Internet Download Manager is supported and can be used via --idm flag. This downloader cannot download HLS streams.
    • The project cannot modify the content type. That means, videos in the ts format need to be converted to other formats externally post download.
    • The downloading process cannot be controlled.
      • If download speed fluctuates, it is a server-side problem. The project cannot "fix" it.
      • If the download is slow, it is based on the server's upload speed. The project cannot "fix" it. Speedtests are not reliable and their results will not correspond to the download speeds obtained through the project.
    • The project utilises the fastest and the most straight-forward way to download, there is no further optimisation, period.
  • The grab option simply streams the stream url to the stdout stream.

    • This is useful for external usage and testing.
animdl stream "One Piece" 

Providers can be specified by using provider prefix, 9anime:One Piece, will use the 9Anime provider.

You can specify direct urls to the provider; the project will automatically detect the provider and continue scraping. This method ignores searching.

-r / --range argument

This argument is shared by stream, download and grab, it can be used to hand over custom ranges for selecting episodes.

  • This argument constructs a check for the episodes, hence, will not throw error if the episode count does not meet the scraping count.
  • This argument can be used in reverse order, the constructer will automatically fix the order.
  • Range intersections will not cause issues.
  • 1 will be treated as a singular range from 1 to 1.
  • 1-2 will be treated as a range from 1 to 2.
  • 1-2,230-340 will be treated as two different checks. The first check will be from 1 to 2, the second from 230 to 340.
  • You can use any separators, the project will automatically parse your range string.

--index argument

This argument is shared by stream, download and grab, it can be used to automatically select the search result. The default argument for index is 1, that is, the first stream.

--index 2 will automatically select the second search result without prompt.

-s / --special argument

This argument is shared by stream and download, it can be used to hand over the latest episode of the anime by using -s latest. Similarly, the latest 2 episodes can be selected via latest-2.

  • This argument is compatible with -r, you will get the last episode of the range.

-q / --quality argument

This argument is incredibly powerful and can be used to select streams from their attributes.

  • 1080 will select the stream with the resolution of 1080.
  • 1080/worst will do the above but will also select the worst quality stream if that stream is not available.
  • best[title] will select the best stream that has the title attribute.
  • best[title=r'^DUB'] will select the stream with the title attribute that matches the regular expression. If r is not used, the expression will be treated as a literal string.
  • The normal integers can be substituted with best and worst for special parsing.
  • You need not mention the quality in the argument if you just want an attribute.

You can find out what attributes are available for each stream by using the grab command.

[
  {
    "stream_url": "https://yqwym.vizcloud.digital/simple/EqPFI_kQBAro1HhYl67rC8UuoVwHubb7CkJ7rqk+wYMnU94US2El/br/list.m3u8#.mp4",
    "headers": {
      "referer": "https://vizcloud.digital/embed/83P7OX0N8PLE"
    }
  },
  {
    "stream_url": "https://yqwym.vidstream.pro/EqPVIPsMWl322yVezviuGdNz9wsVp_2ySFow5Od52MBlQ9QQG34s9aQ0yhbkTfyI+tzdG4991O3X4fVqACOikmeZRvMNGrBeQ5aivXxFIkYzNJElHAM1icyfowvCviiceQevRCxV9F7i7CIYt0hIz61716gsQxXskJ6eV4Gg4_OC/br/list.m3u8",
    "headers": {
      "referer": "https://vizcloud.digital/embed/83P7OX0N8PLE"
    }
  },
  {
    "stream_url": "https://yzqq.mcloud.to/12a3c523f910040ae8d4785897aeeb0bc52ea15c07b9b6fb0a427baea96ed0842f54d0184c6820e9f935c248a146eb8df28cc21a817ad2e8c0eefd680420a692659945f21618bd454698bcbf6e42394f3d4ee734180c3281ce9bb00fcaa2298e7913aa40036bbb0abaf07046a14442c2f32c9df66b1a/r/list.m3u8",
    "headers": {
      "referer": "https://mcloud.to/embed/k18xp6"
    }
  }
]

This is the prettified output of animdl grab "9anime:one piece", and the stream has headers and stream_url attributes.

If you feel that a particular stream is fast enough for you, -q [stream_url=r'.+mcloud\.to.+'](or equivalent, this is just for testing) will select that stream.

Conclusion

This project posses powerful commands and arguments to aid them, there are many arguments that aren't specified here but are available in the project. This is done because these commands are advanced usage commands which may just cause confusion. Feel free to ask about them.

Providers

Please head to animdl's official provider benchmarks.

The images in that repository are automatically updated every few hours, hence, please be aware that the developers already know what's broken.

Some providers may not work due to DDoS protection services. We try our best to fix what's fixable. There are plenty of alternatives even if one goes down in the project.

The project contains providers that aren't mentioned here. This is intentional.

Configurations

Configuration files can be globally or locally be specified.

You can use the ANIMDL_CONFIG environment variable to specify a configuration file on a global level.

Else, a file with the name animdl_config.yml in the working directory will be used if available.

Futhermore, the configuration files can be globally placed at:

  • Windows:
    • %USERPROFILE%/.animdl/config.yml
  • Anything else:
    • $HOME/.config/animdl/config.yml

Only a singular configuration file in the above priority order is used, configurations aren't merged.

Setting up providers

You can specify a default provider using the default_provider configuration option.

default_provider: animixplay

This project uses a standardised url per provider. This makes the project capable of using different official proxies of the same provider.

This can be specified via site_urls by using the following configuration.

site_urls:
    animixplay: https://www.animixplay.to/

Quality selection

You can specify a default quality using the quality_string configuration option.

quality_string: best[subtitle]/best

Player selection

You can specify a default player using the default_player configuration option.

default_player: mpv

You can change player attributes, such as, what the executable is and what opts are to be passed during the player call.

players:
    mpv:
        executable: mpv
        opts: []

If the executable is found, the player will be eligible for use.

Currently supported players are:

ffmpeg set-up

You can make the project force ffmpeg for HLS downloading (awfully slow) and merging subtitles for downloads when external subtitles are available.

ffmpeg:
    executable: ffmpeg
    hls_download: false
    submerge: true

Discord Rich Presence set-up

This project supports RPC clients, this can be enabled only from the configuration. To use this, you must have pypresence installed via:

pip install pypresence
discord_presence: true

fzf set-up

You can force the project search prompts to use fzf.

This is an incredibly powerful tool and can enchance the user experience by a lot. For obvious reasons, you need to have it installed and on PATH (can be configured to use an executable path as well).

fzf:
    executable: fzf
    opts: []
    state: true

Users can benefit by using fzf and animdl stream twist: as this allows them to browse the entire Twist library with a heavenly interface.

The above screenshot has fzf's user theme configured.

Schedule set-up

The project can be used to view the schedule of the upcoming anime for the week with the user cherished time and date formats.

schedule:
    site_url: https://graphql.anilist.co/ # DO NOT CHANGE UNLESS YOU KNOW WHAT YOU'RE DOING
    date_format: "%b. %d, %A"
    time_format: "%X"

Please refer to Python datetime.strftime documentation for the available formats.

Contributing to the project

It is not recommended for any average Python developers to engage with the project codebase as the mechanisms used are extremely high level and requires greater understanding of the codebase and Python in general.

If you wish to, you can contribute to the project by submitting a pull request.

The best way to contribute would be to suggest the developer a provider or a feature, more better if you can show a logic of how that can be done, you'll be mentioned and thanked!

Project disclaimer

The disclaimer of the project can be found here.

In a nutshell

  • Abuses the developer's braincells in scraping to give about the fastest and most efficient toolset.
  • Brings about a highly powerful codebase which is just about appropriate for scraping.
  • Does not use any heavy dependencies by default.
  • Does not use selenium or JavaScript evaluators for scraping.
  • Integrates powerful internal tools such as a HLS downloader.
  • Is maintained, heavily as far as possible.

Code redistribution

Feel free to do so and take references from the codebase. You need not give credit to the project or justfoolingaround, however, please do a blame check and see if the contributor wants to be credited.

From the author

I just maintain this project for my gratification. I'd love to hear from you about your projects and problems (even unrelated to the project), so feel free to contact me.

I'm glad you're here!

Honourable mentions

Similar Projects

These are actively maintained projects, each of which has its own unique features and functionality.

Internal Dependencies

The project would definitely not be complete or even in a working state if it weren't for these dependencies.

Sponsoring the project

Usually sponsors means funding which consequently means money but for the project, it means stars. Feel free to star the project if you think it is worthy of one. Moreover, you can just talk, banter and argue with the developer as that way you'll be paying with your time.

You are an absolute legend, keep being awesome!

animdl's People

Contributors

chenrui333 avatar dependabot[bot] avatar insomniachi avatar ivordir avatar justchokingaround avatar justfoolingaround avatar olavfosse avatar port19x avatar realcyguy avatar riimuru avatar rmanky avatar sdaqo avatar sitiom avatar stevenc4 avatar synertry avatar uhwot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

animdl's Issues

A Standalone executable with automated installation script and enhancement

Hello,
Got an eye on your project and it's great,there is one problem you need to have python installed and lets be real not every one who watches anime, is a programmer or there can be some other problem.i had a little time to spare from my exams, so i created a standalone executable for your script using Nuitka(a python compiler).it converts all the constructs to c,c++ so there is a significant boost over cpython.also i created a batch script(animedl_install.bat) for installation that automatically copies all the files to C:\Program Data and adds the executable to PATH.i could have created a installer but that would have needed some modification to your animedl.py file and i was lazy for that(but if you need i can create one).so after installation you just need to open cmd and type animedl to get started.i have uploaded the zip over my mega account.one more thing ,i recommend you also having a interactive user interface,for example if user uses it from cmd with arguments then run it like its running now but if user runs the executable or python script without giving any argument(i.e grab,download) then run it in a interactive mode with a menu like in this repo or better.its a sorry state script (using curses programming in python) i wrote a while back.supports selecting options from keyboard keys(UP/DOWN) and also mouse support.i can help you with the interactive menu,that is if i get any time from my exams😅.also one more thing ,add versioning to your git repo

i hope that you go with some of my recommendations
regards,

how to add and use mpv

Sorry to bother you again, the installation went good, now I can't figure out how to add and use mpv, and how to select video quality.

It's me, AGAIN!

it just feels like I'm nagging you at this point, but I still get the same issue (Attachment)

I'm sorry for opening issues again and again, and for not mentioning this earlier

(also quick note, you forgot to mention the end feature (-e) and the canon one (--canon) in your readme.md :P)

--end / -e flag for stream

The --end flag is available for both download and grab, but not for stream. So I have to force-stop animdl quickly before the next episode starts playing.

Please consider adding --end flag for streaming too.

How to use?

It would be helpfull if you let us know how to use it, not only that, when i tried to run the cli.py file, i got certain errors. Please try fixing these

Download Folder

Hey it's me again,
I was recently trying to download the anime "KUMO DESU GA, NANI KA?" with animdl, and I encountered an issue because the anime name has a question mark and the thing is. windows doesn't allow folder names with a question mark, a possible solution that I thought of was an option to rename the folder yourself, I'm a little bit nerdy about this stuff but not too nerdy that I can solve it myself so I reached out :P

Selecting Multiple Anime

Here is a snippet to help with parsing input.

def parse_range(a):
    List = []
    for element in a.split(','):
        parts = [int(x) for x in element.split('-')]
        if len(parts) == 1:
            List.append(parts[0])
        else:
            for i in range(min(parts), max(parts) + 1):
                List.append(i)
    # filtering doubles
    res = []
    [res.append(x) for x in List if x not in res]
    return res

Quality selection

First of all, a great thing you got going on here, it's exactly what I was looking for :p.

second, I mainly use it to batch download animes and since quality affects the file size, it would be a lot more efficient for me to be able to lower the quality (and also because my display is 720p lol)

Keep up the good work!

[animepahe] Crash when there is no result

Hey,

Just to inform you that animdl search "re zero s1" --provider=animepahe fails:

Traceback (most recent call last):
  File "D:\Code\http\haishin\storage\animdl/animdl.py", line 29, in <module>
    __animdl_cli__()
  File "D:\Programmes\Python\3-8-0\lib\site-packages\click\core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "D:\Programmes\Python\3-8-0\lib\site-packages\click\core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "D:\Programmes\Python\3-8-0\lib\site-packages\click\core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "D:\Programmes\Python\3-8-0\lib\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "D:\Programmes\Python\3-8-0\lib\site-packages\click\core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "D:\Code\http\haishin\storage\animdl\core\cli\helpers\fun.py", line 70, in internal
    return f(*args, **kwargs)
  File "D:\Code\http\haishin\storage\animdl\core\cli\commands\search.py", line 26, in animdl_search
    for i, search_data in enumerate(link.get(provider)(session, query)):
  File "D:\Code\http\haishin\storage\animdl\core\cli\helpers\searcher.py", line 64, in search_animepahe
    for results in content.get('data'):
TypeError: 'NoneType' object is not iterable

I think, but I'm not 100% sure, that it happens when there is no result.

It's not super important to me, just wanted to let you know. Hope you're not too bothered by my numerous issues, haha.

[9anime] Failed to parse <garbled characters> for any anime

Steps to reproduce

Open any anime episode from 9anime (download / grab / stream)

Expected behavior

animdl should detect one of the available servers

Actual behavior

animdl doesn't detect any of the servers

Additional info

9anime works fine on my browser (even in incognito mode).

Log

animdl stream "9anime:one piece" -s 986 -e 986 -ll 0

░█████╗░███╗░░██╗██╗███╗░░░███╗██████╗░██╗░░░░░
██╔══██╗████╗░██║██║████╗░████║██╔══██╗██║░░░░░
███████║██╔██╗██║██║██╔████╔██║██║░░██║██║░░░░░
██╔══██║██║╚████║██║██║╚██╔╝██║██║░░██║██║░░░░░
██║░░██║██║░╚███║██║██║░╚═╝░██║██████╔╝███████╗
╚═╝░░╚═╝╚═╝░░╚══╝╚═╝╚═╝░░░░░╚═╝╚═════╝░╚══════╝v1.3.8
A highly efficient anime downloader and streamer

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): 9anime.to:443
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET / HTTP/1.1" 401 None
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET /search?keyword=one+piece HTTP/1.1" 200 None
[animdl-9anime-searcher] [#01] One Piece (Dub) https://9anime.to/watch/one-piece-dub.34r
[animdl-9anime-searcher] [#02] One Piece https://9anime.to/watch/one-piece.ov8
[animdl-9anime-searcher] [#03] One Piece Recap https://9anime.to/watch/one-piece-recap.j8j8
[animdl-9anime-searcher] [#04] One Piece Film Z https://9anime.to/watch/one-piece-film-z.lrk6
[animdl-9anime-searcher] [#05] One Piece Film: Gold (Dub) https://9anime.to/watch/one-piece-film-gold-dub.p2l6
[animdl-9anime-searcher] [#06] One Piece Movie 1 https://9anime.to/watch/one-piece-movie-1.yv0z
[animdl-9anime-searcher] [#07] One Piece Film Z (Dub) https://9anime.to/watch/one-piece-film-z-dub.o4my
[animdl-9anime-searcher] [#08] One Piece: Glorious Island https://9anime.to/watch/one-piece-glorious-island.r40q
[animdl-9anime-searcher] [#09] One Piece Film: Gold https://9anime.to/watch/one-piece-film-gold.71vy
[animdl-9anime-searcher] [#10] One Piece Movie 14: Stampede https://9anime.to/watch/one-piece-movie-14-stampede.2n54
[animdl-9anime-searcher] [#11] One Piece: Heart of Gold (Dub) https://9anime.to/watch/one-piece-heart-of-gold-dub.m59z
[animdl-9anime-searcher] [#12] One Piece Film Strong World (Dub) https://9anime.to/watch/one-piece-film-strong-world-dub.1omq
[animdl-9anime-searcher] [#13] One Piece: Romance Dawn Story https://9anime.to/watch/one-piece-romance-dawn-story.j9v2
[animdl-9anime-searcher] [#14] One Piece 3D: Mugiwara Chase https://9anime.to/watch/one-piece-3d-mugiwara-chase.k3j4
[animdl-9anime-searcher] [#15] One Piece: Dead End https://9anime.to/watch/one-piece-dead-end.npmm
[animdl-9anime-searcher] [#16] One Piece: Adventure of Nebulandia (Dub) https://9anime.to/watch/one-piece-adventure-of-nebulandia-dub.q18w
[animdl-9anime-searcher] [#17] One Piece Movie 14: Stampede (Dub) https://9anime.to/watch/one-piece-movie-14-stampede-dub.ny4m
[animdl-9anime-searcher] [#18] One Piece: Episode of Skypiea https://9anime.to/watch/one-piece-episode-of-skypiea.4o1j
[animdl-9anime-searcher] [#19] One Piece: Adventure of Nebulandia https://9anime.to/watch/one-piece-adventure-of-nebulandia.p2vq
[animdl-9anime-searcher] [#20] One Piece: Heart of Gold https://9anime.to/watch/one-piece-heart-of-gold.7j47
[animdl-9anime-searcher] [#21] One Piece Film Strong World https://9anime.to/watch/one-piece-film-strong-world.mvl8
[animdl-9anime-searcher] [#22] One Piece: Episode of Skypiea (Dub) https://9anime.to/watch/one-piece-episode-of-skypiea-dub.rpxo
[animdl-9anime-searcher] [#23] One Piece: Defeat the Pirate Ganzack! https://9anime.to/watch/one-piece-defeat-the-pirate-ganzack.j0py
[animdl-9anime-searcher] [#24] One Piece: Straw Hat Theater https://9anime.to/watch/one-piece-straw-hat-theater.k0q6
[animdl-9anime-searcher] [#25] One Piece: Clockwork Island Adventure https://9anime.to/watch/one-piece-clockwork-island-adventure.oxn5
[animdl-9anime-searcher] [#26] One Piece: Django's Dance Carnival https://9anime.to/watch/one-piece-djangos-dance-carnival.l7v6
[animdl-9anime-searcher] [#27] One Piece Film: Strong World Episode 0 https://9anime.to/watch/one-piece-film-strong-world-episode-0.v434
[animdl-9anime-searcher] [#28] Uchida Shungicu no Noroi no One-Piece https://9anime.to/watch/uchida-shungicu-no-noroi-no-one-piece.lz7q
[animdl-9anime-searcher] [#29] One Piece x Nissin Cup Noodles https://9anime.to/watch/one-piece-x-nissin-cup-noodles.m90v
[animdl-9anime-searcher] [#30] One Piece: Episode of Alabasta - Prologue https://9anime.to/watch/one-piece-episode-of-alabasta-prologue.nmv8
Select by the index (defaults to 1): 2
[stream.py:127 - 2021-08-13 10:47:47,827 - animdl-9anime-streamer-core: INFO] Now initiating your stream session
[stream.py:129 - 2021-08-13 10:47:47,828 - animdl-9anime-streamer-core: INFO] Starting stream session @ [986/?]
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET / HTTP/1.1" 401 None
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET /ajax/anime/servers?id=ov8 HTTP/1.1" 200 None
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET /ajax/anime/episode?id=58fadf0dbf45c91fd46f130f2d6a14f1d3891338f6d6e7aff88b169e0ac5191b HTTP/1.1" 200 None
[__init__.py:54 - 2021-08-13 10:47:50,981 - 9anime-fallback-handler: WARNING] Falling back to mirrors due to an unexpected error: 'NoneType' object has no attribute 'group' with the provider vidstream. If the problem persists, make sure to raise an issue!
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET /ajax/anime/episode?id=d004c244842d22c06f05edae3beda2abb4d68e9f787ed4e7676fcf9a6d92be8a HTTP/1.1" 200 None
[__init__.py:54 - 2021-08-13 10:47:51,774 - 9anime-fallback-handler: WARNING] Falling back to mirrors due to an unexpected error: Failed to parse: ÊpCNÊ&æ2Òïâ!ÉLß©Brõ;xÒ¶ÔN³ÅS&uiaÕéåR^24¡÷Pµ with the provider mp4upload. If the problem persists, make sure to raise an issue!
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET /ajax/anime/episode?id=973ce5ba4a2cee200a865e76614666d34290b899ad708d6a53e4885e7e4beac8 HTTP/1.1" 200 None
[__init__.py:54 - 2021-08-13 10:47:52,564 - 9anime-fallback-handler: WARNING] Falling back to mirrors due to an unexpected error: Failed to parse: èf,"
+8cÇÒXÍ1ù0                                                                                                                                             ¼c¬yuc▒ùçÒøåÙD
          <ª with the provider streamtape. If the problem persists, make sure to raise an issue!
DEBUG:urllib3.connectionpool:https://9anime.to:443 "GET /ajax/anime/episode?id=35c9dfd28379f7407a9826fb57d7025072e2da65a7f674ddef7f453f6358cc80 HTTP/1.1" 200 None
[__init__.py:54 - 2021-08-13 10:47:53,562 - 9anime-fallback-handler: WARNING] Falling back to mirrors due to an unexpected error: 'NoneType' object has no attribute 'group' with the provider mycloud. If the problem persists, make sure to raise an issue!
[animdl-9anime-streamer-core] Could not find any streams for Episode 986; continue?  [y/N]: y

Skip Intro

Skipping intro time or jumping to custom time

[Feature request] Anime episodes grab range

So, if you try animdl grab https://9anime.to/watch/one-piece.ov8, you'll have to wait for a long time. 430 episodes took me 8 min 45, and there are more.

I'd imagine something like animdl grab https://9anime.to/watch/one-piece.ov8 --from=0 --to=10, so I can loop through that call with short lived processes until there is no more episodes.

Would something like this be possible to implement?

Quality Links not working

Actually, I'm grabbing from gogo but quality links not working so I fixed it. Please Reply!! I want to tell you that fix.
Thank you for making such a good extension

TypeError: expected string or bytes-like object while streaming in animepahe

idk why but i was streaming on animepahe and this comes up out of nowhere
the version is v1.3.6[git]

Traceback (most recent call last):
  File "C:\Users\Jess\Downloads\Compressed\animdl\animdl.py", line 34, in 
    __animdl_cli__()
  File "C:\Users\Jess\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\click\core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\Jess\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\click\core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "C:\Users\Jess\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\click\core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\Jess\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\click\core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\Jess\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\click\core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "C:\Users\Jess\Downloads\Compressed\animdl\core\cli\helpers\fun.py", line 424, in internal
    return f(*args, **kwargs)
  File "C:\Users\Jess\Downloads\Compressed\animdl\core\cli\commands\stream.py", line 185, in animdl_stream
    selection = quality_prompt(stream_urls, provider) if len(
  File "C:\Users\Jess\Downloads\Compressed\animdl\core\cli\commands\stream.py", line 17, in quality_prompt
    'unknown' else '', stream_judiciary(anime.get('stream_url'))))
  File "C:\Users\Jess\Downloads\Compressed\animdl\core\cli\helpers\fun.py", line 409, in stream_judiciary
    match = URL_REGEX.search(url)
TypeError: expected string or bytes-like object

[Feature request] parser-friendly stdout

Hey,

First - amazing work. I'm very impressed by the efficiency of animdl.
I have a request, which I would have PR'd myself if only I knew Python, but I believe it's reasonable enough to still ask.

I'm going to make a wrapper around animdl for my own usage, and I'd love to avoid having to parse the CLI output. I was thinking that, given a flag, something like --json, all the output could be just JSON.

Ideally, commands like animdl test, animdl grab "one piece" or animdl grab https://9anime.to/watch/one-piece.ov8 would only output JSON, without color or formatting (though that last command is pretty close).

To be clear, I can totally parse everything even now, I just think it'd be very nice to have a reliable way to do so.

[Feature Request] Auto retry after error

Sorry for bothering you again and again. I have got this error several times while downloading. If I rerun the command it goes away. It might be caused by my unstable internet connection. Adding auto retry might help.

 ./animdl.py download "animepahe:B the beginning succession"
░█████╗░███╗░░██╗██╗███╗░░░███╗██████╗░██╗░░░░░
██╔══██╗████╗░██║██║████╗░████║██╔══██╗██║░░░░░
███████║██╔██╗██║██║██╔████╔██║██║░░██║██║░░░░░
██╔══██║██║╚████║██║██║╚██╔╝██║██║░░██║██║░░░░░
██║░░██║██║░╚███║██║██║░╚═╝░██║██████╔╝███████╗
╚═╝░░╚═╝╚═╝░░╚══╝╚═╝╚═╝░░░░░╚═╝╚═════╝░╚══════╝v1.3.0
A highly efficient anime downloader and streamer

[animdl-animepahe-searcher] [#01] B: The Beginning Succession https://animepahe.com/anime/cdbcd889-ba5a-e1f2-cc8a-d790d0e2a4fa
Select by the index (defaults to 1): 
[animdl-animepahe-downloader-core] Initializing download session [00 -> ?]
[animdl-animepahe-downloader-core] Starting download session [00 -> 5]
[animdl-animepahe-downloader-core] Downloads will be done in the folder 'B: The Beginning Succession'
[HLS] E01 : 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 147/147 [01:05<00:00,  2.24ts/s]
[HLS] E02 : 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 142/142 [01:00<00:00,  2.36ts/s]
[HLS] E03 :  93%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎         | 135/145 [00:55<00:04,  2.47ts/s]
Traceback (most recent call last):
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 426, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 421, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.9/http/client.py", line 1345, in getresponse
    response.begin()
  File "/usr/lib/python3.9/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.9/http/client.py", line 276, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/shadow/.local/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 726, in urlopen
    retries = retries.increment(
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/util/retry.py", line 410, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/packages/six.py", line 734, in reraise
    raise value.with_traceback(tb)
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 670, in urlopen
    httplib_response = self._make_request(
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 426, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/home/shadow/.local/lib/python3.9/site-packages/urllib3/connectionpool.py", line 421, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.9/http/client.py", line 1345, in getresponse
    response.begin()
  File "/usr/lib/python3.9/http/client.py", line 307, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.9/http/client.py", line 276, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/shadow/animdl/./animdl.py", line 31, in <module>
    __animdl_cli__()
  File "/usr/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/shadow/animdl/core/cli/commands/download.py", line 87, in animdl_download
    hls_download(stream_urls, base / ("%s.ts" % sanitize_filename(content_title)), content_title)
  File "/home/shadow/animdl/core/codebase/downloader/download.py", line 54, in hls_download
    for content in hls_yield(session, quality_dict):
  File "/home/shadow/animdl/core/codebase/downloader/hls_download.py", line 87, in hls_yield
    with session.get(ts_uris, headers=headers, verify=ssl_verification) as ts_response:
  File "/home/shadow/.local/lib/python3.9/site-packages/requests/sessions.py", line 543, in get
    return self.request('GET', url, **kwargs)
  File "/home/shadow/.local/lib/python3.9/site-packages/requests/sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/shadow/.local/lib/python3.9/site-packages/requests/sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "/home/shadow/.local/lib/python3.9/site-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
[HLS] E03 :  93%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████▎         | 135/145 [00:56<00:04,  2.41ts/s]

Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..

animdl download "dragon ball dub" --idm
Every thing was fine but after 19th download this started to showing up ,

[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-downloader-core] Failed to download 'E20' due to lack of stream urls.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-downloader-core] Failed to download 'E21' due to lack of stream urls.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-downloader-core] Failed to download 'E22' due to lack of stream urls.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..
[animdl-9anime-warning] If the problem persists, feel free to raise an issue with the anime url and episode number immediately.
[animdl-9anime-warning] Falling back to mirrors due to an unexpected error: Max tries exceeded with the given provider mirror..

Ctrl + c

then , animdl download "dragon ball dub" --idm -s 20

downloaded ep 20 then again ,
downloading 1 ep and going like that

[Feature Request] Animdl as a Module

I was trying to write a script to workaround the previous issue and parsing output from grab was really hard. It would be nice to be able to use animdl as a module. Also, the --quite option from #24 is not working.

Request - Able to change download's host.

Not sure if this already exists or not.

I was wondering if we can make that we able to select/change or keep our server host from like the current one (google APIs I guess?) to like VidStream, MP4Upload, or something similar.

animdl not working on debian

Everything works perfectly on my Mac but when I run the command on my server I am faced with this issue, I tried both the same and unstable version.

2021-08-05 02:57:24,027 - 9anime-fallback-handler: WARNING] Falling back to mirrors due to an unexpected error: 'NoneType' object has no attribute 'group' with the provider mp4upload. If the problem persists, make sure to raise an issue!
[streamtape.py:25 - 2021-08-05 02:57:24,571 - 9anime-streamtape-extractor: WARNING] Could not find stream links. Failed to extract from: https://streamtape.com/e/610b3774
[download.py:184 - 2021-08-05 02:57:25,755 - animdl-9anime-downloader-core: ERROR] Failed to download 'E02' due to lack of stream urls.
[__init__.py:57 - 2021-08-05 02:57:26,228 - 9anime-fallback-handler: WARNING] Falling back to mirrors due to an unexpected error: 'NoneType' object has no attribute 'group' with the provider mp4upload. If the problem persists, make sure to raise an issue!
[streamtape.py:25 - 2021-08-05 02:57:26,724 - 9anime-streamtape-extractor: WARNING] Could not find stream links. Failed to extract from: https://streamtape.com/e/610b3776
[download.py:184 - 2021-08-05 02:57:27,874 - animdl-9anime-downloader-core: ERROR] Failed to download 'E03' due to lack of stream urls.

[Question] Animepahe

Downloading from animepahe no longer gives mp4. Is it to bypass ddos gaurd? Hope you find another way to get mp4 files cuz those had chapter marks.

Animepahe not working

kwik.cx have changed the URI structure of the contents. They have replaced the - before files with . (i.e. https://eu-d4.files.nextcdn.org/ instead of https://eu-d4-files.nextcdn.org/). Please update animdl accordingly.

error when i try to install the software on windows 10

C:\Users\Avr>pip install git+https://github.com/justfoolingaround/animdl-install
Collecting git+https://github.com/justfoolingaround/animdl-install
Cloning https://github.com/justfoolingaround/animdl-install to c:\users\public\documents\wondershare\creatortemp\pip-req-build-5sa9_v3g
Running command git clone -q https://github.com/justfoolingaround/animdl-install 'C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g'
ERROR: Command errored out with exit status 1:
command: 'c:\users\avr\appdata\local\programs\python\python39\python.exe' -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g\setup.py'"'"'; file='"'"'C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(file) if os.path.exists(file) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-pip-egg-info-93f6fxo6'
cwd: C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g
Complete output (13 lines):
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g\setup.py", line 2, in
from animdl.version import core
File "C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g\animdl_init_.py", line 1, in
from . import core
File "C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g\animdl\core_init_.py", line 2, in
from .downloader.download import internal_download
File "C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g\animdl\core\downloader_init_.py", line 1, in
from .download import
File "C:\Users\Public\Documents\Wondershare\CreatorTemp\pip-req-build-5sa9_v3g\animdl\core\downloader\download.py", line 6, in
from tqdm import tqdm
ModuleNotFoundError: No module named 'tqdm'
----------------------------------------
WARNING: Discarding git+https://github.com/justfoolingaround/animdl-install. Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

I am new to github, so sorry if i will make mistakes.

New Quality Links not Working After Fix.

After improving the quality links. it's giving me 302 redirect to another URL.

And after the redirect that URL is not working?

That URL giving me 403 Error!

Can you please help me figure it out :)

continue not working || am I doing it wrong ?

I typed ::: animedl continue ["identifier": from cli_session_animdl ]
I typed ::: animedl continue "dragon ball (dub)"
Traceback (most recent call last):
File "C:\Python39\Scripts\animdl-script.py", line 33, in
sys.exit(load_entry_point('animdl==1.3.2', 'console_scripts', 'animdl')())
File "c:\python39\lib\site-packages\click\core.py", line 1137, in call
return self.main(*args, **kwargs)
File "c:\python39\lib\site-packages\click\core.py", line 1062, in main
rv = self.invoke(ctx)
File "c:\python39\lib\site-packages\click\core.py", line 1668, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\python39\lib\site-packages\click\core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\python39\lib\site-packages\click\core.py", line 763, in invoke
return __callback(*args, **kwargs)
File "c:\python39\lib\site-packages\click\decorators.py", line 26, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\python39\lib\site-packages\animdl\core\cli\commands\continuation.py", line 57, in animdl_continue
u, s, e, i, idm, au, ao, af, ac, am = sessions.generate_download_arguments(session)
ValueError: too many values to unpack (expected 10) ***
Whats wrong ? help pls !!!

Plz add aria2 support

Hls download which use in the program is really slow for me. Can you plz just add aria2 support. Plz.
Thanks for the good work.

Using grabed links in jdownloader

add a tag in grabed links so I can use jdownloader packagizer to rename all the files.

like this :
[E14] {"episode": 14, "streams": [{"quality": "1080", "stream_url": "https://www12.mp4upload.com:282/d/q6x5hfomz3b4quuobgxropcfklud4j4b3i5v7x2zbhxtpkcpmljmcyzc/video.mp4 ?ep=e14 ", "headers": {"referer": "https://www.mp4upload.com/embed-mnesle1izzy0.html", "ssl_verification": false}}]}

How to use Crunchyroll Command?

animdl grab "crunchyroll:digimon-adventure-2020" -s 1 -e 1 -ll 0

The response I got after this command.

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): animepahe.com:443 DEBUG:urllib3.connectionpool:https://animepahe.com:443 "GET /api?q=crunchyroll%3Adigimon-adventure-2020&m=search HTTP/1.1" 200 None [animdl-animepahe-searcher] Cannot find anything of that query.

Why its searching animepahe even if I added Crunchyroll?

I think I am doing a mistake here?

Can't download but can stream from animepahe

For some reason, the download command is showing the following error today. Most probably cloudflare is doing something. But the stream command works fine. I wonder if the stream command is somehow bypassing cloudflare protection.

░█████╗░███╗░░██╗██╗███╗░░░███╗██████╗░██╗░░░░░
██╔══██╗████╗░██║██║████╗░████║██╔══██╗██║░░░░░
███████║██╔██╗██║██║██╔████╔██║██║░░██║██║░░░░░
██╔══██║██║╚████║██║██║╚██╔╝██║██║░░██║██║░░░░░
██║░░██║██║░╚███║██║██║░╚═╝░██║██████╔╝███████╗
╚═╝░░╚═╝╚═╝░░╚══╝╚═╝╚═╝░░░░░╚═╝╚═════╝░╚══════╝v1.3.9
A highly efficient anime downloader and streamer

[animdl-animepahe-searcher] [#01] Kure-nai https://animepahe.com/anime/6355cfc2-ef60-a62a-c598-0f22ca830c3b
[animdl-animepahe-searcher] [#02] Kure-nai OVA https://animepahe.com/anime/132b99e7-e85b-4585-c109-e7bc07959c25
[animdl-animepahe-searcher] [#03] Kurenai no Buta https://animepahe.com/anime/925005b3-ad9c-77fa-8b10-0f7e90ba0adc
[animdl-animepahe-searcher] [#04] Sakura Taisen: Le Nouveau Paris https://animepahe.com/anime/00dc519d-d044-8060-e89f-b95e3acfe909
Select by the index (defaults to 1): 
[download.py:109 - 2021-08-19 22:52:10,550 - animdl-animepahe-downloader-core: INFO] Initializing download session [00 -> ?]
[download.py:156 - 2021-08-19 22:52:11,638 - animdl-animepahe-downloader-core: INFO] Starting download session [00 -> 11]
[download.py:157 - 2021-08-19 22:52:11,638 - animdl-animepahe-downloader-core: INFO] Downloads will be done in the folder 'Kure-nai'
Traceback (most recent call last):
  File "/home/shadow/.local/bin/animdl", line 33, in <module>
    sys.exit(load_entry_point('animdl==1.3.9', 'console_scripts', 'animdl')())
  File "/usr/lib/python3.9/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/shadow/.local/lib/python3.9/site-packages/animdl/core/cli/helpers/fun.py", line 424, in internal
    return f(*args, **kwargs)
  File "/home/shadow/.local/lib/python3.9/site-packages/animdl/core/cli/commands/download.py", line 233, in animdl_download
    url_download(
  File "/home/shadow/.local/lib/python3.9/site-packages/animdl/core/codebase/downloader/download.py", line 37, in single_threaded_download
    response_headers = session.head(
TypeError: head() got an unexpected keyword argument 'verify'

stream command not working

Hi. I am using Linux. mpv is installed and is in the PATH. Yet the stream command is not working. It works with animdl_config.json in the working directory though.

Backwards compatibility issue of executable

hey!,here for reporting a quick issue
So yeah i think i forgot to tell ya that since python3.9,windows 7 and older are not supported.so obviously executable created using python 3.9 is also not supported on windows 7.a friendly advice is that you should use python 3.8,but if you don't want to use python3.8,then create a portable installation of python3.8 for building your project.also i presume that you are using the --onefile flag to create an executable.while you can create a single standalone.it is not encouraged by the author and personally too.this feature is in alpha stages and creates many problems.i advice you to use the --standalone flag instead of it.a folder will be created with name yourproject.dist and all the files inside it will be needed to run your binary file but its alot faster(since it doesn't need to unpack to a temp directory) and preferable.but if you want to create a single standlone then pyinstaller is the best choice.it will pack your program into one executable but the speed is slow(sometimes very slow).

regards,

How do you use --idm actually?

I use --idm but it doesn't seem to do anything and continuing download as normal via cmd.

Also, some episodes also being downloaded with {number}ts/s and at the end, it only downloaded like 360p.

Gives `JSONDecodeError`

In my trying to get it to work I just reinstalled it.
Then tried streaming/downloading and it didn't work.
Tried a different source and it did so I guess it's just the default source, animepahe

$ animdl stream "animepahe:slime"
Traceback (most recent call last):
  File "/usr/bin/animdl", line 33, in <module>
░█████╗░███╗░░██╗██╗███╗░░░███╗██████╗░██╗░░░░░
██╔══██╗████╗░██║██║████╗░████║██╔══██╗██║░░░░░
███████║██╔██╗██║██║██╔████╔██║██║░░██║██║░░░░░
██╔══██║██║╚████║██║██║╚██╔╝██║██║░░██║██║░░░░░
██║░░██║██║░╚███║██║██║░╚═╝░██║██████╔╝███████╗
╚═╝░░╚═╝╚═╝░░╚══╝╚═╝╚═╝░░░░░╚═╝╚═════╝░╚══════╝v1.3.11
A highly efficient anime downloader and streamer
�[39m
    sys.exit(load_entry_point('animdl==1.3.11', 'console_scripts', 'animdl')())
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/lib/python3.9/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/animdl/core/cli/helpers/fun.py", line 420, in internal
    return f(*args, **kwargs)
  File "/usr/lib/python3.9/site-packages/animdl/core/cli/commands/stream.py", line 126, in animdl_stream
    anime, provider = process_query(
  File "/usr/lib/python3.9/site-packages/animdl/core/cli/helpers/processors.py", line 66, in process_query
    return prompt_user(logger, searcher, provider)
  File "/usr/lib/python3.9/site-packages/animdl/core/cli/helpers/processors.py", line 19, in prompt_user
    for n, anime in enumerate(anime_list_genexp, 1):
  File "/usr/lib/python3.9/site-packages/animdl/core/cli/helpers/searcher.py", line 51, in search_animepahe
    content = animepahe_results.json()
  File "~/.local/lib/python3.9/site-packages/httpx/_models.py", line 1433, in json
    return jsonlib.loads(self.text, **kwargs)
  File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.9/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Thanks for the the work btw. Love the tool.

Grab Command Changed?

I'm not able to fetch from the old grab command. did you change the command or anything?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.