├── .editorconfig
├── .github
├── FUNDING.yml
└── workflows
│ ├── docker.yml
│ ├── executables.yml
│ ├── pages.yml
│ └── tests.yml
├── .gitignore
├── CHANGELOG.md
├── Dockerfile
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── bin
└── gallery-dl
├── docs
├── _layouts
│ └── default.html
├── configuration.rst
├── formatting.md
├── gallery-dl-example.conf
├── gallery-dl.conf
├── index.md
├── links.js
├── oauth-redirect.html
├── options.md
└── supportedsites.md
├── gallery_dl
├── __init__.py
├── __main__.py
├── actions.py
├── aes.py
├── archive.py
├── cache.py
├── config.py
├── cookies.py
├── downloader
│ ├── __init__.py
│ ├── common.py
│ ├── http.py
│ ├── text.py
│ └── ytdl.py
├── exception.py
├── extractor
│ ├── 2ch.py
│ ├── 2chan.py
│ ├── 2chen.py
│ ├── 35photo.py
│ ├── 3dbooru.py
│ ├── 4archive.py
│ ├── 4chan.py
│ ├── 4chanarchives.py
│ ├── 500px.py
│ ├── 8chan.py
│ ├── 8muses.py
│ ├── __init__.py
│ ├── adultempire.py
│ ├── agnph.py
│ ├── ao3.py
│ ├── arcalive.py
│ ├── architizer.py
│ ├── artstation.py
│ ├── aryion.py
│ ├── batoto.py
│ ├── bbc.py
│ ├── behance.py
│ ├── bilibili.py
│ ├── blogger.py
│ ├── bluesky.py
│ ├── booru.py
│ ├── boosty.py
│ ├── bunkr.py
│ ├── catbox.py
│ ├── chevereto.py
│ ├── cien.py
│ ├── civitai.py
│ ├── comicvine.py
│ ├── common.py
│ ├── cyberdrop.py
│ ├── danbooru.py
│ ├── desktopography.py
│ ├── deviantart.py
│ ├── directlink.py
│ ├── discord.py
│ ├── dynastyscans.py
│ ├── e621.py
│ ├── erome.py
│ ├── everia.py
│ ├── exhentai.py
│ ├── facebook.py
│ ├── fanbox.py
│ ├── fantia.py
│ ├── fapachi.py
│ ├── fapello.py
│ ├── flickr.py
│ ├── foolfuuka.py
│ ├── foolslide.py
│ ├── furaffinity.py
│ ├── furry34.py
│ ├── fuskator.py
│ ├── gelbooru.py
│ ├── gelbooru_v01.py
│ ├── gelbooru_v02.py
│ ├── generic.py
│ ├── gofile.py
│ ├── hatenablog.py
│ ├── hentai2read.py
│ ├── hentaicosplays.py
│ ├── hentaifoundry.py
│ ├── hentaihand.py
│ ├── hentaihere.py
│ ├── hentainexus.py
│ ├── hiperdex.py
│ ├── hitomi.py
│ ├── hotleak.py
│ ├── idolcomplex.py
│ ├── imagebam.py
│ ├── imagechest.py
│ ├── imagefap.py
│ ├── imagehosts.py
│ ├── imgbb.py
│ ├── imgbox.py
│ ├── imgth.py
│ ├── imgur.py
│ ├── imhentai.py
│ ├── inkbunny.py
│ ├── instagram.py
│ ├── issuu.py
│ ├── itaku.py
│ ├── itchio.py
│ ├── jschan.py
│ ├── kabeuchi.py
│ ├── keenspot.py
│ ├── kemono.py
│ ├── khinsider.py
│ ├── komikcast.py
│ ├── lensdump.py
│ ├── lexica.py
│ ├── lightroom.py
│ ├── livedoor.py
│ ├── lofter.py
│ ├── lolisafe.py
│ ├── luscious.py
│ ├── lynxchan.py
│ ├── mangadex.py
│ ├── mangafox.py
│ ├── mangahere.py
│ ├── manganelo.py
│ ├── mangapark.py
│ ├── mangaread.py
│ ├── mangoxo.py
│ ├── mastodon.py
│ ├── message.py
│ ├── misskey.py
│ ├── moebooru.py
│ ├── motherless.py
│ ├── myhentaigallery.py
│ ├── myportfolio.py
│ ├── naver.py
│ ├── naverwebtoon.py
│ ├── nekohouse.py
│ ├── newgrounds.py
│ ├── nhentai.py
│ ├── nijie.py
│ ├── nitter.py
│ ├── noop.py
│ ├── nozomi.py
│ ├── nsfwalbum.py
│ ├── oauth.py
│ ├── paheal.py
│ ├── patreon.py
│ ├── pexels.py
│ ├── philomena.py
│ ├── photovogue.py
│ ├── picarto.py
│ ├── pictoa.py
│ ├── piczel.py
│ ├── pillowfort.py
│ ├── pinterest.py
│ ├── pixeldrain.py
│ ├── pixiv.py
│ ├── pixnet.py
│ ├── plurk.py
│ ├── poipiku.py
│ ├── poringa.py
│ ├── pornhub.py
│ ├── pornpics.py
│ ├── postmill.py
│ ├── rawkuma.py
│ ├── reactor.py
│ ├── readcomiconline.py
│ ├── realbooru.py
│ ├── recursive.py
│ ├── reddit.py
│ ├── redgifs.py
│ ├── rule34us.py
│ ├── rule34vault.py
│ ├── rule34xyz.py
│ ├── saint.py
│ ├── sankaku.py
│ ├── sankakucomplex.py
│ ├── schalenetwork.py
│ ├── scrolller.py
│ ├── seiga.py
│ ├── senmanga.py
│ ├── sexcom.py
│ ├── shimmie2.py
│ ├── shopify.py
│ ├── simplyhentai.py
│ ├── skeb.py
│ ├── slickpic.py
│ ├── slideshare.py
│ ├── smugmug.py
│ ├── soundgasm.py
│ ├── speakerdeck.py
│ ├── steamgriddb.py
│ ├── subscribestar.py
│ ├── szurubooru.py
│ ├── tapas.py
│ ├── tcbscans.py
│ ├── telegraph.py
│ ├── tenor.py
│ ├── tiktok.py
│ ├── tmohentai.py
│ ├── toyhouse.py
│ ├── tsumino.py
│ ├── tumblr.py
│ ├── tumblrgallery.py
│ ├── twibooru.py
│ ├── twitter.py
│ ├── unsplash.py
│ ├── uploadir.py
│ ├── urlgalleries.py
│ ├── urlshortener.py
│ ├── vanillarock.py
│ ├── vichan.py
│ ├── vipergirls.py
│ ├── vk.py
│ ├── vsco.py
│ ├── wallhaven.py
│ ├── wallpapercave.py
│ ├── warosu.py
│ ├── weasyl.py
│ ├── webmshare.py
│ ├── webtoons.py
│ ├── weebcentral.py
│ ├── weibo.py
│ ├── wikiart.py
│ ├── wikifeet.py
│ ├── wikimedia.py
│ ├── xfolio.py
│ ├── xhamster.py
│ ├── xvideos.py
│ ├── yiffverse.py
│ ├── ytdl.py
│ ├── zerochan.py
│ └── zzup.py
├── formatter.py
├── job.py
├── oauth.py
├── option.py
├── output.py
├── path.py
├── postprocessor
│ ├── __init__.py
│ ├── classify.py
│ ├── common.py
│ ├── compare.py
│ ├── directory.py
│ ├── exec.py
│ ├── hash.py
│ ├── metadata.py
│ ├── mtime.py
│ ├── python.py
│ ├── rename.py
│ ├── ugoira.py
│ └── zip.py
├── text.py
├── transaction_id.py
├── update.py
├── util.py
├── version.py
└── ytdl.py
├── pyproject.toml
├── requirements.txt
├── scripts
├── build_testresult_db.py
├── completion_bash.py
├── completion_fish.py
├── completion_zsh.py
├── create_test_data.py
├── docs_compare.py
├── export_tests.py
├── hook-gallery_dl.py
├── man.py
├── options.py
├── pull-request
├── pyinstaller.py
├── pyprint.py
├── release.sh
├── run_tests.py
├── supportedsites.py
└── util.py
├── setup.cfg
├── setup.py
├── snap
├── local
│ └── launchers
│ │ └── gallery-dl-launch
└── snapcraft.yaml
└── test
├── __init__.py
├── results
├── 2ch.py
├── 2chan.py
├── 2chen.py
├── 35photo.py
├── 3dbooru.py
├── 4archive.py
├── 4chan.py
├── 4chanarchives.py
├── 4plebs.py
├── 500px.py
├── 8chan.py
├── 8kun.py
├── 8muses.py
├── 94chan.py
├── __init__.py
├── acidimg.py
├── adultempire.py
├── agnph.py
├── aibooru.py
├── allgirlbooru.py
├── animereactor.py
├── ao3.py
├── arcalive.py
├── architizer.py
├── archivedmoe.py
├── archiveofsins.py
├── artstation.py
├── aryion.py
├── atfbooru.py
├── azurlanewiki.py
├── b4k.py
├── baraag.py
├── batoto.py
├── bbc.py
├── bbw-chan.py
├── bcbnsfw.py
├── behance.py
├── bilibili.py
├── bitly.py
├── blogger.py
├── blogspot.py
├── bluesky.py
├── booruvar.py
├── boosty.py
├── bulbapedia.py
├── bunkr.py
├── catbox.py
├── cavemanon.py
├── chelseacrew.py
├── cien.py
├── civitai.py
├── comicvine.py
├── coomer.py
├── cyberdrop.py
├── danbooru.py
├── derpibooru.py
├── desktopography.py
├── desuarchive.py
├── deviantart.py
├── directlink.py
├── discord.py
├── drawfriends.py
├── dynastyscans.py
├── e621.py
├── e6ai.py
├── e926.py
├── endchan.py
├── erome.py
├── everia.py
├── exhentai.py
├── facebook.py
├── fanbox.py
├── fandom.py
├── fantia.py
├── fapachi.py
├── fapello.py
├── fappic.py
├── fashionnova.py
├── fireden.py
├── flickr.py
├── furaffinity.py
├── furbooru.py
├── furry34.py
├── fuskator.py
├── gelbooru.py
├── generic.py
├── giantessbooru.py
├── gofile.py
├── hatenablog.py
├── hentai2read.py
├── hentaicosplays.py
├── hentaienvy.py
├── hentaiera.py
├── hentaifoundry.py
├── hentaifox.py
├── hentaihand.py
├── hentaihere.py
├── hentainexus.py
├── hentairox.py
├── hentaizap.py
├── hiperdex.py
├── hitomi.py
├── horne.py
├── hotleak.py
├── hypnohub.py
├── idolcomplex.py
├── illusioncardsbooru.py
├── imagebam.py
├── imagechest.py
├── imagefap.py
├── imagepond.py
├── imagetwist.py
├── imagevenue.py
├── imgbb.py
├── imgbox.py
├── imgclick.py
├── imgkiwi.py
├── imgspice.py
├── imgth.py
├── imgur.py
├── imhentai.py
├── imxto.py
├── inkbunny.py
├── instagram.py
├── issuu.py
├── itaku.py
├── itchio.py
├── joyreactor.py
├── jpgfish.py
├── kabeuchi.py
├── keenspot.py
├── kemono.py
├── khinsider.py
├── kohlchan.py
├── komikcast.py
├── konachan.py
├── lensdump.py
├── lesbianenergy.py
├── lexica.py
├── lightroom.py
├── livedoor.py
├── lofter.py
├── lolibooru.py
├── loungeunderwear.py
├── luscious.py
├── mangadex.py
├── mangafox.py
├── mangahere.py
├── mangakakalot.py
├── manganato.py
├── mangapark.py
├── mangaread.py
├── mangoxo.py
├── mariowiki.py
├── mastodon.py
├── mastodonsocial.py
├── mediawiki.py
├── michaelscameras.py
├── misskeydesign.py
├── misskeyio.py
├── modcloth.py
├── motherless.py
├── myhentaigallery.py
├── myportfolio.py
├── natomanga.py
├── naver.py
├── naverwebtoon.py
├── nekohouse.py
├── nelomanga.py
├── newgrounds.py
├── nhentai.py
├── nijie.py
├── noop.py
├── nozomi.py
├── nsfwalbum.py
├── ohpolly.py
├── omgmiamiswimwear.py
├── paheal.py
├── palanq.py
├── patreon.py
├── pawoo.py
├── pexels.py
├── philomena.py
├── photovogue.py
├── picarto.py
├── pictoa.py
├── piczel.py
├── pidgiwiki.py
├── pillowfort.py
├── pinterest.py
├── pinupgirlclothing.py
├── pixeldrain.py
├── pixhost.py
├── pixiv.py
├── pixnet.py
├── plurk.py
├── poipiku.py
├── ponybooru.py
├── poringa.py
├── pornhub.py
├── pornpics.py
├── pornreactor.py
├── postimg.py
├── raddle.py
├── raidlondon.py
├── rawkuma.py
├── rbt.py
├── reactor.py
├── readcomiconline.py
├── realbooru.py
├── recursive.py
├── reddit.py
├── redgifs.py
├── rule34.py
├── rule34hentai.py
├── rule34us.py
├── rule34vault.py
├── rule34xyz.py
├── safebooru.py
├── saint.py
├── sakugabooru.py
├── sankaku.py
├── sankakucomplex.py
├── schalenetwork.py
├── scrolller.py
├── seiga.py
├── senmanga.py
├── sexcom.py
├── simplyhentai.py
├── skeb.py
├── slickpic.py
├── slideshare.py
├── smugloli.py
├── smugmug.py
├── snootbooru.py
├── soundgasm.py
├── speakerdeck.py
├── steamgriddb.py
├── subscribestar.py
├── sushiski.py
├── tapas.py
├── tbib.py
├── tcbscans.py
├── tco.py
├── telegraph.py
├── tenor.py
├── thebarchive.py
├── thecollection.py
├── tiktok.py
├── tmohentai.py
├── toyhouse.py
├── tsumino.py
├── tumblr.py
├── tumblrgallery.py
├── turboimagehost.py
├── twibooru.py
├── twitter.py
├── unique-vintage.py
├── unsplash.py
├── uploadir.py
├── urlgalleries.py
├── vanillarock.py
├── vidyapics.py
├── vidyart2.py
├── vipergirls.py
├── vipr.py
├── visuabusters.py
├── vk.py
├── vsco.py
├── wallhaven.py
├── wallpapercave.py
├── warosu.py
├── weasyl.py
├── webmshare.py
├── webtoons.py
├── weebcentral.py
├── weibo.py
├── wikiart.py
├── wikibooks.py
├── wikidata.py
├── wikifeet.py
├── wikifeetx.py
├── wikigg.py
├── wikimediacommons.py
├── wikinews.py
├── wikipedia.py
├── wikiquote.py
├── wikisource.py
├── wikispecies.py
├── wikiversity.py
├── wikivoyage.py
├── wiktionary.py
├── windsorstore.py
├── xbooru.py
├── xfolio.py
├── xhamster.py
├── xvideos.py
├── yandere.py
├── yiffverse.py
├── ytdl.py
├── zerochan.py
└── zzup.py
├── test_cache.py
├── test_config.py
├── test_cookies.py
├── test_downloader.py
├── test_extractor.py
├── test_formatter.py
├── test_job.py
├── test_oauth.py
├── test_output.py
├── test_postprocessor.py
├── test_results.py
├── test_text.py
├── test_util.py
└── test_ytdl.py
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | trim_trailing_whitespace = true
8 |
9 | [**.py]
10 | indent_size = 4
11 | indent_style = space
12 | max_line_length = 79
13 |
14 | [Makefile]
15 | indent_style = tab
16 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | ko_fi: mikefaehrmann
2 | custom: https://www.paypal.me/mikefaehrmann
3 |
--------------------------------------------------------------------------------
/.github/workflows/docker.yml:
--------------------------------------------------------------------------------
1 | name: Docker Images
2 |
3 | on:
4 | workflow_dispatch:
5 | push:
6 | branches:
7 | - master
8 | tags:
9 | - v[0-9]+.[0-9]+.[0-9]+
10 |
11 |
12 | permissions:
13 | packages: write
14 |
15 | concurrency:
16 | group: docker
17 | cancel-in-progress: false
18 |
19 | jobs:
20 | build:
21 |
22 | runs-on: ubuntu-latest
23 |
24 | # on release commits, run only for tag event
25 | if: ${{
26 | github.repository == 'mikf/gallery-dl' &&
27 | ( ! startsWith( github.event.head_commit.message , 'release version ' ) ||
28 | startsWith( github.ref , 'refs/tags/v' ) )
29 | }}
30 |
31 | steps:
32 | - uses: actions/checkout@v4
33 |
34 | - uses: docker/metadata-action@v5
35 | id: metadata
36 | with:
37 | images: |
38 | mikf123/gallery-dl
39 | ghcr.io/mikf/gallery-dl
40 | tags: |
41 | type=ref,event=tag
42 | type=raw,value=dev
43 | type=sha,format=long,prefix=
44 | type=raw,priority=500,value={{date 'YYYY.MM.DD'}}
45 |
46 | - uses: docker/setup-qemu-action@v3
47 |
48 | - uses: docker/setup-buildx-action@v3
49 |
50 | - name: Login to DockerHub
51 | uses: docker/login-action@v3
52 | with:
53 | username: ${{ secrets.DOCKERHUB_USERNAME }}
54 | password: ${{ secrets.DOCKERHUB_TOKEN }}
55 |
56 | - name: Login to GitHub Container Registry
57 | uses: docker/login-action@v3
58 | with:
59 | registry: ghcr.io
60 | username: ${{ github.repository_owner }}
61 | password: ${{ secrets.GHCR_TOKEN }}
62 |
63 | - uses: docker/build-push-action@v5
64 | with:
65 | context: .
66 | push: true
67 | tags: ${{ steps.metadata.outputs.tags }}
68 | labels: ${{ steps.metadata.outputs.labels }}
69 | platforms: linux/amd64,linux/arm64
70 |
--------------------------------------------------------------------------------
/.github/workflows/pages.yml:
--------------------------------------------------------------------------------
1 | name: GitHub Pages
2 |
3 | on:
4 | workflow_dispatch:
5 | push:
6 | branches:
7 | - master
8 | paths:
9 | - docs/**
10 |
11 | permissions:
12 | contents: read
13 | pages: write
14 | id-token: write
15 |
16 | concurrency:
17 | group: pages
18 | cancel-in-progress: false
19 |
20 | jobs:
21 | dispatch:
22 |
23 | if: github.repository == 'mikf/gallery-dl'
24 | runs-on: ubuntu-latest
25 |
26 | steps:
27 | - name: Dispatch to gdl-org/docs
28 | run: >
29 | curl -L
30 | -X POST
31 | -H "Accept: application/vnd.github+json"
32 | -H "Authorization: Bearer ${{ secrets.REPO_TOKEN }}"
33 | -H "X-GitHub-Api-Version: 2022-11-28"
34 | https://api.github.com/repos/gdl-org/docs/actions/workflows/pages.yml/dispatches
35 | -d '{"ref":"master"}'
36 |
37 | deploy:
38 |
39 | if: github.repository == 'mikf/gallery-dl'
40 | runs-on: ubuntu-latest
41 |
42 | environment:
43 | name: github-pages
44 | url: ${{ steps.deployment.outputs.page_url }}
45 |
46 | steps:
47 | - uses: actions/checkout@v4
48 | - uses: actions/configure-pages@v4
49 |
50 | - name: Copy static files
51 | run: |
52 | mkdir --parents -- ./_site
53 | cp --archive --target-directory=./_site -- \
54 | ./docs/oauth-redirect.html
55 |
56 | - uses: actions/upload-pages-artifact@v3
57 | - uses: actions/deploy-pages@v4
58 | id: deployment
59 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | archive/
2 |
3 | # Byte-compiled / optimized / DLL files
4 | __pycache__/
5 | *.py[cod]
6 |
7 | # C extensions
8 | *.so
9 |
10 | # Distribution / packaging
11 | .Python
12 | env/
13 | data/
14 | build/
15 | develop-eggs/
16 | dist/
17 | downloads/
18 | eggs/
19 | .eggs/
20 | lib/
21 | lib64/
22 | parts/
23 | sdist/
24 | var/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 |
29 | # PyInstaller
30 | # Usually these files are written by a python script from a template
31 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
32 | *.manifest
33 | *.spec
34 |
35 | # Installer logs
36 | pip-log.txt
37 | pip-delete-this-directory.txt
38 |
39 | # Unit test / coverage reports
40 | htmlcov/
41 | .tox/
42 | .coverage
43 | .coverage.*
44 | .cache
45 | nosetests.xml
46 | coverage.xml
47 | *,cover
48 |
49 | # Translations
50 | *.mo
51 | *.pot
52 |
53 | # Django stuff:
54 | *.log
55 |
56 | # Sphinx documentation
57 | docs/_build/
58 |
59 | # PyBuilder
60 | target/
61 |
62 | # Snap packaging specific
63 | /snap/.snapcraft/
64 | /parts/
65 | /stage/
66 | /prime/
67 |
68 | /*.snap
69 | /*_source.tar.bz2
70 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:alpine
2 | ENV LANG=C.UTF-8
3 |
4 | RUN : \
5 | && apk --no-interactive update \
6 | && apk --no-cache --no-interactive add ffmpeg \
7 | && rm -rf /var/cache/apk \
8 | && :
9 |
10 | RUN : \
11 | && python3 -B -m pip --no-cache-dir --no-input --disable-pip-version-check install -U \
12 | pip \
13 | && python3 -B -m pip --no-cache-dir --no-input --disable-pip-version-check install -U \
14 | https://github.com/mikf/gallery-dl/archive/refs/heads/master.tar.gz \
15 | yt-dlp[default] \
16 | && ( rm -rf /root/.cache/pip || true ) \
17 | && ( find /usr/local/lib/python3.*/site-packages/setuptools -name __pycache__ -exec rm -rf {} + || true ) \
18 | && ( find /usr/local/lib/python3.*/site-packages/wheel -name __pycache__ -exec rm -rf {} + || true ) \
19 | && :
20 |
21 | ENTRYPOINT [ "gallery-dl" ]
22 |
--------------------------------------------------------------------------------
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include README.rst CHANGELOG.md LICENSE scripts/run_tests.py
2 | recursive-include docs *.conf
3 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 |
2 | PREFIX ?= /usr/local
3 | BINDIR ?= $(PREFIX)/bin
4 | MANDIR ?= $(PREFIX)/man
5 | SHAREDIR ?= $(PREFIX)/share
6 | PYTHON ?= /usr/bin/env python3
7 |
8 |
9 | all: man completion supportedsites options
10 |
11 | clean:
12 | $(RM) -r build/
13 | $(RM) -r data/
14 |
15 | install: man completion
16 | $(PYTHON) setup.py install
17 |
18 | release: man completion supportedsites
19 | scripts/release.sh
20 |
21 | test:
22 | scripts/run_tests.py
23 |
24 | executable:
25 | scripts/pyinstaller.py
26 |
27 | completion: data/completion/gallery-dl data/completion/_gallery-dl data/completion/gallery-dl.fish
28 |
29 | man: data/man/gallery-dl.1 data/man/gallery-dl.conf.5
30 |
31 | supportedsites: docs/supportedsites.md
32 |
33 | options: docs/options.md
34 |
35 | .PHONY: all clean install release test executable completion man supportedsites options
36 |
37 | docs/supportedsites.md: gallery_dl/*/*.py scripts/supportedsites.py
38 | $(PYTHON) scripts/supportedsites.py
39 |
40 | docs/options.md: gallery_dl/option.py scripts/options.py
41 | $(PYTHON) scripts/options.py
42 |
43 | data/man/gallery-dl.1: gallery_dl/option.py gallery_dl/version.py scripts/man.py
44 | $(PYTHON) scripts/man.py
45 |
46 | data/man/gallery-dl.conf.5: docs/configuration.rst gallery_dl/version.py scripts/man.py
47 | $(PYTHON) scripts/man.py
48 |
49 | data/completion/gallery-dl: gallery_dl/option.py scripts/completion_bash.py
50 | $(PYTHON) scripts/completion_bash.py
51 |
52 | data/completion/_gallery-dl: gallery_dl/option.py scripts/completion_zsh.py
53 | $(PYTHON) scripts/completion_zsh.py
54 |
55 | data/completion/gallery-dl.fish: gallery_dl/option.py scripts/completion_fish.py
56 | $(PYTHON) scripts/completion_fish.py
57 |
--------------------------------------------------------------------------------
/bin/gallery-dl:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | import sys
5 | import gallery_dl
6 | sys.exit(gallery_dl.main())
7 |
--------------------------------------------------------------------------------
/docs/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {% seo %}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {{ content }}
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 | # gallery-dl Documentation
2 |
3 | - ## [Supported Sites](supportedsites.md)
4 | - ## [Command Line Options](options.md)
5 | - ## [Configuration File Options](configuration.rst)
6 | - ### [gallery-dl.conf](gallery-dl.conf)
7 | - ### [gallery-dl-example.conf](gallery-dl-example.conf)
8 | - ## [String Formatting](formatting.md)
9 |
--------------------------------------------------------------------------------
/docs/links.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 |
4 | function add_header_links()
5 | {
6 | let style = document.createElement("style");
7 | style.id = "headerlinks"
8 | document.head.appendChild(style);
9 | style.sheet.insertRule(
10 | "a.headerlink {" +
11 | " visibility: hidden;" +
12 | " text-decoration: none;" +
13 | " font-size: 0.8em;" +
14 | " padding: 0 4px 0 4px;" +
15 | "}");
16 | style.sheet.insertRule(
17 | ":hover > a.headerlink {" +
18 | " visibility: visible;" +
19 | "}");
20 |
21 | let headers = document.querySelectorAll("h2, h3, h4, h5, h6");
22 | for (let i = 0, len = headers.length; i < len; ++i)
23 | {
24 | let header = headers[i];
25 |
26 | let id = header.id || header.parentNode.id;
27 | if (!id)
28 | continue;
29 |
30 | let link = document.createElement("a");
31 | link.href = "#" + id;
32 | link.className = "headerlink";
33 | link.textContent = "¶";
34 |
35 | header.appendChild(link);
36 | }
37 | }
38 |
39 |
40 | if (document.readyState !== "loading") {
41 | add_header_links();
42 | } else {
43 | document.addEventListener("DOMContentLoaded", add_header_links);
44 | }
45 |
--------------------------------------------------------------------------------
/docs/oauth-redirect.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | gallery-dl - OAuth Redirect
6 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/gallery_dl/__main__.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | # Copyright 2017-2023 Mike Fährmann
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License version 2 as
8 | # published by the Free Software Foundation.
9 |
10 | import sys
11 |
12 | if not __package__ and not hasattr(sys, "frozen"):
13 | import os.path
14 | path = os.path.realpath(os.path.abspath(__file__))
15 | sys.path.insert(0, os.path.dirname(os.path.dirname(path)))
16 |
17 | import gallery_dl
18 |
19 | if __name__ == "__main__":
20 | raise SystemExit(gallery_dl.main())
21 |
--------------------------------------------------------------------------------
/gallery_dl/downloader/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2015-2021 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Downloader modules"""
10 |
11 | modules = [
12 | "http",
13 | "text",
14 | "ytdl",
15 | ]
16 |
17 |
18 | def find(scheme):
19 | """Return downloader class suitable for handling the given scheme"""
20 | try:
21 | return _cache[scheme]
22 | except KeyError:
23 | pass
24 |
25 | cls = None
26 | if scheme == "https":
27 | scheme = "http"
28 | if scheme in modules: # prevent unwanted imports
29 | try:
30 | module = __import__(scheme, globals(), None, (), 1)
31 | except ImportError:
32 | pass
33 | else:
34 | cls = module.__downloader__
35 |
36 | if scheme == "http":
37 | _cache["http"] = _cache["https"] = cls
38 | else:
39 | _cache[scheme] = cls
40 | return cls
41 |
42 |
43 | # --------------------------------------------------------------------
44 | # internals
45 |
46 | _cache = {}
47 |
--------------------------------------------------------------------------------
/gallery_dl/downloader/text.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2014-2019 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Downloader module for text: URLs"""
10 |
11 | from .common import DownloaderBase
12 |
13 |
14 | class TextDownloader(DownloaderBase):
15 | scheme = "text"
16 |
17 | def download(self, url, pathfmt):
18 | if self.part:
19 | pathfmt.part_enable(self.partdir)
20 | self.out.start(pathfmt.path)
21 | with pathfmt.open("wb") as fp:
22 | fp.write(url.encode()[5:])
23 | return True
24 |
25 |
26 | __downloader__ = TextDownloader
27 |
--------------------------------------------------------------------------------
/gallery_dl/extractor/directlink.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2017-2023 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Direct link handling"""
10 |
11 | from .common import Extractor, Message
12 | from .. import text
13 |
14 |
15 | class DirectlinkExtractor(Extractor):
16 | """Extractor for direct links to images and other media files"""
17 | category = "directlink"
18 | filename_fmt = "{domain}/{path}/{filename}.{extension}"
19 | archive_fmt = filename_fmt
20 | pattern = (r"(?i)https?://(?P[^/?#]+)/(?P[^?#]+\."
21 | r"(?:jpe?g|jpe|png|gif|bmp|svg|web[mp]|avif|heic|psd"
22 | r"|mp4|m4v|mov|mkv|og[gmv]|wav|mp3|opus|zip|rar|7z|pdf|swf))"
23 | r"(?:\?(?P[^#]*))?(?:#(?P.*))?$")
24 | example = "https://en.wikipedia.org/static/images/project-logos/enwiki.png"
25 |
26 | def __init__(self, match):
27 | self.data = data = match.groupdict()
28 | self.subcategory = ".".join(data["domain"].rsplit(".", 2)[-2:])
29 | Extractor.__init__(self, match)
30 |
31 | def items(self):
32 | data = self.data
33 | for key, value in data.items():
34 | if value:
35 | data[key] = text.unquote(value)
36 |
37 | data["path"], _, name = data["path"].rpartition("/")
38 | data["filename"], _, ext = name.rpartition(".")
39 | data["extension"] = ext.lower()
40 | data["_http_headers"] = {
41 | "Referer": self.url.encode("latin-1", "ignore")}
42 |
43 | yield Message.Directory, data
44 | yield Message.Url, self.url, data
45 |
--------------------------------------------------------------------------------
/gallery_dl/extractor/noop.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2024 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """noop extractor"""
10 |
11 | from .common import Extractor, Message
12 |
13 |
14 | class NoopExtractor(Extractor):
15 | category = "noop"
16 | pattern = r"(?i)noo?p$"
17 | example = "noop"
18 |
19 | def items(self):
20 | # yield *something* to prevent a 'No results' message
21 | yield Message.Version, 1
22 |
23 | # Save cookies manually, since it happens automatically only after
24 | # extended extractor initialization, i.e. Message.Directory, which
25 | # itself might cause some unintended effects.
26 | if self.cookies:
27 | self.cookies_store()
28 |
--------------------------------------------------------------------------------
/gallery_dl/extractor/photovogue.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | """Extractors for https://www.vogue.com/photovogue/"""
8 |
9 | from .common import Extractor, Message
10 | from .. import text
11 |
12 | BASE_PATTERN = r"(?:https?://)?(?:www\.)?vogue\.com/photovogue"
13 |
14 |
15 | class PhotovogueUserExtractor(Extractor):
16 | category = "photovogue"
17 | subcategory = "user"
18 | directory_fmt = ("{category}", "{photographer[id]} {photographer[name]}")
19 | filename_fmt = "{id} {title}.{extension}"
20 | archive_fmt = "{id}"
21 | pattern = BASE_PATTERN + r"/photographers/(\d+)"
22 | example = "https://www.vogue.com/photovogue/photographers/12345"
23 |
24 | def __init__(self, match):
25 | Extractor.__init__(self, match)
26 | self.user_id = match.group(1)
27 |
28 | def items(self):
29 | for photo in self.photos():
30 | url = photo["gallery_image"]
31 | photo["title"] = photo["title"].strip()
32 | photo["date"] = text.parse_datetime(
33 | photo["date"], "%Y-%m-%dT%H:%M:%S.%f%z")
34 |
35 | yield Message.Directory, photo
36 | yield Message.Url, url, text.nameext_from_url(url, photo)
37 |
38 | def photos(self):
39 | url = "https://api.vogue.com/production/photos"
40 | params = {
41 | "count": "50",
42 | "order_by": "DESC",
43 | "page": 0,
44 | "photographer_id": self.user_id,
45 | }
46 |
47 | while True:
48 | data = self.request(url, params=params).json()
49 | yield from data["items"]
50 |
51 | if not data["has_next"]:
52 | break
53 | params["page"] += 1
54 |
--------------------------------------------------------------------------------
/gallery_dl/extractor/recursive.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2015-2023 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Recursive extractor"""
10 |
11 | from .common import Extractor, Message
12 | from .. import text
13 | import re
14 |
15 |
16 | class RecursiveExtractor(Extractor):
17 | """Extractor that fetches URLs from a remote or local source"""
18 | category = "recursive"
19 | pattern = r"r(?:ecursive)?:"
20 | example = "recursive:https://pastebin.com/raw/FLwrCYsT"
21 |
22 | def items(self):
23 | url = self.url.partition(":")[2]
24 |
25 | if url.startswith("file://"):
26 | with open(url[7:]) as fp:
27 | page = fp.read()
28 | else:
29 | page = self.request(text.ensure_http_scheme(url)).text
30 |
31 | for match in re.finditer(r"https?://[^\s\"']+", page):
32 | yield Message.Queue, match.group(0), {}
33 |
--------------------------------------------------------------------------------
/gallery_dl/extractor/senmanga.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2016-2023 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Extractors for https://raw.senmanga.com/"""
10 |
11 | from .common import ChapterExtractor
12 | from .. import text
13 |
14 |
15 | class SenmangaChapterExtractor(ChapterExtractor):
16 | """Extractor for manga chapters from raw.senmanga.com"""
17 | category = "senmanga"
18 | root = "https://raw.senmanga.com"
19 | pattern = r"(?:https?://)?raw\.senmanga\.com(/[^/?#]+/[^/?#]+)"
20 | example = "https://raw.senmanga.com/MANGA/CHAPTER"
21 |
22 | def _init(self):
23 | self.session.headers["Referer"] = self.gallery_url
24 |
25 | # select "All pages" viewer
26 | self.cookies.set("viewer", "1", domain="raw.senmanga.com")
27 |
28 | def metadata(self, page):
29 | title = text.extr(page, "", "")
30 | manga, _, chapter = title.partition(" - Chapter ")
31 |
32 | return {
33 | "manga" : text.unescape(manga).replace("-", " "),
34 | "chapter" : chapter.partition(" - Page ")[0],
35 | "chapter_minor": "",
36 | "lang" : "ja",
37 | "language" : "Japanese",
38 | }
39 |
40 | def images(self, page):
41 | return [
42 | (text.ensure_http_scheme(url), None)
43 | for url in text.extract_iter(
44 | page, '
", "<").strip()),
39 | "artists" : text.split_html(extr(
40 | "", "")),
41 | "genres" : text.split_html(extr(
42 | "", "")),
43 | "tags" : text.split_html(extr(
44 | "", "")),
45 | "uploader" : text.remove_html(extr(
46 | "", "")),
47 | "language" : extr(" ", "\n"),
48 | }
49 |
--------------------------------------------------------------------------------
/gallery_dl/extractor/urlshortener.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | """Extractors for general-purpose URL shorteners"""
8 |
9 | from .common import BaseExtractor, Message
10 | from .. import exception
11 |
12 |
13 | class UrlshortenerExtractor(BaseExtractor):
14 | """Base class for URL shortener extractors"""
15 | basecategory = "urlshortener"
16 |
17 |
18 | BASE_PATTERN = UrlshortenerExtractor.update({
19 | "bitly": {
20 | "root": "https://bit.ly",
21 | "pattern": r"bit\.ly",
22 | },
23 | "tco": {
24 | # t.co sends 'http-equiv="refresh"' (200) when using browser UA
25 | "headers": {"User-Agent": None},
26 | "root": "https://t.co",
27 | "pattern": r"t\.co",
28 | },
29 | })
30 |
31 |
32 | class UrlshortenerLinkExtractor(UrlshortenerExtractor):
33 | """Extractor for general-purpose URL shorteners"""
34 | subcategory = "link"
35 | pattern = BASE_PATTERN + r"(/[^/?#]+)"
36 | example = "https://bit.ly/abcde"
37 |
38 | def items(self):
39 | url = self.root + self.groups[-1]
40 | location = self.request_location(
41 | url, headers=self.config_instance("headers"), notfound="URL")
42 | if not location:
43 | raise exception.StopExtraction("Unable to resolve short URL")
44 | yield Message.Queue, location, {}
45 |
--------------------------------------------------------------------------------
/gallery_dl/extractor/wallpapercave.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2021 David Hoppenbrouwers
4 | # Copyright 2023 Mike Fährmann
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License version 2 as
8 | # published by the Free Software Foundation.
9 |
10 | """Extractors for https://wallpapercave.com/"""
11 |
12 | from .common import Extractor, Message
13 | from .. import text
14 |
15 |
16 | class WallpapercaveImageExtractor(Extractor):
17 | """Extractor for images on wallpapercave.com"""
18 | category = "wallpapercave"
19 | subcategory = "image"
20 | root = "https://wallpapercave.com"
21 | pattern = r"(?:https?://)?(?:www\.)?wallpapercave\.com/"
22 | example = "https://wallpapercave.com/w/wp12345"
23 |
24 | def items(self):
25 | page = self.request(text.ensure_http_scheme(self.url)).text
26 |
27 | path = None
28 | for path in text.extract_iter(page, 'class="download" href="', '"'):
29 | image = text.nameext_from_url(path)
30 | yield Message.Directory, image
31 | yield Message.Url, self.root + path, image
32 |
33 | if path is None:
34 | try:
35 | path = text.rextr(
36 | page, 'href="', '"', page.index('id="tdownload"'), None)
37 | except Exception:
38 | pass
39 | else:
40 | image = text.nameext_from_url(path)
41 | yield Message.Directory, image
42 | yield Message.Url, self.root + path, image
43 |
44 | if path is None:
45 | for wp in text.extract_iter(
46 | page, 'class="wallpaper" id="wp', ''):
47 | path = text.rextr(wp, ' src="', '"')
48 | if path:
49 | image = text.nameext_from_url(path)
50 | yield Message.Directory, image
51 | yield Message.Url, self.root + path, image
52 |
--------------------------------------------------------------------------------
/gallery_dl/postprocessor/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2018-2023 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Post-processing modules"""
10 |
11 | modules = [
12 | "classify",
13 | "compare",
14 | "directory",
15 | "exec",
16 | "hash",
17 | "metadata",
18 | "mtime",
19 | "python",
20 | "rename",
21 | "ugoira",
22 | "zip",
23 | ]
24 |
25 |
26 | def find(name):
27 | """Return a postprocessor class with the given name"""
28 | try:
29 | return _cache[name]
30 | except KeyError:
31 | pass
32 |
33 | cls = None
34 | if name in modules: # prevent unwanted imports
35 | try:
36 | module = __import__(name, globals(), None, (), 1)
37 | except ImportError:
38 | pass
39 | else:
40 | cls = module.__postprocessor__
41 | _cache[name] = cls
42 | return cls
43 |
44 |
45 | # --------------------------------------------------------------------
46 | # internals
47 |
48 | _cache = {}
49 |
--------------------------------------------------------------------------------
/gallery_dl/postprocessor/directory.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2025 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Trigger directory format string evaluation"""
10 |
11 | from .common import PostProcessor
12 |
13 |
14 | class DirectoryPP(PostProcessor):
15 |
16 | def __init__(self, job, options):
17 | PostProcessor.__init__(self, job)
18 |
19 | events = options.get("event")
20 | if events is None:
21 | events = ("prepare",)
22 | elif isinstance(events, str):
23 | events = events.split(",")
24 | job.register_hooks({event: self.run for event in events}, options)
25 |
26 | def run(self, pathfmt):
27 | pathfmt.set_directory(pathfmt.kwdict)
28 |
29 |
30 | __postprocessor__ = DirectoryPP
31 |
--------------------------------------------------------------------------------
/gallery_dl/postprocessor/mtime.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2019-2022 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Use metadata as file modification time"""
10 |
11 | from .common import PostProcessor
12 | from .. import text, util, formatter
13 | from datetime import datetime
14 |
15 |
16 | class MtimePP(PostProcessor):
17 |
18 | def __init__(self, job, options):
19 | PostProcessor.__init__(self, job)
20 | value = options.get("value")
21 | if value:
22 | self._get = formatter.parse(value, None, util.identity).format_map
23 | else:
24 | key = options.get("key", "date")
25 | self._get = lambda kwdict: kwdict.get(key)
26 |
27 | events = options.get("event")
28 | if events is None:
29 | events = ("file",)
30 | elif isinstance(events, str):
31 | events = events.split(",")
32 | job.register_hooks({event: self.run for event in events}, options)
33 |
34 | def run(self, pathfmt):
35 | mtime = self._get(pathfmt.kwdict)
36 | if mtime is None:
37 | return
38 |
39 | pathfmt.kwdict["_mtime"] = (
40 | util.datetime_to_timestamp(mtime)
41 | if isinstance(mtime, datetime) else
42 | text.parse_int(mtime)
43 | )
44 |
45 |
46 | __postprocessor__ = MtimePP
47 |
--------------------------------------------------------------------------------
/gallery_dl/postprocessor/python.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2023 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | """Run Python functions"""
10 |
11 | from .common import PostProcessor
12 | from .. import util
13 |
14 |
15 | class PythonPP(PostProcessor):
16 |
17 | def __init__(self, job, options):
18 | PostProcessor.__init__(self, job)
19 |
20 | spec = options["function"]
21 | module_name, _, function_name = spec.rpartition(":")
22 | module = util.import_file(module_name)
23 | self.function = getattr(module, function_name)
24 |
25 | if self._init_archive(job, options):
26 | self.run = self.run_archive
27 |
28 | events = options.get("event")
29 | if events is None:
30 | events = ("file",)
31 | elif isinstance(events, str):
32 | events = events.split(",")
33 | job.register_hooks({event: self.run for event in events}, options)
34 |
35 | def run(self, pathfmt):
36 | self.function(pathfmt.kwdict)
37 |
38 | def run_archive(self, pathfmt):
39 | kwdict = pathfmt.kwdict
40 | if self.archive.check(kwdict):
41 | return
42 | self.function(kwdict)
43 | self.archive.add(kwdict)
44 |
45 |
46 | __postprocessor__ = PythonPP
47 |
--------------------------------------------------------------------------------
/gallery_dl/version.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Copyright 2016-2025 Mike Fährmann
4 | #
5 | # This program is free software; you can redistribute it and/or modify
6 | # it under the terms of the GNU General Public License version 2 as
7 | # published by the Free Software Foundation.
8 |
9 | __version__ = "1.30.0-dev"
10 | __variant__ = None
11 |
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
1 | [build-system]
2 | requires = ["setuptools"]
3 | build-backend = "setuptools.build_meta"
4 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | requests>=2.11.0
2 |
--------------------------------------------------------------------------------
/scripts/build_testresult_db.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | """Collect results of extractor unit tests"""
5 |
6 | import sys
7 | import os.path
8 | import datetime
9 |
10 | import util
11 | from gallery_dl import extractor, job, config
12 | from test.test_results import setup_test_config
13 |
14 |
15 | # filter test cases
16 |
17 | tests = [
18 | (idx, extr, url, result)
19 |
20 | for extr in extractor.extractors()
21 | if hasattr(extr, "test") and extr.test
22 | if len(sys.argv) <= 1 or extr.category in sys.argv
23 |
24 | for idx, (url, result) in enumerate(extr._get_tests())
25 | if result
26 | ]
27 |
28 |
29 | # setup target directory
30 |
31 | path = util.path("archive", "testdb", str(datetime.date.today()))
32 | os.makedirs(path, exist_ok=True)
33 |
34 |
35 | for idx, extr, url, result in tests:
36 |
37 | # filename
38 | name = "{}-{}-{}.json".format(extr.category, extr.subcategory, idx)
39 | print(name)
40 |
41 | # config values
42 | setup_test_config()
43 |
44 | if "options" in result:
45 | for key, value in result["options"]:
46 | key = key.split(".")
47 | config.set(key[:-1], key[-1], value)
48 | if "range" in result:
49 | config.set((), "image-range" , result["range"])
50 | config.set((), "chapter-range", result["range"])
51 |
52 | # write test data
53 | try:
54 | with open(os.path.join(path, name), "w") as outfile:
55 | job.DataJob(url, file=outfile, ensure_ascii=False).run()
56 | except KeyboardInterrupt:
57 | sys.exit()
58 |
--------------------------------------------------------------------------------
/scripts/completion_bash.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | # Copyright 2019 Mike Fährmann
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License version 2 as
8 | # published by the Free Software Foundation.
9 |
10 | """Generate bash completion script from gallery-dl's argument parser"""
11 |
12 | import util
13 | from gallery_dl import option
14 |
15 |
16 | TEMPLATE = """_gallery_dl()
17 | {
18 | local cur prev
19 | COMPREPLY=()
20 | cur="${COMP_WORDS[COMP_CWORD]}"
21 | prev="${COMP_WORDS[COMP_CWORD-1]}"
22 |
23 | if [[ "${prev}" =~ ^(%(fileopts)s)$ ]]; then
24 | COMPREPLY=( $(compgen -f -- "${cur}") )
25 | elif [[ "${prev}" =~ ^(%(diropts)s)$ ]]; then
26 | COMPREPLY=( $(compgen -d -- "${cur}") )
27 | else
28 | COMPREPLY=( $(compgen -W "%(opts)s" -- "${cur}") )
29 | fi
30 | }
31 |
32 | complete -F _gallery_dl gallery-dl
33 | """
34 |
35 | opts = []
36 | diropts = []
37 | fileopts = []
38 | for action in option.build_parser()._actions:
39 |
40 | if action.metavar in ("DEST",):
41 | diropts.extend(action.option_strings)
42 |
43 | elif action.metavar in ("FILE", "CFG"):
44 | fileopts.extend(action.option_strings)
45 |
46 | for opt in action.option_strings:
47 | if opt.startswith("--"):
48 | opts.append(opt)
49 |
50 | PATH = util.path("data/completion/gallery-dl")
51 | with util.lazy(PATH) as fp:
52 | fp.write(TEMPLATE % {
53 | "opts" : " ".join(opts),
54 | "diropts" : "|".join(diropts),
55 | "fileopts": "|".join(fileopts),
56 | })
57 |
--------------------------------------------------------------------------------
/scripts/completion_fish.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | # This program is free software; you can redistribute it and/or modify
5 | # it under the terms of the GNU General Public License version 2 as
6 | # published by the Free Software Foundation.
7 |
8 | """Generate fish completion script from gallery-dl's argument parser"""
9 |
10 | import util
11 | from gallery_dl import option
12 |
13 |
14 | TEMPLATE = """complete -c gallery-dl -x
15 | %(opts)s
16 | """
17 |
18 | opts = []
19 | for action in option.build_parser()._actions:
20 | if not action.option_strings:
21 | continue
22 |
23 | opt = "complete -c gallery-dl"
24 |
25 | if action.metavar:
26 | if action.metavar == "FILE":
27 | opt += " -r -F"
28 | elif action.metavar == "PATH":
29 | opt += " -x -a '(__fish_complete_directories)'"
30 | else:
31 | opt += " -x"
32 |
33 | for optstr in action.option_strings:
34 | if optstr.startswith("--"):
35 | opt += " -l '" + optstr[2:] + "'"
36 | else:
37 | opt += " -s '" + optstr[1:] + "'"
38 |
39 | opt += " -d '" + action.help.replace("'", '"') + "'"
40 |
41 | opts.append(opt)
42 |
43 | PATH = util.path("data/completion/gallery-dl.fish")
44 | with util.lazy(PATH) as fp:
45 | fp.write(TEMPLATE % {"opts": "\n".join(opts)})
46 |
--------------------------------------------------------------------------------
/scripts/completion_zsh.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | # Copyright 2020 Mike Fährmann
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License version 2 as
8 | # published by the Free Software Foundation.
9 |
10 | """Generate zsh completion script from gallery-dl's argument parser"""
11 |
12 | import util
13 | import argparse
14 | from gallery_dl import option
15 |
16 | TEMPLATE = """#compdef gallery-dl
17 |
18 | local curcontext="$curcontext"
19 | typeset -A opt_args
20 |
21 | local rc=1
22 | _arguments -s -S \\
23 | %(opts)s && rc=0
24 |
25 | return rc
26 | """
27 |
28 | TR = str.maketrans({
29 | "'": "'\\''",
30 | "[": "\\[",
31 | "]": "\\]",
32 | })
33 |
34 |
35 | opts = []
36 | for action in option.build_parser()._actions:
37 |
38 | if not action.option_strings or action.help == argparse.SUPPRESS:
39 | continue
40 | elif len(action.option_strings) == 1:
41 | opt = action.option_strings[0]
42 | else:
43 | opt = "{" + ",".join(action.option_strings) + "}"
44 |
45 | opt += "'[" + action.help.translate(TR) + "]'"
46 |
47 | if action.metavar:
48 | opt += ":'<" + action.metavar.lower() + ">'"
49 | if action.metavar in ("FILE", "CFG", "DEST"):
50 | opt += ":_files"
51 |
52 | opts.append(opt)
53 |
54 |
55 | PATH = util.path("data/completion/_gallery-dl")
56 | with util.lazy(PATH) as fp:
57 | fp.write(TEMPLATE % {"opts": " \\\n".join(opts)})
58 |
--------------------------------------------------------------------------------
/scripts/create_test_data.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | # Copyright 2015-2019 Mike Fährmann
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License version 2 as
8 | # published by the Free Software Foundation.
9 |
10 | """Create testdata for extractor tests"""
11 |
12 | import argparse
13 |
14 | import util # noqa
15 | from gallery_dl import extractor
16 | from test.test_results import ResultJob, setup_test_config
17 |
18 |
19 | TESTDATA_FMT = """
20 | test = ("{}", {{
21 | "url": "{}",
22 | "keyword": "{}",
23 | "content": "{}",
24 | }})
25 | """
26 |
27 | TESTDATA_EXCEPTION_FMT = """
28 | test = ("{}", {{
29 | "exception": exception.{},
30 | }})
31 | """
32 |
33 |
34 | def main():
35 | parser = argparse.ArgumentParser()
36 | parser.add_argument("--content", action="store_true")
37 | parser.add_argument("--recreate", action="store_true")
38 | parser.add_argument("urls", nargs="*")
39 | args = parser.parse_args()
40 |
41 | if args.recreate:
42 | urls = [
43 | test[0]
44 | for extr in extractor.extractors() if extr.category in args.urls
45 | for test in extr.test
46 | ]
47 | else:
48 | urls = args.urls
49 |
50 | setup_test_config()
51 |
52 | for url in urls:
53 | tjob = ResultJob(url, content=args.content)
54 | try:
55 | tjob.run()
56 | except Exception as exc:
57 | fmt = TESTDATA_EXCEPTION_FMT
58 | data = (exc.__class__.__name__,)
59 | else:
60 | fmt = TESTDATA_FMT
61 | data = (tjob.url_hash.hexdigest(),
62 | tjob.kwdict_hash.hexdigest(),
63 | tjob.content_hash.hexdigest())
64 | print(tjob.extractor.__class__.__name__)
65 | print(fmt.format(url, *data))
66 |
67 |
68 | if __name__ == '__main__':
69 | main()
70 |
--------------------------------------------------------------------------------
/scripts/hook-gallery_dl.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | from gallery_dl import extractor, downloader, postprocessor
4 |
5 | hiddenimports = [
6 | package.__name__ + "." + module
7 | for package in (extractor, downloader, postprocessor)
8 | for module in package.modules
9 | ]
10 |
11 | hiddenimports.append("yt_dlp")
12 |
--------------------------------------------------------------------------------
/scripts/options.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | # Copyright 2023 Mike Fährmann
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License version 2 as
8 | # published by the Free Software Foundation.
9 |
10 | """Generate a document listing gallery-dl's command-line arguments"""
11 |
12 | import os
13 | import re
14 | import sys
15 |
16 | import util
17 |
18 | import gallery_dl.util
19 | gallery_dl.util.EXECUTABLE = True
20 | from gallery_dl import option # noqa E402
21 |
22 |
23 | TEMPLATE = """# Command-Line Options
24 |
25 |
26 |
27 | {}"""
28 |
29 |
30 | parser = option.build_parser()
31 | parser.usage = ""
32 |
33 | opts = parser.format_help()
34 | opts = opts[8:] # strip 'usage'
35 | opts = re.sub(r"(?m)^(\w+.*)", "## \\1", opts) # group names to headings
36 | opts = opts.replace("\n ", "\n ") # indent by 4
37 |
38 |
39 | PATH = (sys.argv[1] if len(sys.argv) > 1 else
40 | util.path("docs", "options.md"))
41 | with util.lazy(PATH) as fp:
42 | fp.write(TEMPLATE.format(
43 | "/".join(os.path.normpath(__file__).split(os.sep)[-2:]),
44 | opts,
45 | ))
46 |
--------------------------------------------------------------------------------
/scripts/pull-request:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -e
3 |
4 | RE="https://github.com/([^/?#]+)/([^/?#]+)(/tree/(.+))?"
5 | if [[ "$1" =~ $RE ]]; then
6 | USER="${BASH_REMATCH[1]}"
7 | REPO="${BASH_REMATCH[2]}"
8 | BRANCH="${BASH_REMATCH[4]:-master}"
9 |
10 | else
11 | echo "invalid github repository identifier: '$1'"
12 | exit 1
13 |
14 | fi
15 |
16 |
17 | call() { echo "$@"; "$@"; echo; }
18 |
19 | # {x,,} transforms value to lowercase
20 | case "${2,,}" in
21 |
22 | ""|"f"|"fetch")
23 | call git remote add "$USER" git@github.com:"$USER"/"$REPO".git || true
24 | call git fetch "$USER" "$BRANCH"
25 | call git branch "$USER-$BRANCH" "$USER/$BRANCH" || true
26 | call git switch "$USER-$BRANCH"
27 | ;;
28 |
29 | "m"|"merge")
30 | RE='\s*(.+)\s+#([0-9]+)'
31 | if [[ "$3" =~ $RE ]]; then
32 | TITLE="${BASH_REMATCH[1]}"
33 | PULL="${BASH_REMATCH[2]}"
34 | fi
35 |
36 | call git switch master
37 | call git merge --no-ff --edit -m "merge #${PULL-_}: ${TITLE-_}" "$USER-$BRANCH"
38 | call git branch -d "$USER-$BRANCH"
39 | ;;
40 |
41 | "p"|"push")
42 | call git push "$USER" HEAD:"$BRANCH"
43 | ;;
44 |
45 | "pf"|"push-force")
46 | call git push --force "$USER" HEAD:"$BRANCH"
47 | ;;
48 |
49 | "d"|"delete")
50 | call git switch master
51 | call git branch -D "$USER-$BRANCH"
52 | call git remote remove "$USER"
53 | ;;
54 |
55 | *)
56 | echo "invalid action: '$2'"
57 | exit 2
58 | ;;
59 |
60 | esac
61 |
--------------------------------------------------------------------------------
/scripts/pyinstaller.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | """Build a standalone executable using PyInstaller"""
5 |
6 | import argparse
7 | import util
8 | import sys
9 |
10 |
11 | def main():
12 | parser = argparse.ArgumentParser()
13 | parser.add_argument("-o", "--os")
14 | parser.add_argument("-a", "--arch")
15 | parser.add_argument("-l", "--label")
16 | parser.add_argument("-e", "--extension")
17 | parser.add_argument("-p", "--print", action="store_true")
18 | args = parser.parse_args()
19 |
20 | if args.label:
21 | label = args.label
22 | else:
23 | label = ""
24 | if args.os:
25 | os = args.os.partition("-")[0].lower()
26 | if os == "ubuntu":
27 | os = "linux"
28 | label += os
29 | if args.arch == "x86":
30 | label += "_x86"
31 |
32 | if args.print:
33 | return print(label)
34 |
35 | name = "gallery-dl"
36 | if label:
37 | name = "{}_{}".format(name, label)
38 | if args.extension:
39 | name = "{}.{}".format(name, args.extension.lower())
40 |
41 | import PyInstaller.__main__
42 | return PyInstaller.__main__.run([
43 | "--onefile",
44 | "--console",
45 | "--name", name,
46 |
47 | # https://github.com/pyinstaller/pyinstaller/issues/9149
48 | "--exclude-module", "pkg_resources",
49 |
50 | "--additional-hooks-dir", util.path("scripts"),
51 | "--distpath", util.path("dist"),
52 | "--workpath", util.path("build"),
53 | "--specpath", util.path("build"),
54 | util.path("gallery_dl", "__main__.py"),
55 | ])
56 |
57 |
58 | if __name__ == "__main__":
59 | sys.exit(main())
60 |
--------------------------------------------------------------------------------
/scripts/run_tests.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | # Copyright 2021 Mike Fährmann
5 | #
6 | # This program is free software; you can redistribute it and/or modify
7 | # it under the terms of the GNU General Public License version 2 as
8 | # published by the Free Software Foundation.
9 |
10 | import os
11 | import sys
12 | import unittest
13 |
14 | TEST_DIRECTORY = os.path.join(
15 | os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "test")
16 |
17 | sys.path.insert(0, TEST_DIRECTORY)
18 |
19 | if len(sys.argv) <= 1:
20 | TESTS = [
21 | file.rpartition(".")[0]
22 | for file in os.listdir(TEST_DIRECTORY)
23 | if file.startswith("test_") and file != "test_results.py"
24 | ]
25 | else:
26 | TESTS = [
27 | name if name.startswith("test_") else "test_" + name
28 | for name in sys.argv[1:]
29 | ]
30 |
31 |
32 | suite = unittest.TestSuite()
33 |
34 | for test in TESTS:
35 | try:
36 | module = __import__(test)
37 | except ImportError:
38 | print("unable to import", test)
39 | else:
40 | tests = unittest.defaultTestLoader.loadTestsFromModule(module)
41 | suite.addTests(tests)
42 |
43 | if __name__ == "__main__":
44 | result = unittest.TextTestRunner(verbosity=2).run(suite)
45 | if result.errors or result.failures:
46 | sys.exit(1)
47 |
--------------------------------------------------------------------------------
/scripts/util.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | import os
8 | import io
9 | import sys
10 |
11 | ROOTDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
12 | sys.path.insert(0, os.path.realpath(ROOTDIR))
13 |
14 |
15 | def path(*segments, join=os.path.join):
16 | result = join(ROOTDIR, *segments)
17 | os.makedirs(os.path.dirname(result), exist_ok=True)
18 | return result
19 |
20 |
21 | class lazy():
22 |
23 | def __init__(self, path):
24 | self.path = path
25 | self.buffer = io.StringIO()
26 |
27 | def __enter__(self):
28 | return self.buffer
29 |
30 | def __exit__(self, exc_type, exc_value, traceback):
31 | # get content of old file
32 | try:
33 | with open(self.path, encoding="utf-8") as fp:
34 | old = fp.read()
35 | except Exception:
36 | old = None
37 |
38 | # get new content
39 | new = self.buffer.getvalue()
40 |
41 | if new != old:
42 | # rewrite entire file
43 | with open(self.path, "w", encoding="utf-8") as fp:
44 | fp.write(new)
45 | else:
46 | # only update atime and mtime
47 | os.utime(self.path)
48 |
--------------------------------------------------------------------------------
/setup.cfg:
--------------------------------------------------------------------------------
1 | [flake8]
2 | exclude = .git,__pycache__,build,dist,archive
3 | ignore = E203,E226,W504
4 | per-file-ignores =
5 | setup.py: E501
6 | gallery_dl/extractor/500px.py: E501
7 | gallery_dl/extractor/mangapark.py: E501
8 | test/results/*.py: E122,E241,E402,E501
9 |
--------------------------------------------------------------------------------
/snap/local/launchers/gallery-dl-launch:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # This is the maintenance launcher for the snap, make necessary runtime environment changes to make the snap work here. You may also insert security confinement/deprecation/obsoletion notice of the snap here.
3 |
4 | set \
5 | -o errexit \
6 | -o errtrace \
7 | -o nounset \
8 | -o pipefail
9 |
10 | # Use user's real home directory for canonical configuration path access
11 | declare REALHOME="$(
12 | getent passwd "${USER}" \
13 | | cut --delimiter=: --fields=6
14 | )"
15 | HOME="${REALHOME}"
16 |
17 | if ! test -f "${SNAP_USER_COMMON}"/marker_disable_interface_warning; then
18 | # Warn if the `removable-media` interface isn't connected
19 | if ! ls /media &>/dev/null; then
20 | printf -- \
21 | "It seems that this snap isn't connected to the \`removable-media\` security confinement interface. If you want to save the files under \`/media\`, \`/run/media\`, or \`/mnt\` directories you need to connect this snap to the \`removable-media\` interface by running the following command in a terminal:\\n\\n sudo snap connect %s:removable-media\\n\\n" \
22 | "${SNAP_NAME}" \
23 | >&2
24 | printf -- \
25 | "To disable this warning create an empty file at the following path:\\n\\n %s/marker_disable_interface_warning\\n\\n" \
26 | "${SNAP_USER_COMMON}" \
27 | >&2
28 | fi
29 | fi
30 |
31 | # Finally run the next part of the command chain
32 | exec "${@}"
33 |
--------------------------------------------------------------------------------
/test/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mikf/gallery-dl/0b0152b3475f0c3a8ae283840e327c2c3d52859c/test/__init__.py
--------------------------------------------------------------------------------
/test/results/2ch.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | gallery_dl = __import__("gallery_dl.extractor.2ch")
8 | _2ch = getattr(gallery_dl.extractor, "2ch")
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://2ch.hk/a/res/6202876.html",
14 | "#category": ("", "2ch", "thread"),
15 | "#class" : _2ch._2chThreadExtractor,
16 | "#pattern" : r"https://2ch\.hk/a/src/6202876/\d+\.\w+",
17 | "#count" : range(450, 1000),
18 |
19 | "banned" : 0,
20 | "board" : "a",
21 | "closed" : 0,
22 | "comment" : str,
23 | "date" : "type:datetime",
24 | "displayname": str,
25 | "email" : str,
26 | "endless" : 1,
27 | "extension": str,
28 | "filename" : str,
29 | "fullname" : str,
30 | "height" : int,
31 | "lasthit" : range(1705000000, 1900000000),
32 | "md5" : r"re:[0-9a-f]{32}",
33 | "name" : r"re:\d+\.\w+",
34 | "num" : int,
35 | "number" : range(1, 1000),
36 | "op" : 0,
37 | "parent" : int,
38 | "path" : r"re:/a/src/6202876/\d+\.\w+",
39 | "post_name": str,
40 | "size" : int,
41 | "sticky" : 0,
42 | "subject" : str,
43 | "thread" : "6202876",
44 | "thumbnail": str,
45 | "tim" : r"re:\d+",
46 | "timestamp": int,
47 | "title" : "MP4/WEBM",
48 | "tn_height": int,
49 | "tn_width" : int,
50 | "trip" : "",
51 | "type" : int,
52 | "views" : int,
53 | "width" : int,
54 | },
55 |
56 | {
57 | "#url" : "https://2ch.hk/a/",
58 | "#category": ("", "2ch", "board"),
59 | "#class" : _2ch._2chBoardExtractor,
60 | "#pattern" : _2ch._2chThreadExtractor.pattern,
61 | "#count" : range(200, 400),
62 | },
63 |
64 | )
65 |
--------------------------------------------------------------------------------
/test/results/2chan.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | gallery_dl = __import__("gallery_dl.extractor.2chan")
8 | _2chan = getattr(gallery_dl.extractor, "2chan")
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://dec.2chan.net/70/res/17222.htm",
14 | "#category": ("", "2chan", "thread"),
15 | "#class" : _2chan._2chanThreadExtractor,
16 | "#pattern" : r"https://dec\.2chan\.net/70/src/\d{13}\.jpg",
17 | "#count" : ">= 2",
18 |
19 | "board" : "70",
20 | "board_name": "新板提案",
21 | "com" : str,
22 | "fsize" : r"re:\d+",
23 | "name" : "名無し",
24 | "no" : r"re:17\d\d\d",
25 | "now" : r"re:2[34]/../..\(.\)..:..:..",
26 | "post" : "無題",
27 | "server" : "dec",
28 | "thread" : "17222",
29 | "tim" : r"re:^\d{13}$",
30 | "time" : r"re:^\d{10}$",
31 | "title" : "画像会話板",
32 | },
33 |
34 | )
35 |
--------------------------------------------------------------------------------
/test/results/2chen.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | gallery_dl = __import__("gallery_dl.extractor.2chen")
8 | _2chen = getattr(gallery_dl.extractor, "2chen")
9 | import datetime
10 |
11 |
12 | __tests__ = (
13 | {
14 | "#url" : "https://sturdychan.help/tv/268929",
15 | "#category": ("", "2chen", "thread"),
16 | "#class" : _2chen._2chenThreadExtractor,
17 | "#pattern" : r"https://sturdychan\.help/assets/images/src/\w{40}\.\w+$",
18 | "#count" : ">= 179",
19 |
20 | "board" : "tv",
21 | "date" : datetime.datetime,
22 | "hash" : r"re:[0-9a-f]{40}",
23 | "name" : "Anonymous",
24 | "no" : r"re:\d+",
25 | "thread": "268929",
26 | "time" : int,
27 | "title" : "「/ttg/ #118: 🇧🇷 edition」",
28 | "url" : str,
29 | },
30 |
31 | {
32 | "#url" : "https://2chen.club/tv/1",
33 | "#category": ("", "2chen", "thread"),
34 | "#class" : _2chen._2chenThreadExtractor,
35 | },
36 |
37 | {
38 | "#url" : "https://2chen.moe/jp/303786",
39 | "#category": ("", "2chen", "thread"),
40 | "#class" : _2chen._2chenThreadExtractor,
41 | },
42 |
43 | {
44 | "#url" : "https://sturdychan.help/co/",
45 | "#category": ("", "2chen", "board"),
46 | "#class" : _2chen._2chenBoardExtractor,
47 | "#pattern" : _2chen._2chenThreadExtractor.pattern,
48 | },
49 |
50 | {
51 | "#url" : "https://2chen.moe/co",
52 | "#category": ("", "2chen", "board"),
53 | "#class" : _2chen._2chenBoardExtractor,
54 | },
55 |
56 | {
57 | "#url" : "https://2chen.club/tv",
58 | "#category": ("", "2chen", "board"),
59 | "#class" : _2chen._2chenBoardExtractor,
60 | },
61 |
62 | {
63 | "#url" : "https://2chen.moe/co/catalog",
64 | "#category": ("", "2chen", "board"),
65 | "#class" : _2chen._2chenBoardExtractor,
66 | },
67 |
68 | )
69 |
--------------------------------------------------------------------------------
/test/results/3dbooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | gallery_dl = __import__("gallery_dl.extractor.3dbooru")
8 | _3dbooru = getattr(gallery_dl.extractor, "3dbooru")
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "http://behoimi.org/post?tags=himekawa_azuru+dress",
14 | "#category": ("booru", "3dbooru", "tag"),
15 | "#class" : _3dbooru._3dbooruTagExtractor,
16 | "#sha1_url" : "ecb30c6aaaf8a6ff8f55255737a9840832a483c1",
17 | "#sha1_content": "11cbda40c287e026c1ce4ca430810f761f2d0b2a",
18 | },
19 |
20 | {
21 | "#url" : "http://behoimi.org/pool/show/27",
22 | "#category": ("booru", "3dbooru", "pool"),
23 | "#class" : _3dbooru._3dbooruPoolExtractor,
24 | "#sha1_url" : "da75d2d1475449d5ef0c266cb612683b110a30f2",
25 | "#sha1_content": "fd5b37c5c6c2de4b4d6f1facffdefa1e28176554",
26 | },
27 |
28 | {
29 | "#url" : "http://behoimi.org/post/show/140852",
30 | "#category": ("booru", "3dbooru", "post"),
31 | "#class" : _3dbooru._3dbooruPostExtractor,
32 | "#options" : {"tags": True},
33 | "#sha1_url" : "ce874ea26f01d6c94795f3cc3aaaaa9bc325f2f6",
34 | "#sha1_content": "26549d55b82aa9a6c1686b96af8bfcfa50805cd4",
35 |
36 | "tags_character": "furude_rika",
37 | "tags_copyright": "higurashi_no_naku_koro_ni",
38 | "tags_model" : "himekawa_azuru",
39 | "tags_general" : str,
40 | },
41 |
42 | {
43 | "#url" : "http://behoimi.org/post/popular_by_month?month=2&year=2013",
44 | "#category": ("booru", "3dbooru", "popular"),
45 | "#class" : _3dbooru._3dbooruPopularExtractor,
46 | "#pattern" : r"http://behoimi\.org/data/../../[0-9a-f]{32}\.jpg",
47 | "#count" : 20,
48 | },
49 |
50 | )
51 |
--------------------------------------------------------------------------------
/test/results/4archive.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | gallery_dl = __import__("gallery_dl.extractor.4archive")
8 | _4archive = getattr(gallery_dl.extractor, "4archive")
9 | import datetime
10 |
11 |
12 | __tests__ = (
13 | {
14 | "#url" : "https://4archive.org/board/u/thread/2397221",
15 | "#category": ("", "4archive", "thread"),
16 | "#class" : _4archive._4archiveThreadExtractor,
17 | "#pattern" : r"https://(cdn\.4archive\.org/u/image/150\d/\d\d\d/\d+\.\w+|4archive\.org/image/image-404\.png)",
18 | "#count" : 16,
19 |
20 | "board" : "u",
21 | "com" : str,
22 | "date" : datetime.datetime,
23 | "name" : "Anonymous",
24 | "no" : range(2397221, 2418158),
25 | "thread": 2397221,
26 | "time" : int,
27 | "title" : "best anime",
28 | "url" : str,
29 | "width" : int,
30 | "height": int,
31 | "size" : int,
32 | },
33 |
34 | {
35 | "#url" : "https://4archive.org/board/jp/thread/17611798",
36 | "#category": ("", "4archive", "thread"),
37 | "#class" : _4archive._4archiveThreadExtractor,
38 | "#pattern" : r"https://(cdn\.4archive\.org/jp/image/\d\d\d\d/\d\d\d/\d+\.\w+|4archive\.org/image/image-404\.png)",
39 | "#count" : 85,
40 | },
41 |
42 | {
43 | "#url" : "https://4archive.org/board/u",
44 | "#category": ("", "4archive", "board"),
45 | "#class" : _4archive._4archiveBoardExtractor,
46 | "#pattern" : _4archive._4archiveThreadExtractor.pattern,
47 | "#range" : "1-20",
48 | "#count" : 20,
49 | },
50 |
51 | {
52 | "#url" : "https://4archive.org/board/jp/10",
53 | "#category": ("", "4archive", "board"),
54 | "#class" : _4archive._4archiveBoardExtractor,
55 | "#pattern" : _4archive._4archiveThreadExtractor.pattern,
56 | "#range" : "1-50",
57 | "#count" : 50,
58 | }
59 |
60 | )
61 |
--------------------------------------------------------------------------------
/test/results/4chan.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | gallery_dl = __import__("gallery_dl.extractor.4chan")
8 | _4chan = getattr(gallery_dl.extractor, "4chan")
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://boards.4chan.org/tg/thread/15396072/",
14 | "#category": ("", "4chan", "thread"),
15 | "#class" : _4chan._4chanThreadExtractor,
16 | "#sha1_url" : "39082ad166161966d7ba8e37f2173a824eb540f0",
17 | "#sha1_metadata": "2cadd32796492baca25f5060dc95e9f4e24a0ff2",
18 | "#sha1_content" : "742c6d256c813b29f246e1d765bba949fc3ac453",
19 | },
20 |
21 | {
22 | "#url" : "https://boards.4channel.org/tg/thread/15396072/",
23 | "#category": ("", "4chan", "thread"),
24 | "#class" : _4chan._4chanThreadExtractor,
25 | "#sha1_url" : "39082ad166161966d7ba8e37f2173a824eb540f0",
26 | "#sha1_metadata": "2cadd32796492baca25f5060dc95e9f4e24a0ff2",
27 | },
28 |
29 | {
30 | "#url" : "https://boards.4channel.org/po/",
31 | "#category": ("", "4chan", "board"),
32 | "#class" : _4chan._4chanBoardExtractor,
33 | "#pattern" : _4chan._4chanThreadExtractor.pattern,
34 | "#count" : ">= 100",
35 | },
36 |
37 | )
38 |
--------------------------------------------------------------------------------
/test/results/4chanarchives.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | gallery_dl = __import__("gallery_dl.extractor.4chanarchives")
8 | _4chanarchives = getattr(gallery_dl.extractor, "4chanarchives")
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://4chanarchives.com/board/c/thread/2707110",
14 | "#category": ("", "4chanarchives", "thread"),
15 | "#class" : _4chanarchives._4chanarchivesThreadExtractor,
16 | "#pattern" : r"https://i\.imgur\.com/(0wLGseE|qbByWDc)\.jpg",
17 | "#count" : 2,
18 |
19 | "board" : "c",
20 | "com" : str,
21 | "name" : "Anonymous",
22 | "no" : int,
23 | "thread": "2707110",
24 | "time" : r"re:2016-07-1\d \d\d:\d\d:\d\d",
25 | "title" : "Ren Kagami from 'Oyako Neburi'",
26 | },
27 |
28 | {
29 | "#url" : "https://4chanarchives.com/board/c/",
30 | "#category": ("", "4chanarchives", "board"),
31 | "#class" : _4chanarchives._4chanarchivesBoardExtractor,
32 | "#pattern" : _4chanarchives._4chanarchivesThreadExtractor.pattern,
33 | "#range" : "1-40",
34 | "#count" : 40,
35 | },
36 |
37 | {
38 | "#url" : "https://4chanarchives.com/board/c",
39 | "#category": ("", "4chanarchives", "board"),
40 | "#class" : _4chanarchives._4chanarchivesBoardExtractor,
41 | },
42 |
43 | {
44 | "#url" : "https://4chanarchives.com/board/c/10",
45 | "#category": ("", "4chanarchives", "board"),
46 | "#class" : _4chanarchives._4chanarchivesBoardExtractor,
47 | },
48 |
49 | )
50 |
--------------------------------------------------------------------------------
/test/results/4plebs.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://archive.4plebs.org/tg/thread/54059290",
13 | "#category": ("foolfuuka", "4plebs", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#pattern" : r"https://i\.4pcdn\.org/tg/1[34]\d{11}\.(jpg|png|gif)",
16 | "#count" : 30,
17 | },
18 |
19 | {
20 | "#url" : "https://archive.4plebs.org/tg/",
21 | "#category": ("foolfuuka", "4plebs", "board"),
22 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
23 | },
24 |
25 | {
26 | "#url" : "https://archive.4plebs.org/_/search/text/test/",
27 | "#category": ("foolfuuka", "4plebs", "search"),
28 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://archive.4plebs.org/tg/gallery/1",
33 | "#category": ("foolfuuka", "4plebs", "gallery"),
34 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
35 | },
36 |
37 | )
38 |
--------------------------------------------------------------------------------
/test/results/8kun.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import vichan
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://8kun.top/test/res/65248.html",
13 | "#category": ("vichan", "8kun", "thread"),
14 | "#class" : vichan.VichanThreadExtractor,
15 | "#pattern" : r"https://media\.128ducks\.com/file_store/\w{64}\.\w+",
16 | "#count" : ">= 8",
17 | },
18 |
19 | {
20 | "#url" : "https://8kun.top/v/index.html",
21 | "#category": ("vichan", "8kun", "board"),
22 | "#class" : vichan.VichanBoardExtractor,
23 | "#pattern" : vichan.VichanThreadExtractor.pattern,
24 | "#count" : ">= 100",
25 | },
26 |
27 | {
28 | "#url" : "https://8kun.top/v/2.html",
29 | "#category": ("vichan", "8kun", "board"),
30 | "#class" : vichan.VichanBoardExtractor,
31 | },
32 |
33 | {
34 | "#url" : "https://8kun.top/v/index.html?PageSpeed=noscript",
35 | "#category": ("vichan", "8kun", "board"),
36 | "#class" : vichan.VichanBoardExtractor,
37 | },
38 |
39 | )
40 |
--------------------------------------------------------------------------------
/test/results/94chan.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import jschan
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://94chan.org/art/thread/25.html",
13 | "#category": ("jschan", "94chan", "thread"),
14 | "#class" : jschan.JschanThreadExtractor,
15 | "#pattern" : r"https://94chan.org/file/[0-9a-f]{64}(\.\w+)?",
16 | "#count" : ">= 15",
17 | },
18 |
19 | {
20 | "#url" : "https://94chan.org/art/",
21 | "#category": ("jschan", "94chan", "board"),
22 | "#class" : jschan.JschanBoardExtractor,
23 | "#pattern" : jschan.JschanThreadExtractor.pattern,
24 | "#count" : ">= 30",
25 | },
26 |
27 | {
28 | "#url" : "https://94chan.org/art/2.html",
29 | "#category": ("jschan", "94chan", "board"),
30 | "#class" : jschan.JschanBoardExtractor,
31 | },
32 |
33 | {
34 | "#url" : "https://94chan.org/art/catalog.html",
35 | "#category": ("jschan", "94chan", "board"),
36 | "#class" : jschan.JschanBoardExtractor,
37 | },
38 |
39 | {
40 | "#url" : "https://94chan.org/art/index.html",
41 | "#category": ("jschan", "94chan", "board"),
42 | "#class" : jschan.JschanBoardExtractor,
43 | },
44 |
45 | )
46 |
--------------------------------------------------------------------------------
/test/results/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | import os
8 | import functools
9 |
10 | __directory__ = os.path.dirname(__file__)
11 |
12 |
13 | @functools.lru_cache(maxsize=None)
14 | def tests(name):
15 | module = __import__(name, globals(), None, (), 1)
16 | return module.__tests__
17 |
18 |
19 | def all():
20 | ignore = ("__init__.py", "__pycache__")
21 | for filename in os.listdir(__directory__):
22 | if filename not in ignore:
23 | yield from tests(filename[:-3])
24 |
25 |
26 | def category(category):
27 | return tests(category.replace(".", ""))
28 |
--------------------------------------------------------------------------------
/test/results/acidimg.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://acidimg.cc/img-5acb6b9de4640.html",
13 | "#category": ("imagehost", "acidimg", "image"),
14 | "#class" : imagehosts.AcidimgImageExtractor,
15 | "#sha1_url" : "f132a630006e8d84f52d59555191ed82b3b64c04",
16 | "#sha1_metadata": "135347ab4345002fc013863c0d9419ba32d98f78",
17 | "#sha1_content" : "0c8768055e4e20e7c7259608b67799171b691140",
18 | },
19 |
20 | )
21 |
--------------------------------------------------------------------------------
/test/results/adultempire.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import adultempire
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.adultempire.com/5998/gallery.html",
13 | "#category": ("", "adultempire", "gallery"),
14 | "#class" : adultempire.AdultempireGalleryExtractor,
15 | "#range" : "1",
16 | "#sha1_metadata": "5b3266e69801db0d78c22181da23bc102886e027",
17 | "#sha1_content" : "5c6beb31e5e3cdc90ee5910d5c30f9aaec977b9e",
18 | },
19 |
20 | {
21 | "#url" : "https://www.adultdvdempire.com/5683/gallery.html",
22 | "#category": ("", "adultempire", "gallery"),
23 | "#class" : adultempire.AdultempireGalleryExtractor,
24 | "#sha1_url" : "b12cd1a65cae8019d837505adb4d6a2c1ed4d70d",
25 | "#sha1_metadata": "8d448d79c4ac5f5b10a3019d5b5129ddb43655e5",
26 | },
27 |
28 | )
29 |
--------------------------------------------------------------------------------
/test/results/aibooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import danbooru
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://aibooru.online/posts?tags=center_frills&z=1",
13 | "#category": ("Danbooru", "aibooru", "tag"),
14 | "#class" : danbooru.DanbooruTagExtractor,
15 | "#pattern" : r"https://cdn\.aibooru\.download/original/[0-9a-f]{2}/[0-9a-f]{2}/[0-9a-f]{32}\.\w+",
16 | "#count" : ">= 50",
17 | },
18 |
19 | {
20 | "#url" : "https://safe.aibooru.online/posts?tags=center_frills",
21 | "#category": ("Danbooru", "aibooru", "tag"),
22 | "#class" : danbooru.DanbooruTagExtractor,
23 | },
24 |
25 | {
26 | "#url" : "https://aibooru.online/pools/1",
27 | "#category": ("Danbooru", "aibooru", "pool"),
28 | "#class" : danbooru.DanbooruPoolExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://aibooru.online/posts/1",
33 | "#category": ("Danbooru", "aibooru", "post"),
34 | "#class" : danbooru.DanbooruPostExtractor,
35 | "#sha1_content": "54d548743cd67799a62c77cbae97cfa0fec1b7e9",
36 | },
37 |
38 | {
39 | "#url" : "https://aibooru.online/explore/posts/popular",
40 | "#category": ("Danbooru", "aibooru", "popular"),
41 | "#class" : danbooru.DanbooruPopularExtractor,
42 | },
43 |
44 | )
45 |
--------------------------------------------------------------------------------
/test/results/allgirlbooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import gelbooru_v01
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://allgirl.booru.org/index.php?page=post&s=list&tags=dress",
13 | "#category": ("gelbooru_v01", "allgirlbooru", "tag"),
14 | "#class" : gelbooru_v01.GelbooruV01TagExtractor,
15 | "#range" : "1-25",
16 | "#count" : 25,
17 | },
18 |
19 | {
20 | "#url" : "https://allgirl.booru.org/index.php?page=favorites&s=view&id=380",
21 | "#category": ("gelbooru_v01", "allgirlbooru", "favorite"),
22 | "#class" : gelbooru_v01.GelbooruV01FavoriteExtractor,
23 | "#count" : 4,
24 | },
25 |
26 | {
27 | "#url" : "https://allgirl.booru.org/index.php?page=post&s=view&id=107213",
28 | "#category": ("gelbooru_v01", "allgirlbooru", "post"),
29 | "#class" : gelbooru_v01.GelbooruV01PostExtractor,
30 | "#sha1_url" : "b416800d2d2b072f80d3b37cfca9cb806fb25d51",
31 | "#sha1_content": "3e3c65e0854a988696e11adf0de52f8fa90a51c7",
32 |
33 | "created_at": "2021-02-13 16:27:39",
34 | "date" : "dt:2021-02-13 16:27:39",
35 | "file_url" : "https://img.booru.org/allgirl//images/107/2aaa0438d58fc7baa75a53b4a9621bb89a9d3fdb.jpg",
36 | "height" : "1200",
37 | "id" : "107213",
38 | "md5" : "2aaa0438d58fc7baa75a53b4a9621bb89a9d3fdb",
39 | "rating" : "s",
40 | "score" : str,
41 | "source" : "",
42 | "tags" : "blush dress green_eyes green_hair hatsune_miku long_hair twintails vocaloid",
43 | "uploader" : "Honochi31",
44 | "width" : "1600",
45 | },
46 |
47 | )
48 |
--------------------------------------------------------------------------------
/test/results/animereactor.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import reactor
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "http://anime.reactor.cc/tag/Anime+Art",
13 | "#category": ("reactor", "anime.reactor", "tag"),
14 | "#class" : reactor.ReactorTagExtractor,
15 | },
16 |
17 | {
18 | "#url" : "http://anime.reactor.cc/user/Shuster",
19 | "#category": ("reactor", "anime.reactor", "user"),
20 | "#class" : reactor.ReactorUserExtractor,
21 | },
22 |
23 | {
24 | "#url" : "http://anime.reactor.cc/post/3576250",
25 | "#category": ("reactor", "anime.reactor", "post"),
26 | "#class" : reactor.ReactorPostExtractor,
27 | },
28 |
29 | )
30 |
--------------------------------------------------------------------------------
/test/results/architizer.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import architizer
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://architizer.com/projects/house-lo/",
13 | "#category": ("", "architizer", "project"),
14 | "#class" : architizer.ArchitizerProjectExtractor,
15 | "#pattern" : r"https://architizer-prod\.imgix\.net/media/mediadata/uploads/.+\.jpg$",
16 |
17 | "count" : 27,
18 | "description": str,
19 | "firm" : "Atelier Lina Bellovicova",
20 | "gid" : "225496",
21 | "location" : "Czechia",
22 | "num" : int,
23 | "size" : "1000 sqft - 3000 sqft",
24 | "slug" : "house-lo",
25 | "status" : "Built",
26 | "subcategory": "project",
27 | "title" : "House LO",
28 | "type" : "Residential › Private House",
29 | "year" : "2020",
30 | },
31 |
32 | {
33 | "#url" : "https://architizer.com/firms/olson-kundig/",
34 | "#category": ("", "architizer", "firm"),
35 | "#class" : architizer.ArchitizerFirmExtractor,
36 | "#pattern" : architizer.ArchitizerProjectExtractor.pattern,
37 | "#count" : ">= 90",
38 | },
39 |
40 | )
41 |
--------------------------------------------------------------------------------
/test/results/archiveofsins.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://archiveofsins.com/h/thread/4668813/",
13 | "#category": ("foolfuuka", "archiveofsins", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#sha1_url" : "f612d287087e10a228ef69517cf811539db9a102",
16 | "#sha1_content": "0dd92d0d8a7bf6e2f7d1f5ac8954c1bcf18c22a4",
17 | },
18 |
19 | {
20 | "#url" : "https://archiveofsins.com/h/",
21 | "#category": ("foolfuuka", "archiveofsins", "board"),
22 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
23 | },
24 |
25 | {
26 | "#url" : "https://archiveofsins.com/_/search/text/test/",
27 | "#category": ("foolfuuka", "archiveofsins", "search"),
28 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://archiveofsins.com/_/search/text/test/",
33 | "#category": ("foolfuuka", "archiveofsins", "search"),
34 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
35 | },
36 |
37 | {
38 | "#url" : "https://archiveofsins.com/h/gallery/3",
39 | "#category": ("foolfuuka", "archiveofsins", "gallery"),
40 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
41 | },
42 |
43 | )
44 |
--------------------------------------------------------------------------------
/test/results/atfbooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import danbooru
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://booru.allthefallen.moe/posts?tags=yume_shokunin",
13 | "#category": ("Danbooru", "atfbooru", "tag"),
14 | "#class" : danbooru.DanbooruTagExtractor,
15 | "#count" : 12,
16 | },
17 |
18 | {
19 | "#url" : "https://booru.allthefallen.moe/pools/9",
20 | "#category": ("Danbooru", "atfbooru", "pool"),
21 | "#class" : danbooru.DanbooruPoolExtractor,
22 | "#count" : 6,
23 | "#sha1_url": "902549ffcdb00fe033c3f63e12bc3cb95c5fd8d5",
24 | },
25 |
26 | {
27 | "#url" : "https://booru.allthefallen.moe/posts/22",
28 | "#category": ("Danbooru", "atfbooru", "post"),
29 | "#class" : danbooru.DanbooruPostExtractor,
30 | "#sha1_content": "21dda68e1d7e0a554078e62923f537d8e895cac8",
31 | },
32 |
33 | {
34 | "#url" : "https://booru.allthefallen.moe/explore/posts/popular",
35 | "#category": ("Danbooru", "atfbooru", "popular"),
36 | "#class" : danbooru.DanbooruPopularExtractor,
37 | },
38 |
39 | )
40 |
--------------------------------------------------------------------------------
/test/results/azurlanewiki.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://azurlane.koumakan.jp/wiki/Azur_Lane_Wiki",
13 | "#category": ("wikimedia", "azurlanewiki", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://azurlane.koumakan.jp/wiki/Louisville/Gallery",
19 | "#comment" : "entries with missing 'imageinfo' (#5384)",
20 | "#category": ("wikimedia", "azurlanewiki", "article"),
21 | "#class" : wikimedia.WikimediaArticleExtractor,
22 | "#count" : "> 10",
23 | },
24 |
25 | )
26 |
--------------------------------------------------------------------------------
/test/results/b4k.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://arch.b4k.dev/meta/thread/196/",
13 | "#category": ("foolfuuka", "b4k", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#urls" : "https://arch.b4k.dev/media/meta/image/1481/33/14813348737492.jpg",
16 | },
17 |
18 | {
19 | "#url" : "https://arch.b4k.co/meta/thread/196/",
20 | "#category": ("foolfuuka", "b4k", "thread"),
21 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
22 | "#urls" : "https://arch.b4k.dev/media/meta/image/1481/33/14813348737492.jpg",
23 | },
24 |
25 | {
26 | "#url" : "https://arch.b4k.dev/meta/",
27 | "#category": ("foolfuuka", "b4k", "board"),
28 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://arch.b4k.dev/meta/gallery/",
33 | "#category": ("foolfuuka", "b4k", "gallery"),
34 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
35 | },
36 |
37 | )
38 |
--------------------------------------------------------------------------------
/test/results/baraag.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import mastodon
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://baraag.net/@pumpkinnsfw",
13 | "#category": ("mastodon", "baraag", "user"),
14 | "#class" : mastodon.MastodonUserExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://baraag.net/bookmarks",
19 | "#category": ("mastodon", "baraag", "bookmark"),
20 | "#class" : mastodon.MastodonBookmarkExtractor,
21 | },
22 |
23 | {
24 | "#url" : "https://baraag.net/users/pumpkinnsfw/following",
25 | "#category": ("mastodon", "baraag", "following"),
26 | "#class" : mastodon.MastodonFollowingExtractor,
27 | },
28 |
29 | {
30 | "#url" : "https://baraag.net/@pumpkinnsfw/104364170556898443",
31 | "#category": ("mastodon", "baraag", "status"),
32 | "#class" : mastodon.MastodonStatusExtractor,
33 | "#sha1_content": "67748c1b828c58ad60d0fe5729b59fb29c872244",
34 | },
35 |
36 | )
37 |
--------------------------------------------------------------------------------
/test/results/bbw-chan.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import lynxchan
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://bbw-chan.link/bbwdraw/res/499.html",
13 | "#category": ("lynxchan", "bbw-chan", "thread"),
14 | "#class" : lynxchan.LynxchanThreadExtractor,
15 | "#pattern" : r"https://bbw-chan\.link/\.media/[0-9a-f]{64}(\.\w+)?$",
16 | "#count" : ">= 352",
17 | },
18 |
19 | {
20 | "#url" : "https://bbw-chan.nl/bbwdraw/res/489.html",
21 | "#category": ("lynxchan", "bbw-chan", "thread"),
22 | "#class" : lynxchan.LynxchanThreadExtractor,
23 | },
24 |
25 | {
26 | "#url" : "https://bbw-chan.link/bbwdraw/",
27 | "#category": ("lynxchan", "bbw-chan", "board"),
28 | "#class" : lynxchan.LynxchanBoardExtractor,
29 | "#pattern" : lynxchan.LynxchanThreadExtractor.pattern,
30 | "#count" : ">= 148",
31 | },
32 |
33 | {
34 | "#url" : "https://bbw-chan.nl/bbwdraw/2.html",
35 | "#category": ("lynxchan", "bbw-chan", "board"),
36 | "#class" : lynxchan.LynxchanBoardExtractor,
37 | },
38 |
39 | )
40 |
--------------------------------------------------------------------------------
/test/results/bcbnsfw.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import szurubooru
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://booru.bcbnsfw.space/posts/query=simple_background",
13 | "#category": ("szurubooru", "bcbnsfw", "tag"),
14 | "#class" : szurubooru.SzurubooruTagExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://booru.bcbnsfw.space/post/1599",
19 | "#comment" : "now only available as WebP",
20 | "#category": ("szurubooru", "bcbnsfw", "post"),
21 | "#class" : szurubooru.SzurubooruPostExtractor,
22 | "#pattern" : r"https://booru\.bcbnsfw\.space/data/posts/1599_53784518e92086bd\.png",
23 | "#sha1_content": "55f8b8d187adc82f2dcaf2aa89db0ae21b08c0b0",
24 | },
25 |
26 | )
27 |
--------------------------------------------------------------------------------
/test/results/bitly.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import urlshortener
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://bit.ly/3cWIUgq",
13 | "#category": ("urlshortener", "bitly", "link"),
14 | "#class" : urlshortener.UrlshortenerLinkExtractor,
15 | "#pattern" : "^https://gumroad.com/l/storm_b1",
16 | "#count" : 1,
17 | },
18 |
19 | )
20 |
--------------------------------------------------------------------------------
/test/results/blogger.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import blogger
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "blogger:http://www.julianbunker.com/2010/12/moon-rise.html",
13 | "#category": ("blogger", "www.julianbunker.com", "post"),
14 | "#class" : blogger.BloggerPostExtractor,
15 | },
16 |
17 | {
18 | "#url" : "blogger:https://www.kefblog.com.ng/",
19 | "#category": ("blogger", "www.kefblog.com.ng", "blog"),
20 | "#class" : blogger.BloggerBlogExtractor,
21 | "#range" : "1-25",
22 | "#count" : 25,
23 | },
24 |
25 | {
26 | "#url" : "blogger:http://www.julianbunker.com/search?q=400mm",
27 | "#category": ("blogger", "www.julianbunker.com", "search"),
28 | "#class" : blogger.BloggerSearchExtractor,
29 | },
30 |
31 | {
32 | "#url" : "blogger:http://www.julianbunker.com/search/label/D%26D",
33 | "#category": ("blogger", "www.julianbunker.com", "label"),
34 | "#class" : blogger.BloggerLabelExtractor,
35 | },
36 |
37 | )
38 |
--------------------------------------------------------------------------------
/test/results/booruvar.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import danbooru
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://booru.borvar.art/posts?tags=chibi&z=1",
13 | "#category": ("Danbooru", "booruvar", "tag"),
14 | "#class" : danbooru.DanbooruTagExtractor,
15 | "#pattern" : r"https://booru\.borvar\.art/data/original/[0-9a-f]{2}/[0-9a-f]{2}/[0-9a-f]{32}\.\w+",
16 | "#count" : ">= 3",
17 | },
18 |
19 | {
20 | "#url" : "https://booru.borvar.art/pools/2",
21 | "#category": ("Danbooru", "booruvar", "pool"),
22 | "#class" : danbooru.DanbooruPoolExtractor,
23 | "#count" : 4,
24 | "#sha1_url": "77fa3559a3fc919f72611f4e3dd0f919d19d3e0d",
25 | },
26 |
27 | {
28 | "#url" : "https://booru.borvar.art/posts/1487",
29 | "#category": ("Danbooru", "booruvar", "post"),
30 | "#class" : danbooru.DanbooruPostExtractor,
31 | "#sha1_content": "91273ac1ea413a12be468841e2b5804656a50bff",
32 | },
33 |
34 | {
35 | "#url" : "https://booru.borvar.art/explore/posts/popular",
36 | "#category": ("Danbooru", "booruvar", "popular"),
37 | "#class" : danbooru.DanbooruPopularExtractor,
38 | },
39 |
40 | )
41 |
--------------------------------------------------------------------------------
/test/results/bulbapedia.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://bulbapedia.bulbagarden.net/wiki/Jet",
13 | "#category": ("wikimedia", "bulbapedia", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | "#pattern" : r"https://archives\.bulbagarden\.net/media/upload/\w+/\w+/[^/?#]+",
16 | "#count" : range(10, 30),
17 | },
18 |
19 | {
20 | "#url" : "https://archives.bulbagarden.net/wiki/File:0460Abomasnow-Mega.png",
21 | "#category": ("wikimedia", "bulbapedia", "file"),
22 | "#class" : wikimedia.WikimediaArticleExtractor,
23 | "#pattern" : r"https://archives\.bulbagarden\.net/media/upload/\w+/\w+/[^/?#]+",
24 | "#count" : range(8, 12),
25 | "#archive" : False,
26 | },
27 |
28 | )
29 |
--------------------------------------------------------------------------------
/test/results/catbox.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import catbox
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://catbox.moe/c/1igcbe",
13 | "#category": ("", "catbox", "album"),
14 | "#class" : catbox.CatboxAlbumExtractor,
15 | "#pattern" : r"https://files\.catbox\.moe/\w+\.\w{3}$",
16 | "#count" : 3,
17 | "#sha1_url" : "35866a88c29462814f103bc22ec031eaeb380f8a",
18 | "#sha1_content": "70ddb9de3872e2d17cc27e48e6bf395e5c8c0b32",
19 |
20 | "album_id" : "1igcbe",
21 | "album_name" : "test",
22 | "date" : "dt:2022-08-18 00:00:00",
23 | "description": "album test &>",
24 | },
25 |
26 | {
27 | "#url" : "https://www.catbox.moe/c/cd90s1",
28 | "#category": ("", "catbox", "album"),
29 | "#class" : catbox.CatboxAlbumExtractor,
30 | },
31 |
32 | {
33 | "#url" : "https://catbox.moe/c/w7tm47#",
34 | "#category": ("", "catbox", "album"),
35 | "#class" : catbox.CatboxAlbumExtractor,
36 | },
37 |
38 | {
39 | "#url" : "https://files.catbox.moe/8ih3y7.png",
40 | "#category": ("", "catbox", "file"),
41 | "#class" : catbox.CatboxFileExtractor,
42 | "#pattern" : r"^https://files\.catbox\.moe/8ih3y7\.png$",
43 | "#count" : 1,
44 | "#sha1_content": "0c8768055e4e20e7c7259608b67799171b691140",
45 | },
46 |
47 | {
48 | "#url" : "https://litter.catbox.moe/t8v3n9.png",
49 | "#category": ("", "catbox", "file"),
50 | "#class" : catbox.CatboxFileExtractor,
51 | },
52 |
53 | {
54 | "#url" : "https://de.catbox.moe/bjdmz1.jpg",
55 | "#category": ("", "catbox", "file"),
56 | "#class" : catbox.CatboxFileExtractor,
57 | },
58 |
59 | )
60 |
--------------------------------------------------------------------------------
/test/results/cavemanon.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shimmie2
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://booru.cavemanon.xyz/index.php?q=post/list/Amber/1",
13 | "#category": ("shimmie2", "cavemanon", "tag"),
14 | "#class" : shimmie2.Shimmie2TagExtractor,
15 | "#pattern" : r"https://booru\.cavemanon\.xyz/index\.php\?q=image/\d+\.\w+",
16 | "#range" : "1-100",
17 | "#count" : 100,
18 | },
19 |
20 | {
21 | "#url" : "https://booru.cavemanon.xyz/post/list/Amber/1",
22 | "#category": ("shimmie2", "cavemanon", "tag"),
23 | "#class" : shimmie2.Shimmie2TagExtractor,
24 | },
25 |
26 | {
27 | "#url" : "https://booru.cavemanon.xyz/index.php?q=post/view/8335",
28 | "#category": ("shimmie2", "cavemanon", "post"),
29 | "#class" : shimmie2.Shimmie2PostExtractor,
30 | "#pattern" : r"https://booru\.cavemanon\.xyz/index\.php\?q=image/8335\.png",
31 | "#sha1_content": "7158f7e4abbbf143bad5835eb93dbe4d68c1d4ab",
32 |
33 | "extension": "png",
34 | "file_url" : "https://booru.cavemanon.xyz/index.php?q=image/8335.png",
35 | "filename" : "8335",
36 | "height" : 460,
37 | "id" : 8335,
38 | "md5" : "",
39 | "size" : 0,
40 | "tags" : "Color discord_emote Fang Food Pterodactyl transparent",
41 | "width" : 459,
42 | },
43 |
44 | )
45 |
--------------------------------------------------------------------------------
/test/results/chelseacrew.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://chelseacrew.com/collections/flats",
13 | "#category": ("shopify", "chelseacrew", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://chelseacrew.com/collections/flats/products/dora",
19 | "#category": ("shopify", "chelseacrew", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/comicvine.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import comicvine
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://comicvine.gamespot.com/jock/4040-5653/images/",
13 | "#category": ("", "comicvine", "tag"),
14 | "#class" : comicvine.ComicvineTagExtractor,
15 | "#pattern" : r"https://comicvine\.gamespot\.com/a/uploads/original/\d+/\d+/\d+-.+\.(jpe?g|png)",
16 | "#count" : ">= 140",
17 | },
18 |
19 | {
20 | "#url" : "https://comicvine.gamespot.com/batman/4005-1699/images/?tag=Fan%20Art%20%26%20Cosplay",
21 | "#category": ("", "comicvine", "tag"),
22 | "#class" : comicvine.ComicvineTagExtractor,
23 | "#pattern" : r"https://comicvine\.gamespot\.com/a/uploads/original/\d+/\d+/\d+-.+",
24 | "#count" : ">= 400",
25 | },
26 |
27 | )
28 |
--------------------------------------------------------------------------------
/test/results/coomer.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import kemono
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://coomer.su/onlyfans/user/alinity/post/125962203",
13 | "#comment" : "coomer (#2100)",
14 | "#category": ("", "coomer", "onlyfans"),
15 | "#class" : kemono.KemonoPostExtractor,
16 | "#urls" : "https://coomer.su/data/7d/3f/7d3fd9804583dc224968c0591163ec91794552b04f00a6c2f42a15b68231d5a8.jpg",
17 | },
18 |
19 | {
20 | "#url" : "https://coomer.party/onlyfans/user/alinity/post/125962203",
21 | "#category": ("", "coomer", "onlyfans"),
22 | "#class" : kemono.KemonoPostExtractor,
23 | "#urls" : "https://coomer.party/data/7d/3f/7d3fd9804583dc224968c0591163ec91794552b04f00a6c2f42a15b68231d5a8.jpg",
24 | },
25 |
26 | )
27 |
--------------------------------------------------------------------------------
/test/results/desktopography.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import desktopography
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://desktopography.net/",
13 | "#category": ("", "desktopography", "site"),
14 | "#class" : desktopography.DesktopographySiteExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://desktopography.net/exhibition-2020/",
19 | "#category": ("", "desktopography", "exhibition"),
20 | "#class" : desktopography.DesktopographyExhibitionExtractor,
21 | },
22 |
23 | {
24 | "#url" : "https://desktopography.net/portfolios/new-era/",
25 | "#category": ("", "desktopography", "entry"),
26 | "#class" : desktopography.DesktopographyEntryExtractor,
27 | },
28 |
29 | )
30 |
--------------------------------------------------------------------------------
/test/results/desuarchive.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://desuarchive.org/a/thread/159542679/",
13 | "#category": ("foolfuuka", "desuarchive", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#sha1_url": "e7d624aded15a069194e38dc731ec23217a422fb",
16 | },
17 |
18 | {
19 | "#url" : "https://desuarchive.org/a",
20 | "#category": ("foolfuuka", "desuarchive", "board"),
21 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
22 | },
23 |
24 | {
25 | "#url" : "https://desuarchive.org/a/",
26 | "#category": ("foolfuuka", "desuarchive", "board"),
27 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
28 | },
29 |
30 | {
31 | "#url" : "https://desuarchive.org/a/2",
32 | "#category": ("foolfuuka", "desuarchive", "board"),
33 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
34 | },
35 |
36 | {
37 | "#url" : "https://desuarchive.org/a/page/2",
38 | "#category": ("foolfuuka", "desuarchive", "board"),
39 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
40 | "#pattern" : foolfuuka.FoolfuukaThreadExtractor.pattern,
41 | "#count" : 10,
42 | },
43 |
44 | {
45 | "#url" : "https://desuarchive.org/_/search/text/test/",
46 | "#category": ("foolfuuka", "desuarchive", "search"),
47 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
48 | },
49 |
50 | {
51 | "#url" : "https://desuarchive.org/a/gallery/5",
52 | "#category": ("foolfuuka", "desuarchive", "gallery"),
53 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
54 | },
55 |
56 | )
57 |
--------------------------------------------------------------------------------
/test/results/drawfriends.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import gelbooru_v01
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://drawfriends.booru.org/index.php?page=post&s=list&tags=all",
13 | "#category": ("gelbooru_v01", "drawfriends", "tag"),
14 | "#class" : gelbooru_v01.GelbooruV01TagExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://drawfriends.booru.org/index.php?page=favorites&s=view&id=1",
19 | "#category": ("gelbooru_v01", "drawfriends", "favorite"),
20 | "#class" : gelbooru_v01.GelbooruV01FavoriteExtractor,
21 | },
22 |
23 | {
24 | "#url" : "https://drawfriends.booru.org/index.php?page=post&s=view&id=107474",
25 | "#category": ("gelbooru_v01", "drawfriends", "post"),
26 | "#class" : gelbooru_v01.GelbooruV01PostExtractor,
27 | },
28 |
29 | )
30 |
--------------------------------------------------------------------------------
/test/results/e6ai.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import e621
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://e6ai.net/posts?tags=anry",
13 | "#category": ("E621", "e6ai", "tag"),
14 | "#class" : e621.E621TagExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://e6ai.net/post/index/1/anry",
19 | "#category": ("E621", "e6ai", "tag"),
20 | "#class" : e621.E621TagExtractor,
21 | },
22 |
23 | {
24 | "#url" : "https://e6ai.net/post?tags=anry",
25 | "#category": ("E621", "e6ai", "tag"),
26 | "#class" : e621.E621TagExtractor,
27 | },
28 |
29 | {
30 | "#url" : "https://e6ai.net/pools/3",
31 | "#category": ("E621", "e6ai", "pool"),
32 | "#class" : e621.E621PoolExtractor,
33 | "#sha1_url": "a6d1ad67a3fa9b9f73731d34d5f6f26f7e85855f",
34 | },
35 |
36 | {
37 | "#url" : "https://e6ai.net/pool/show/3",
38 | "#category": ("E621", "e6ai", "pool"),
39 | "#class" : e621.E621PoolExtractor,
40 | },
41 |
42 | {
43 | "#url" : "https://e6ai.net/posts/23",
44 | "#category": ("E621", "e6ai", "post"),
45 | "#class" : e621.E621PostExtractor,
46 | "#sha1_url" : "3c85a806b3d9eec861948af421fe0e8ad6b8f881",
47 | "#sha1_content": "a05a484e4eb64637d56d751c02e659b4bc8ea5d5",
48 | },
49 |
50 | {
51 | "#url" : "https://e6ai.net/post/show/23",
52 | "#category": ("E621", "e6ai", "post"),
53 | "#class" : e621.E621PostExtractor,
54 | },
55 |
56 | {
57 | "#url" : "https://e6ai.net/explore/posts/popular",
58 | "#category": ("E621", "e6ai", "popular"),
59 | "#class" : e621.E621PopularExtractor,
60 | },
61 |
62 | {
63 | "#url" : "https://e6ai.net/favorites",
64 | "#category": ("E621", "e6ai", "favorite"),
65 | "#class" : e621.E621FavoriteExtractor,
66 | },
67 |
68 | )
69 |
--------------------------------------------------------------------------------
/test/results/endchan.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import lynxchan
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://endchan.org/yuri/res/33621.html",
13 | "#category": ("lynxchan", "endchan", "thread"),
14 | "#class" : lynxchan.LynxchanThreadExtractor,
15 | "#urls" : "https://endchan.org/.media/358c089df4be990e9f7b636e1ce83d3e-imagejpeg.jpg",
16 | },
17 |
18 | {
19 | "#url" : "https://endchan.org/yuri/res/33621.html",
20 | "#category": ("lynxchan", "endchan", "thread"),
21 | "#class" : lynxchan.LynxchanThreadExtractor,
22 | },
23 |
24 | {
25 | "#url" : "https://endchan.org/yuri/",
26 | "#category": ("lynxchan", "endchan", "board"),
27 | "#class" : lynxchan.LynxchanBoardExtractor,
28 | "#pattern" : lynxchan.LynxchanThreadExtractor.pattern,
29 | "#count" : ">= 8",
30 | },
31 |
32 | {
33 | "#url" : "https://endchan.org/yuri/catalog.html",
34 | "#category": ("lynxchan", "endchan", "board"),
35 | "#class" : lynxchan.LynxchanBoardExtractor,
36 | },
37 |
38 | )
39 |
--------------------------------------------------------------------------------
/test/results/erome.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import erome
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.erome.com/a/NQgdlWvk",
13 | "#category": ("", "erome", "album"),
14 | "#class" : erome.EromeAlbumExtractor,
15 | "#pattern" : r"https://v\d+\.erome\.com/\d+/NQgdlWvk/j7jlzmYB_480p\.mp4",
16 | "#count" : 1,
17 |
18 | "album_id": "NQgdlWvk",
19 | "date" : None,
20 | "count" : 1,
21 | "num" : 1,
22 | "title" : "porn",
23 | "user" : "yYgWBZw8o8qsMzM",
24 | },
25 |
26 | {
27 | "#url" : "https://www.erome.com/a/TdbZ4ogi",
28 | "#category": ("", "erome", "album"),
29 | "#class" : erome.EromeAlbumExtractor,
30 | "#pattern" : r"https://s\d+\.erome\.com/\d+/TdbZ4ogi/\w+",
31 | "#count" : 6,
32 |
33 | "album_id": "TdbZ4ogi",
34 | "date" : "dt:2024-03-18 00:01:56",
35 | "count" : 6,
36 | "num" : int,
37 | "title" : "82e78cfbb461ad87198f927fcb1fda9a1efac9ff.",
38 | "user" : "yYgWBZw8o8qsMzM",
39 | },
40 |
41 | {
42 | "#url" : "https://www.erome.com/yYgWBZw8o8qsMzM",
43 | "#category": ("", "erome", "user"),
44 | "#class" : erome.EromeUserExtractor,
45 | "#range" : "1-25",
46 | "#count" : 25,
47 | },
48 |
49 | {
50 | "#url" : "https://www.erome.com/search?q=cute",
51 | "#category": ("", "erome", "search"),
52 | "#class" : erome.EromeSearchExtractor,
53 | "#range" : "1-25",
54 | "#count" : 25,
55 | },
56 |
57 | )
58 |
--------------------------------------------------------------------------------
/test/results/fapachi.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import fapachi
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://fapachi.com/sonson/media/0082",
13 | "#comment" : "NSFW",
14 | "#category": ("", "fapachi", "post"),
15 | "#class" : fapachi.FapachiPostExtractor,
16 | "#pattern" : r"https://fapachi\.com/models/s/o/sonson/1/full/sonson_0082\.jpeg",
17 |
18 | "user": "sonson",
19 | "id" : "0082",
20 | },
21 |
22 | {
23 | "#url" : "https://fapachi.com/ferxiita/media/0159",
24 | "#comment" : "NSFW",
25 | "#category": ("", "fapachi", "post"),
26 | "#class" : fapachi.FapachiPostExtractor,
27 | },
28 |
29 | {
30 | "#url" : "https://fapachi.com/sonson",
31 | "#category": ("", "fapachi", "user"),
32 | "#class" : fapachi.FapachiUserExtractor,
33 | "#pattern" : fapachi.FapachiPostExtractor.pattern,
34 | "#range" : "1-50",
35 | "#count" : 50,
36 | },
37 |
38 | {
39 | "#url" : "https://fapachi.com/ferxiita/page/3",
40 | "#category": ("", "fapachi", "user"),
41 | "#class" : fapachi.FapachiUserExtractor,
42 | },
43 |
44 | )
45 |
--------------------------------------------------------------------------------
/test/results/fappic.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://fappic.com/98wxqcklyh8k/test.png",
13 | "#category": ("imagehost", "fappic", "image"),
14 | "#class" : imagehosts.FappicImageExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://www.fappic.com/98wxqcklyh8k/test.png",
19 | "#category": ("imagehost", "fappic", "image"),
20 | "#class" : imagehosts.FappicImageExtractor,
21 | "#pattern" : r"https://img\d+\.fappic\.com/img/\w+/test\.png",
22 | "#sha1_metadata": "433b1d310b0ff12ad8a71ac7b9d8ba3f8cd1e898",
23 | "#sha1_content" : "0c8768055e4e20e7c7259608b67799171b691140",
24 | },
25 |
26 | )
27 |
--------------------------------------------------------------------------------
/test/results/fashionnova.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.fashionnova.com/collections/mini-dresses",
13 | "#category": ("shopify", "fashionnova", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | "#range" : "1-20",
16 | "#count" : 20,
17 | },
18 |
19 | {
20 | "#url" : "https://www.fashionnova.com/collections/mini-dresses/?page=1",
21 | "#category": ("shopify", "fashionnova", "collection"),
22 | "#class" : shopify.ShopifyCollectionExtractor,
23 | },
24 |
25 | {
26 | "#url" : "https://www.fashionnova.com/collections/mini-dresses#1",
27 | "#category": ("shopify", "fashionnova", "collection"),
28 | "#class" : shopify.ShopifyCollectionExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://www.fashionnova.com/products/all-my-life-legging-black",
33 | "#category": ("shopify", "fashionnova", "product"),
34 | "#class" : shopify.ShopifyProductExtractor,
35 | "#pattern" : r"https?://cdn\d*\.shopify\.com/s/files/",
36 | "#count" : 8,
37 | },
38 |
39 | {
40 | "#url" : "https://www.fashionnova.com/collections/flats/products/name",
41 | "#category": ("shopify", "fashionnova", "product"),
42 | "#class" : shopify.ShopifyProductExtractor,
43 | },
44 |
45 | )
46 |
--------------------------------------------------------------------------------
/test/results/fireden.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://boards.fireden.net/sci/thread/11264294/",
13 | "#category": ("foolfuuka", "fireden", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#sha1_url": "61cab625c95584a12a30049d054931d64f8d20aa",
16 | },
17 |
18 | {
19 | "#url" : "https://boards.fireden.net/sci/",
20 | "#category": ("foolfuuka", "fireden", "board"),
21 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
22 | },
23 |
24 | {
25 | "#url" : "https://boards.fireden.net/_/search/text/test/",
26 | "#category": ("foolfuuka", "fireden", "search"),
27 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
28 | },
29 |
30 | {
31 | "#url" : "https://boards.fireden.net/sci/gallery/6",
32 | "#category": ("foolfuuka", "fireden", "gallery"),
33 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
34 | },
35 |
36 | )
37 |
--------------------------------------------------------------------------------
/test/results/furbooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import philomena
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://furbooru.org/images/1",
13 | "#category": ("philomena", "furbooru", "post"),
14 | "#class" : philomena.PhilomenaPostExtractor,
15 | "#sha1_content": "9eaa1e1b32fa0f16520912257dbefaff238d5fd2",
16 | },
17 |
18 | {
19 | "#url" : "https://furbooru.org/search?q=cute",
20 | "#category": ("philomena", "furbooru", "search"),
21 | "#class" : philomena.PhilomenaSearchExtractor,
22 | "#range" : "40-60",
23 | "#count" : 21,
24 | },
25 |
26 | {
27 | "#url" : "https://furbooru.org/galleries/27",
28 | "#category": ("philomena", "furbooru", "gallery"),
29 | "#class" : philomena.PhilomenaGalleryExtractor,
30 | "#count" : ">= 13",
31 | },
32 |
33 | )
34 |
--------------------------------------------------------------------------------
/test/results/fuskator.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import fuskator
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://fuskator.com/thumbs/d0GnIzXrSKU/",
13 | "#category": ("", "fuskator", "gallery"),
14 | "#class" : fuskator.FuskatorGalleryExtractor,
15 | "#pattern" : r"https://i\d+.fuskator.com/large/d0GnIzXrSKU/.+\.jpg",
16 | "#count" : 22,
17 |
18 | "gallery_id" : 473023,
19 | "gallery_hash": "d0GnIzXrSKU",
20 | "title" : r"re:Shaved Brunette Babe Maria Ryabushkina with ",
21 | "views" : int,
22 | "score" : float,
23 | "count" : 22,
24 | "tags" : list,
25 | },
26 |
27 | {
28 | "#url" : "https://fuskator.com/expanded/gXpKzjgIidA/index.html",
29 | "#category": ("", "fuskator", "gallery"),
30 | "#class" : fuskator.FuskatorGalleryExtractor,
31 | },
32 |
33 | {
34 | "#url" : "https://fuskator.com/search/red_swimsuit/",
35 | "#category": ("", "fuskator", "search"),
36 | "#class" : fuskator.FuskatorSearchExtractor,
37 | "#pattern" : fuskator.FuskatorGalleryExtractor.pattern,
38 | "#count" : ">= 40",
39 | },
40 |
41 | {
42 | "#url" : "https://fuskator.com/page/3/swimsuit/quality/",
43 | "#category": ("", "fuskator", "search"),
44 | "#class" : fuskator.FuskatorSearchExtractor,
45 | },
46 |
47 | )
48 |
--------------------------------------------------------------------------------
/test/results/illusioncardsbooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import gelbooru_v01
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://illusioncards.booru.org/index.php?page=post&s=list&tags=koikatsu",
13 | "#category": ("gelbooru_v01", "illusioncardsbooru", "tag"),
14 | "#class" : gelbooru_v01.GelbooruV01TagExtractor,
15 | "#range" : "1-25",
16 | "#count" : 25,
17 | },
18 |
19 | {
20 | "#url" : "https://illusioncards.booru.org/index.php?page=favorites&s=view&id=84887",
21 | "#category": ("gelbooru_v01", "illusioncardsbooru", "favorite"),
22 | "#class" : gelbooru_v01.GelbooruV01FavoriteExtractor,
23 | "#count" : 2,
24 | },
25 |
26 | {
27 | "#url" : "https://illusioncards.booru.org/index.php?page=post&s=view&id=82746",
28 | "#category": ("gelbooru_v01", "illusioncardsbooru", "post"),
29 | "#class" : gelbooru_v01.GelbooruV01PostExtractor,
30 | "#sha1_url" : "3f9cd2fadf78869b90bc5422f27b48f1af0e0909",
31 | "#sha1_content": "159e60b92d05597bd1bb63510c2c3e4a4bada1dc",
32 | },
33 |
34 | )
35 |
--------------------------------------------------------------------------------
/test/results/imagechest.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagechest
8 | from gallery_dl import exception
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://imgchest.com/p/3na7kr3by8d",
14 | "#category": ("", "imagechest", "gallery"),
15 | "#class" : imagechest.ImagechestGalleryExtractor,
16 | "#pattern" : r"https://cdn\.imgchest\.com/files/\w+\.(jpg|png)",
17 | "#count" : 3,
18 | "#sha1_url" : "7328ca4ec2459378d725e3be19f661d2b045feda",
19 | "#sha1_content": "076959e65be30249a2c651fbe6090dc30ba85193",
20 |
21 | "count" : 3,
22 | "gallery_id": "3na7kr3by8d",
23 | "num" : int,
24 | "title" : "Wizardry - Video Game From The Mid 80's",
25 | },
26 |
27 | {
28 | "#url" : "https://imgchest.com/p/9p4n3q2z7nq",
29 | "#comment" : "'Load More Files' button (#4028)",
30 | "#category": ("", "imagechest", "gallery"),
31 | "#class" : imagechest.ImagechestGalleryExtractor,
32 | "#pattern" : r"https://cdn\.imgchest\.com/files/\w+\.(jpg|png)",
33 | "#count" : 52,
34 | "#sha1_url": "f5674e8ba79d336193c9f698708d9dcc10e78cc7",
35 | },
36 |
37 | {
38 | "#url" : "https://imgchest.com/p/xxxxxxxxxxx",
39 | "#category": ("", "imagechest", "gallery"),
40 | "#class" : imagechest.ImagechestGalleryExtractor,
41 | "#exception": exception.NotFoundError,
42 | },
43 |
44 | {
45 | "#url" : "https://imgchest.com/u/LunarLandr",
46 | "#category": ("", "imagechest", "user"),
47 | "#class" : imagechest.ImagechestUserExtractor,
48 | "#pattern" : imagechest.ImagechestGalleryExtractor.pattern,
49 | "#count" : range(280, 290),
50 | },
51 |
52 | )
53 |
--------------------------------------------------------------------------------
/test/results/imagepond.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import chevereto
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://imagepond.net/image/IMG-20250217-160622.TJNphg",
13 | "#category": ("chevereto", "imagepond", "image"),
14 | "#class" : chevereto.CheveretoImageExtractor,
15 | "#urls" : "https://media.imagepond.net/media/IMG_20250217_1606226b345a5dbd0e8971.jpg",
16 | "#sha1_content": "ec7fac6b427f7af01038619208cd69478e91ddef",
17 |
18 | "album" : "",
19 | "date" : "dt:2025-02-17 19:15:25",
20 | "extension": "jpg",
21 | "filename" : "IMG_20250217_1606226b345a5dbd0e8971",
22 | "id" : "TJNphg",
23 | "url" : "https://media.imagepond.net/media/IMG_20250217_1606226b345a5dbd0e8971.jpg",
24 | "user" : "dariusbbb24",
25 |
26 | },
27 |
28 | {
29 | "#url" : "https://imagepond.net/album/CDilP/?sort=date_desc&page=1",
30 | "#category": ("chevereto", "imagepond", "album"),
31 | "#class" : chevereto.CheveretoAlbumExtractor,
32 | },
33 |
34 | {
35 | "#url" : "https://imagepond.net/dariusbbb24",
36 | "#category": ("chevereto", "imagepond", "user"),
37 | "#class" : chevereto.CheveretoUserExtractor,
38 | "#range" : "1-30",
39 | "#count" : 30,
40 | },
41 |
42 | )
43 |
--------------------------------------------------------------------------------
/test/results/imagetwist.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://imagetwist.com/f1i2s4vhvbrq/test.png",
13 | "#category": ("imagehost", "imagetwist", "image"),
14 | "#class" : imagehosts.ImagetwistImageExtractor,
15 | "#sha1_url" : "8d5e168c0bee30211f821c6f3b2116e419d42671",
16 | "#sha1_metadata": "d1060a4c2e3b73b83044e20681712c0ffdd6cfef",
17 | "#sha1_content" : "0c8768055e4e20e7c7259608b67799171b691140",
18 | },
19 |
20 | {
21 | "#url" : "https://www.imagetwist.com/f1i2s4vhvbrq/test.png",
22 | "#category": ("imagehost", "imagetwist", "image"),
23 | "#class" : imagehosts.ImagetwistImageExtractor,
24 | },
25 |
26 | {
27 | "#url" : "https://phun.imagetwist.com/f1i2s4vhvbrq/test.png",
28 | "#category": ("imagehost", "imagetwist", "image"),
29 | "#class" : imagehosts.ImagetwistImageExtractor,
30 | },
31 |
32 | {
33 | "#url" : "https://imagehaha.com/f1i2s4vhvbrq/test.png",
34 | "#category": ("imagehost", "imagetwist", "image"),
35 | "#class" : imagehosts.ImagetwistImageExtractor,
36 | },
37 |
38 | {
39 | "#url" : "https://www.imagehaha.com/f1i2s4vhvbrq/test.png",
40 | "#category": ("imagehost", "imagetwist", "image"),
41 | "#class" : imagehosts.ImagetwistImageExtractor,
42 | },
43 |
44 | {
45 | "#url" : "https://imagetwist.com/p/gdldev/747223/digits",
46 | "#category": ("imagehost", "imagetwist", "gallery"),
47 | "#class" : imagehosts.ImagetwistGalleryExtractor,
48 | "#urls" : (
49 | "https://imagetwist.com/j6eu91sbl9bs",
50 | "https://imagetwist.com/vx4oh119izyr",
51 | "https://imagetwist.com/n3td3a6vzzed",
52 | "https://imagetwist.com/8uz6lmg31nmc",
53 | ),
54 | },
55 |
56 | )
57 |
--------------------------------------------------------------------------------
/test/results/imgbox.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imgbox
8 | from gallery_dl import exception
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://imgbox.com/g/JaX5V5HX7g",
14 | "#category": ("", "imgbox", "gallery"),
15 | "#class" : imgbox.ImgboxGalleryExtractor,
16 | "#sha1_url" : "da4f15b161461119ee78841d4b8e8d054d95f906",
17 | "#sha1_metadata": "4b1e62820ac2c6205b7ad0b6322cc8e00dbe1b0c",
18 | "#sha1_content" : "d20307dc8511ac24d688859c55abf2e2cc2dd3cc",
19 | },
20 |
21 | {
22 | "#url" : "https://imgbox.com/g/cUGEkRbdZZ",
23 | "#category": ("", "imgbox", "gallery"),
24 | "#class" : imgbox.ImgboxGalleryExtractor,
25 | "#sha1_url" : "76506a3aab175c456910851f66227e90484ca9f7",
26 | "#sha1_metadata": "fb0427b87983197849fb2887905e758f3e50cb6e",
27 | },
28 |
29 | {
30 | "#url" : "https://imgbox.com/g/JaX5V5HX7h",
31 | "#category": ("", "imgbox", "gallery"),
32 | "#class" : imgbox.ImgboxGalleryExtractor,
33 | "#exception": exception.NotFoundError,
34 | },
35 |
36 | {
37 | "#url" : "https://imgbox.com/qHhw7lpG",
38 | "#category": ("", "imgbox", "image"),
39 | "#class" : imgbox.ImgboxImageExtractor,
40 | "#sha1_url" : "ee9cdea6c48ad0161c1b5f81f6b0c9110997038c",
41 | "#sha1_metadata": "dfc72310026b45f3feb4f9cada20c79b2575e1af",
42 | "#sha1_content" : "0c8768055e4e20e7c7259608b67799171b691140",
43 | },
44 |
45 | {
46 | "#url" : "https://imgbox.com/qHhw7lpH",
47 | "#category": ("", "imgbox", "image"),
48 | "#class" : imgbox.ImgboxImageExtractor,
49 | "#exception": exception.NotFoundError,
50 | },
51 |
52 | )
53 |
--------------------------------------------------------------------------------
/test/results/imgclick.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "http://imgclick.net/4tbrre1oxew9/test-_-_.png.html",
13 | "#category": ("imagehost", "imgclick", "image"),
14 | "#class" : imagehosts.ImgclickImageExtractor,
15 | "#sha1_url" : "140dcb250a325f2d26b2d918c18b8ac6a2a0f6ab",
16 | "#sha1_metadata": "6895256143eab955622fc149aa367777a8815ba3",
17 | "#sha1_content" : "0c8768055e4e20e7c7259608b67799171b691140",
18 | },
19 |
20 | )
21 |
--------------------------------------------------------------------------------
/test/results/imgkiwi.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import chevereto
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://img.kiwi/image/79de2c41-70f9-4a87-bd6d-00fe9997c0c4.JR2wZz",
13 | "#category": ("chevereto", "imgkiwi", "image"),
14 | "#class" : chevereto.CheveretoImageExtractor,
15 | "#urls" : "https://img.kiwi/images/2023/02/28/11ac1ebf28a2eae8265026b28e9c4413.jpg",
16 | "#sha1_content": "9ea704a77e2038b9008350682cfad53a614a60bd",
17 |
18 | "album" : "Kins3y Wolansk1",
19 | "extension": "jpg",
20 | "filename" : "11ac1ebf28a2eae8265026b28e9c4413",
21 | "id" : "JR2wZz",
22 | "url" : "https://img.kiwi/images/2023/02/28/11ac1ebf28a2eae8265026b28e9c4413.jpg",
23 | "user" : "johnirl",
24 | },
25 |
26 | {
27 | "#url" : "https://img.kiwi/album/kins3y-wolansk1.8Jxc",
28 | "#category": ("chevereto", "imgkiwi", "album"),
29 | "#class" : chevereto.CheveretoAlbumExtractor,
30 | "#pattern" : chevereto.CheveretoImageExtractor.pattern,
31 | "#count" : 19,
32 | },
33 |
34 | {
35 | "#url" : "https://img.kiwi/johnirl",
36 | "#category": ("chevereto", "imgkiwi", "user"),
37 | "#class" : chevereto.CheveretoUserExtractor,
38 | "#pattern" : chevereto.CheveretoImageExtractor.pattern,
39 | "#range" : "1-20",
40 | "#count" : 20,
41 | },
42 |
43 | {
44 | "#url" : "https://img.kiwi/johnirl/albums",
45 | "#category": ("chevereto", "imgkiwi", "user"),
46 | "#class" : chevereto.CheveretoUserExtractor,
47 | "#pattern" : chevereto.CheveretoAlbumExtractor.pattern,
48 | "#count" : range(155, 175),
49 | },
50 |
51 | )
52 |
--------------------------------------------------------------------------------
/test/results/imgspice.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://imgspice.com/q1taxkhxprrn/58410038_cal022jsp_308191001.jpg.html",
13 | "#category": ("imagehost", "imgspice", "image"),
14 | "#class" : imagehosts.ImgspiceImageExtractor,
15 | "#urls" : "https://img30.imgspice.com/i/03792/q1taxkhxprrn.jpg",
16 | "#sha1_content" : "f1de8e58a7c2ef747a206a38f96c5623b8a83edc",
17 |
18 | "extension": "jpg",
19 | "filename" : "58410038_cal022jsp_308191001",
20 | "token" : "q1taxkhxprrn",
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/imgth.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imgth
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://imgth.com/gallery/37/wallpaper-anime",
13 | "#category": ("", "imgth", "gallery"),
14 | "#class" : imgth.ImgthGalleryExtractor,
15 | "#pattern" : r"https://imgth\.com/images/2009/11/25/wallpaper-anime_\w+\.jpg",
16 | "#sha1_url": "4ae1d281ca2b48952cf5cca57e9914402ad72748",
17 |
18 | "count" : 12,
19 | "date" : "dt:2009-11-25 18:21:00",
20 | "extension" : "jpg",
21 | "filename" : r"re:wallpaper-anime_\w+",
22 | "gallery_id": 37,
23 | "num" : int,
24 | "title" : "Wallpaper anime",
25 | "user" : "celebrities",
26 | },
27 |
28 | {
29 | "#url" : "https://www.imgth.com/gallery/37/wallpaper-anime",
30 | "#category": ("", "imgth", "gallery"),
31 | "#class" : imgth.ImgthGalleryExtractor,
32 | },
33 |
34 | )
35 |
--------------------------------------------------------------------------------
/test/results/itchio.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import itchio
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://sirtartarus.itch.io/a-craft-of-mine",
13 | "#category": ("", "itchio", "game"),
14 | "#class" : itchio.ItchioGameExtractor,
15 | "#pattern" : r"https://(dl.itch.zone|itchio-mirror.\w+.r2.cloudflarestorage.com)/upload2/game/1983311/\d+\?",
16 | "#count" : 3,
17 |
18 | "extension": "",
19 | "filename" : r"re:\d+",
20 | "game" : {
21 | "id" : 1983311,
22 | "noun" : "game",
23 | "title": "A Craft Of Mine",
24 | "url" : "https://sirtartarus.itch.io/a-craft-of-mine",
25 | },
26 | "user" : {
27 | "id" : 4060052,
28 | "name": "SirTartarus",
29 | "url" : "https://sirtartarus.itch.io",
30 | },
31 | },
32 |
33 | )
34 |
--------------------------------------------------------------------------------
/test/results/kabeuchi.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import kabeuchi
8 | from gallery_dl import exception
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://kabe-uchiroom.com/mypage/?id=919865303848255493",
14 | "#category": ("", "kabeuchi", "user"),
15 | "#class" : kabeuchi.KabeuchiUserExtractor,
16 | "#pattern" : r"https://kabe-uchiroom\.com/accounts/upfile/3/919865303848255493/\w+\.jpe?g",
17 | "#count" : ">= 24",
18 | },
19 |
20 | {
21 | "#url" : "https://kabe-uchiroom.com/mypage/?id=123456789",
22 | "#category": ("", "kabeuchi", "user"),
23 | "#class" : kabeuchi.KabeuchiUserExtractor,
24 | "#exception": exception.NotFoundError,
25 | },
26 |
27 | )
28 |
--------------------------------------------------------------------------------
/test/results/keenspot.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import keenspot
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "http://marksmen.keenspot.com/",
13 | "#comment" : "link",
14 | "#category": ("", "keenspot", "comic"),
15 | "#class" : keenspot.KeenspotComicExtractor,
16 | "#range" : "1-3",
17 | "#sha1_url": "83bcf029103bf8bc865a1988afa4aaeb23709ba6",
18 | },
19 |
20 | {
21 | "#url" : "http://barkercomic.keenspot.com/",
22 | "#comment" : "id",
23 | "#category": ("", "keenspot", "comic"),
24 | "#class" : keenspot.KeenspotComicExtractor,
25 | "#range" : "1-3",
26 | "#sha1_url": "c4080926db18d00bac641fdd708393b7d61379e6",
27 | },
28 |
29 | {
30 | "#url" : "http://crowscare.keenspot.com/",
31 | "#comment" : "id v2",
32 | "#category": ("", "keenspot", "comic"),
33 | "#class" : keenspot.KeenspotComicExtractor,
34 | "#range" : "1-3",
35 | "#sha1_url": "a00e66a133dd39005777317da90cef921466fcaa",
36 | },
37 |
38 | {
39 | "#url" : "http://supernovas.keenspot.com/",
40 | "#comment" : "ks",
41 | "#category": ("", "keenspot", "comic"),
42 | "#class" : keenspot.KeenspotComicExtractor,
43 | "#range" : "1-3",
44 | "#sha1_url": "de21b12887ef31ff82edccbc09d112e3885c3aab",
45 | },
46 |
47 | {
48 | "#url" : "http://twokinds.keenspot.com/comic/1066/",
49 | "#category": ("", "keenspot", "comic"),
50 | "#class" : keenspot.KeenspotComicExtractor,
51 | "#range" : "1-3",
52 | "#sha1_url": "6a784e11370abfb343dcad9adbb7718f9b7be350",
53 | },
54 |
55 | )
56 |
--------------------------------------------------------------------------------
/test/results/kohlchan.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import lynxchan
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://kohlchan.net/a/res/4594.html",
13 | "#category": ("lynxchan", "kohlchan", "thread"),
14 | "#class" : lynxchan.LynxchanThreadExtractor,
15 | "#pattern" : r"https://kohlchan\.net/\.media/[0-9a-f]{64}(\.\w+)?$",
16 | "#count" : ">= 80",
17 | },
18 |
19 | {
20 | "#url" : "https://kohlchan.net/a/",
21 | "#category": ("lynxchan", "kohlchan", "board"),
22 | "#class" : lynxchan.LynxchanBoardExtractor,
23 | "#pattern" : lynxchan.LynxchanThreadExtractor.pattern,
24 | "#count" : ">= 100",
25 | },
26 |
27 | {
28 | "#url" : "https://kohlchan.net/a/2.html",
29 | "#category": ("lynxchan", "kohlchan", "board"),
30 | "#class" : lynxchan.LynxchanBoardExtractor,
31 | },
32 |
33 | {
34 | "#url" : "https://kohlchan.net/a/catalog.html",
35 | "#category": ("lynxchan", "kohlchan", "board"),
36 | "#class" : lynxchan.LynxchanBoardExtractor,
37 | },
38 |
39 | )
40 |
--------------------------------------------------------------------------------
/test/results/lesbianenergy.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import misskey
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://lesbian.energy/@rerorero",
13 | "#category": ("misskey", "lesbian.energy", "user"),
14 | "#class" : misskey.MisskeyUserExtractor,
15 | "#pattern" : r"https://(lesbian.energy/files/\w+|.+/media_attachments/files/.+)",
16 | "#range" : "1-50",
17 | "#count" : 50,
18 | },
19 |
20 | {
21 | "#url" : "https://lesbian.energy/@nano@mk.yopo.work",
22 | "#category": ("misskey", "lesbian.energy", "user"),
23 | "#class" : misskey.MisskeyUserExtractor,
24 | },
25 |
26 | {
27 | "#url" : "https://lesbian.energy/notes/995ig09wqy",
28 | "#category": ("misskey", "lesbian.energy", "note"),
29 | "#class" : misskey.MisskeyNoteExtractor,
30 | "#count" : 1,
31 | },
32 |
33 | {
34 | "#url" : "https://lesbian.energy/notes/96ynd9w5kc",
35 | "#category": ("misskey", "lesbian.energy", "note"),
36 | "#class" : misskey.MisskeyNoteExtractor,
37 | },
38 |
39 | {
40 | "#url" : "https://lesbian.energy/my/favorites",
41 | "#category": ("misskey", "lesbian.energy", "favorite"),
42 | "#class" : misskey.MisskeyFavoriteExtractor,
43 | },
44 |
45 | )
46 |
--------------------------------------------------------------------------------
/test/results/lexica.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import lexica
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://lexica.art/?q=tree",
13 | "#category": ("", "lexica", "search"),
14 | "#class" : lexica.LexicaSearchExtractor,
15 | "#pattern" : r"https://lexica-serve-encoded-images2\.sharif\.workers.dev/full_jpg/[0-9a-f-]{36}$",
16 | "#range" : "1-80",
17 | "#count" : 80,
18 |
19 | "height" : int,
20 | "id" : str,
21 | "upscaled_height": int,
22 | "upscaled_width" : int,
23 | "userid" : str,
24 | "width" : int,
25 | "prompt" : {
26 | "c" : int,
27 | "grid" : bool,
28 | "height" : int,
29 | "id" : str,
30 | "images" : list,
31 | "initImage" : None,
32 | "initImageStrength": None,
33 | "model" : "lexica-aperture-v2",
34 | "negativePrompt" : str,
35 | "prompt" : str,
36 | "seed" : str,
37 | "timestamp" : r"re:\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ",
38 | "width" : int,
39 | },
40 | },
41 |
42 | )
43 |
--------------------------------------------------------------------------------
/test/results/lightroom.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import lightroom
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://lightroom.adobe.com/shares/0c9cce2033f24d24975423fe616368bf",
13 | "#category": ("", "lightroom", "gallery"),
14 | "#class" : lightroom.LightroomGalleryExtractor,
15 | "#count" : ">= 55",
16 |
17 | "title": "Sterne und Nachtphotos",
18 | "user" : "Christian Schrang",
19 | },
20 |
21 | {
22 | "#url" : "https://lightroom.adobe.com/shares/7ba68ad5a97e48608d2e6c57e6082813",
23 | "#category": ("", "lightroom", "gallery"),
24 | "#class" : lightroom.LightroomGalleryExtractor,
25 | "#count" : ">= 180",
26 |
27 | "title": "HEBFC Snr/Res v Brighton",
28 | "user" : "",
29 | },
30 |
31 | )
32 |
--------------------------------------------------------------------------------
/test/results/lolibooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import moebooru
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://lolibooru.moe/post/show/281305/",
13 | "#category": ("moebooru", "lolibooru", "post"),
14 | "#class" : moebooru.MoebooruPostExtractor,
15 | "#options" : {"notes": True},
16 | "#sha1_content": "a331430223ffc5b23c31649102e7d49f52489b57",
17 |
18 | "notes": list,
19 | },
20 |
21 | {
22 | "#url" : "https://lolibooru.moe/post/show/287835",
23 | "#category": ("moebooru", "lolibooru", "post"),
24 | "#class" : moebooru.MoebooruPostExtractor,
25 | },
26 |
27 | {
28 | "#url" : "https://lolibooru.moe/post?tags=ruu_%28tksymkw%29",
29 | "#category": ("moebooru", "lolibooru", "tag"),
30 | "#class" : moebooru.MoebooruTagExtractor,
31 | },
32 |
33 | {
34 | "#url" : "https://lolibooru.moe/pool/show/239",
35 | "#category": ("moebooru", "lolibooru", "pool"),
36 | "#class" : moebooru.MoebooruPoolExtractor,
37 | },
38 |
39 | {
40 | "#url" : "https://lolibooru.moe/post/popular_recent",
41 | "#category": ("moebooru", "lolibooru", "popular"),
42 | "#class" : moebooru.MoebooruPopularExtractor,
43 | },
44 |
45 | )
46 |
--------------------------------------------------------------------------------
/test/results/loungeunderwear.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://loungeunderwear.com/collections/apparel",
13 | "#category": ("shopify", "loungeunderwear", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://de.loungeunderwear.com/products/ribbed-crop-top-black",
19 | "#category": ("shopify", "loungeunderwear", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/mangoxo.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import mangoxo
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.mangoxo.com/album/lzVOv1Q9",
13 | "#category": ("", "mangoxo", "album"),
14 | "#class" : mangoxo.MangoxoAlbumExtractor,
15 | "#sha1_url": "ad921fe62663b06e7d73997f7d00646cab7bdd0d",
16 |
17 | "channel": {
18 | "id" : "gaxO16d8",
19 | "name" : "Phoenix",
20 | "cover": str,
21 | },
22 | "album" : {
23 | "id" : "lzVOv1Q9",
24 | "name" : r"re:池永康晟 Ikenaga Yasunari 透出古朴",
25 | "date" : "dt:2019-03-22 14:42:00",
26 | "description": str,
27 | },
28 | "id" : int,
29 | "num" : int,
30 | "count" : 65,
31 | },
32 |
33 | {
34 | "#url" : "https://www.mangoxo.com/phoenix/album",
35 | "#category": ("", "mangoxo", "channel"),
36 | "#class" : mangoxo.MangoxoChannelExtractor,
37 | "#pattern" : mangoxo.MangoxoAlbumExtractor.pattern,
38 | "#range" : "1-30",
39 | "#count" : "> 20",
40 | },
41 |
42 | )
43 |
--------------------------------------------------------------------------------
/test/results/mariowiki.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.mariowiki.com/Rabbit",
13 | "#category": ("wikimedia", "mariowiki", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | "#pattern" : r"https://mario\.wiki\.gallery/images/.+",
16 | "#count" : range(20, 50),
17 | },
18 |
19 | )
20 |
--------------------------------------------------------------------------------
/test/results/mediawiki.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.mediawiki.org/wiki/Help:Navigation",
13 | "#category": ("wikimedia", "mediawiki", "help"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | "#urls" : (
16 | "https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg",
17 | "https://upload.wikimedia.org/wikipedia/commons/6/62/PD-icon.svg",
18 | "https://upload.wikimedia.org/wikipedia/commons/0/0e/Vector_Sidebar.png",
19 | "https://upload.wikimedia.org/wikipedia/commons/7/77/Vector_page_tabs.png",
20 | "https://upload.wikimedia.org/wikipedia/commons/6/6e/Vector_user_links.png",
21 | ),
22 | },
23 |
24 | )
25 |
--------------------------------------------------------------------------------
/test/results/michaelscameras.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://michaels.com.au/collections/microphones",
13 | "#category": ("shopify", "michaelscameras", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://michaels.com.au/collections/audio/products/boya-by-wm4-pro-k5-2-4ghz-mic-android-1-1-101281",
19 | "#category": ("shopify", "michaelscameras", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/misskeydesign.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import misskey
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://misskey.design/@machina_3D",
13 | "#category": ("misskey", "misskey.design", "user"),
14 | "#class" : misskey.MisskeyUserExtractor,
15 | "#pattern" : r"https://file\.misskey\.design/post/[\w-]{36}\.\w+",
16 | "#range" : "1-50",
17 | "#count" : 50,
18 | },
19 |
20 | {
21 | "#url" : "https://misskey.design/@blooddj@pawoo.net",
22 | "#category": ("misskey", "misskey.design", "user"),
23 | "#class" : misskey.MisskeyUserExtractor,
24 | "#count" : "> 30",
25 | },
26 |
27 | {
28 | "#url" : "https://misskey.design/@kujyo_t/following",
29 | "#category": ("misskey", "misskey.design", "following"),
30 | "#class" : misskey.MisskeyFollowingExtractor,
31 | "#count" : ">= 250",
32 | },
33 |
34 | {
35 | "#url" : "https://misskey.design/notes/9jva1danjc",
36 | "#category": ("misskey", "misskey.design", "note"),
37 | "#class" : misskey.MisskeyNoteExtractor,
38 | "#urls" : "https://file.misskey.design/post/a8d27901-24e1-42ab-b8a6-1e09c98c6f55.webp",
39 | },
40 |
41 | {
42 | "#url" : "https://misskey.design/my/favorites",
43 | "#category": ("misskey", "misskey.design", "favorite"),
44 | "#class" : misskey.MisskeyFavoriteExtractor,
45 | },
46 |
47 | {
48 | "#url" : "https://misskey.design/api/i/favorites",
49 | "#category": ("misskey", "misskey.design", "favorite"),
50 | "#class" : misskey.MisskeyFavoriteExtractor,
51 | },
52 |
53 | )
54 |
--------------------------------------------------------------------------------
/test/results/modcloth.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://modcloth.com/collections/shoes",
13 | "#category": ("shopify", "modcloth", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://modcloth.com/collections/shoes/products/heidii-brn",
19 | "#category": ("shopify", "modcloth", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/myhentaigallery.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import myhentaigallery
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://myhentaigallery.com/g/16247",
13 | "#category": ("", "myhentaigallery", "gallery"),
14 | "#class" : myhentaigallery.MyhentaigalleryGalleryExtractor,
15 | "#pattern" : r"https://(cdn|images)\.myhentaicomics\.com/m\w\w/images/[^/]+/original/\d+\.jpg",
16 |
17 | "artist" : list,
18 | "count" : 11,
19 | "gallery_id": 16247,
20 | "group" : list,
21 | "parodies" : list,
22 | "tags" : ["Giantess"],
23 | "title" : "Attack Of The 50ft Woman 1",
24 | },
25 |
26 | {
27 | "#url" : "https://myhentaigallery.com/gallery/thumbnails/16247",
28 | "#category": ("", "myhentaigallery", "gallery"),
29 | "#class" : myhentaigallery.MyhentaigalleryGalleryExtractor,
30 | },
31 |
32 | {
33 | "#url" : "https://myhentaigallery.com/gallery/show/16247/1",
34 | "#category": ("", "myhentaigallery", "gallery"),
35 | "#class" : myhentaigallery.MyhentaigalleryGalleryExtractor,
36 | },
37 |
38 | )
39 |
--------------------------------------------------------------------------------
/test/results/myportfolio.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import myportfolio
8 | from gallery_dl import exception
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://andrewling.myportfolio.com/volvo-xc-90-hybrid",
14 | "#category": ("", "myportfolio", "gallery"),
15 | "#class" : myportfolio.MyportfolioGalleryExtractor,
16 | "#sha1_url" : "acea0690c76db0e5cf267648cefd86e921bc3499",
17 | "#sha1_metadata": "6ac6befe2ee0af921d24cf1dd4a4ed71be06db6d",
18 | },
19 |
20 | {
21 | "#url" : "https://andrewling.myportfolio.com/",
22 | "#category": ("", "myportfolio", "gallery"),
23 | "#class" : myportfolio.MyportfolioGalleryExtractor,
24 | "#pattern" : r"https://andrewling\.myportfolio\.com/[^/?#+]+$",
25 | "#count" : ">= 6",
26 | },
27 |
28 | {
29 | "#url" : "https://stevenilousphotography.myportfolio.com/society",
30 | "#category": ("", "myportfolio", "gallery"),
31 | "#class" : myportfolio.MyportfolioGalleryExtractor,
32 | "#exception": exception.NotFoundError,
33 | },
34 |
35 | {
36 | "#url" : "myportfolio:https://tooco.com.ar/6-of-diamonds-paradise-bird",
37 | "#comment" : "custom domain",
38 | "#category": ("", "myportfolio", "gallery"),
39 | "#class" : myportfolio.MyportfolioGalleryExtractor,
40 | "#count" : 3,
41 | },
42 |
43 | {
44 | "#url" : "myportfolio:https://tooco.com.ar/",
45 | "#category": ("", "myportfolio", "gallery"),
46 | "#class" : myportfolio.MyportfolioGalleryExtractor,
47 | "#pattern" : myportfolio.MyportfolioGalleryExtractor.pattern,
48 | "#count" : ">= 40",
49 | },
50 |
51 | )
52 |
--------------------------------------------------------------------------------
/test/results/noop.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import noop
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "noop",
13 | "#class" : noop.NoopExtractor,
14 | "#urls" : (),
15 | "#count" : 0,
16 | },
17 |
18 | {
19 | "#url" : "nop",
20 | "#class" : noop.NoopExtractor,
21 | },
22 |
23 | {
24 | "#url" : "NOOP",
25 | "#class" : noop.NoopExtractor,
26 | },
27 |
28 | )
29 |
--------------------------------------------------------------------------------
/test/results/nsfwalbum.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import nsfwalbum
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://nsfwalbum.com/album/401611",
13 | "#category": ("", "nsfwalbum", "album"),
14 | "#class" : nsfwalbum.NsfwalbumAlbumExtractor,
15 | "#range" : "1-5",
16 | "#urls" : (
17 | "https://img70.imgspice.com/i/05457/mio2bu5xbrxe.jpg",
18 | "https://img70.imgspice.com/i/05457/zgpxa8kr4h1d.jpg",
19 | "https://img70.imgspice.com/i/05457/3379nxsm9lx8.jpg",
20 | "https://img70.imgspice.com/i/05457/pncrkhspuoa3.jpg",
21 | "https://img70.imgspice.com/i/05457/128b2odt216a.jpg",
22 | ),
23 |
24 | "album_id" : 401611,
25 | "extension": "jpg",
26 | "filename" : str,
27 | "height" : range(1365, 2048),
28 | "id" : int,
29 | "models" : [],
30 | "num" : range(1, 5),
31 | "studio" : "Met-Art",
32 | "title" : "Met-Art - Katherine A - Difuza 25.05.2014 (134 photos)(4368 X 2912)",
33 | "width" : range(1365, 2048),
34 | },
35 |
36 | )
37 |
--------------------------------------------------------------------------------
/test/results/ohpolly.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.ohpolly.com/collections/dresses-mini-dresses",
13 | "#category": ("shopify", "ohpolly", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://www.ohpolly.com/products/edonia-ruched-triangle-cup-a-line-mini-dress-brown",
19 | "#category": ("shopify", "ohpolly", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/omgmiamiswimwear.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.omgmiamiswimwear.com/collections/fajas",
13 | "#category": ("shopify", "omgmiamiswimwear", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://www.omgmiamiswimwear.com/products/snatch-me-waist-belt",
19 | "#category": ("shopify", "omgmiamiswimwear", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | "#pattern" : r"https://cdn\.shopify\.com/s/files/1/1819/6171/",
22 | "#count" : 3,
23 | },
24 |
25 | )
26 |
--------------------------------------------------------------------------------
/test/results/palanq.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://archive.palanq.win/c/thread/4209598/",
13 | "#category": ("foolfuuka", "palanq", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#sha1_url": "1f9b5570d228f1f2991c827a6631030bc0e5933c",
16 | },
17 |
18 | {
19 | "#url" : "https://archive.palanq.win/c/",
20 | "#category": ("foolfuuka", "palanq", "board"),
21 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
22 | },
23 |
24 | {
25 | "#url" : "https://archive.palanq.win/_/search/text/test/",
26 | "#category": ("foolfuuka", "palanq", "search"),
27 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
28 | },
29 |
30 | {
31 | "#url" : "https://archive.palanq.win/c/gallery",
32 | "#category": ("foolfuuka", "palanq", "gallery"),
33 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
34 | },
35 |
36 | )
37 |
--------------------------------------------------------------------------------
/test/results/pawoo.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import mastodon
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://pawoo.net/@yoru_nine/",
13 | "#category": ("mastodon", "pawoo", "user"),
14 | "#class" : mastodon.MastodonUserExtractor,
15 | "#range" : "1-60",
16 | "#count" : 60,
17 | },
18 |
19 | {
20 | "#url" : "https://pawoo.net/bookmarks",
21 | "#category": ("mastodon", "pawoo", "bookmark"),
22 | "#class" : mastodon.MastodonBookmarkExtractor,
23 | },
24 |
25 | {
26 | "#url" : "https://pawoo.net/users/yoru_nine/following",
27 | "#category": ("mastodon", "pawoo", "following"),
28 | "#class" : mastodon.MastodonFollowingExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://pawoo.net/@yoru_nine/105038878897832922",
33 | "#category": ("mastodon", "pawoo", "status"),
34 | "#class" : mastodon.MastodonStatusExtractor,
35 | "#sha1_content": "b52e807f8ab548d6f896b09218ece01eba83987a",
36 | },
37 |
38 | )
39 |
--------------------------------------------------------------------------------
/test/results/philomena.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import philomena
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "philomena:https://manebooru.art/307071",
13 | "#comment" : "'view_url' yields 404 (#6922)",
14 | "#category": ("philomena", "manebooru.art", "post"),
15 | "#class" : philomena.PhilomenaPostExtractor,
16 | "#urls" : "https://static.manebooru.art/img/view/2020/10/27/307071.png",
17 | "#sha1_content": "82c21bfb2675449893fa4b2546546f404019b3c8",
18 |
19 | "date" : "dt:2020-10-27 11:58:40"
20 | },
21 |
22 | {
23 | "#url" : "philomena:https://ponerpics.org/images/1",
24 | "#category": ("philomena", "ponerpics.org", "post"),
25 | "#class" : philomena.PhilomenaPostExtractor,
26 | "#urls" : "https://ponerpics.org/img/view/2012/1/2/1.png",
27 |
28 | "date" : "dt:2012-01-02 03:12:33"
29 | },
30 |
31 | )
32 |
--------------------------------------------------------------------------------
/test/results/photovogue.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import photovogue
8 | import datetime
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://www.vogue.com/photovogue/photographers/221252",
14 | "#category": ("", "photovogue", "user"),
15 | "#class" : photovogue.PhotovogueUserExtractor,
16 | },
17 |
18 | {
19 | "#url" : "https://vogue.com/photovogue/photographers/221252",
20 | "#category": ("", "photovogue", "user"),
21 | "#class" : photovogue.PhotovogueUserExtractor,
22 | "#pattern" : "https://images.vogue.it/Photovogue/[^/]+_gallery.jpg",
23 |
24 | "date" : datetime.datetime,
25 | "favorite_count" : int,
26 | "favorited" : list,
27 | "id" : int,
28 | "image_id" : str,
29 | "is_favorite" : False,
30 | "orientation" : r"re:portrait|landscape",
31 | "photographer" : {
32 | "biography" : "Born in 1995. Live in Bologna.",
33 | "city" : "Bologna",
34 | "country_id" : 106,
35 | "favoritedCount": int,
36 | "id" : 221252,
37 | "isGold" : bool,
38 | "isPro" : bool,
39 | "latitude" : str,
40 | "longitude" : str,
41 | "name" : "Arianna Mattarozzi",
42 | "user_id" : "38cb0601-4a85-453c-b7dc-7650a037f2ab",
43 | "websites" : list,
44 | },
45 | "photographer_id": 221252,
46 | "tags" : list,
47 | "title" : str,
48 | },
49 |
50 | )
51 |
--------------------------------------------------------------------------------
/test/results/picarto.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import picarto
8 | import datetime
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://picarto.tv/fnook/gallery/default/",
14 | "#category": ("", "picarto", "gallery"),
15 | "#class" : picarto.PicartoGalleryExtractor,
16 | "#pattern" : r"https://images\.picarto\.tv/gallery/\d/\d\d/\d+/artwork/[0-9a-f-]+/large-[0-9a-f]+\.(jpg|png|gif)",
17 | "#count" : ">= 7",
18 |
19 | "date": datetime.datetime,
20 | },
21 |
22 | )
23 |
--------------------------------------------------------------------------------
/test/results/pidgiwiki.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.pidgi.net/wiki/File:Key_art_-_Fight_Knight.png",
13 | "#category": ("wikimedia", "pidgiwiki", "file"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | "#urls" : "https://cdn.pidgi.net/images/0/0c/Key_art_-_Fight_Knight.png",
16 | },
17 |
18 | {
19 | "#url" : "https://pidgi.net/wiki/File:Key_art_-_Fight_Knight.png",
20 | "#category": ("wikimedia", "pidgiwiki", "file"),
21 | "#class" : wikimedia.WikimediaArticleExtractor,
22 | },
23 |
24 | )
25 |
--------------------------------------------------------------------------------
/test/results/pinupgirlclothing.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://pinupgirlclothing.com/collections/evening",
13 | "#category": ("shopify", "pinupgirlclothing", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://pinupgirlclothing.com/collections/evening/products/clarice-coat-dress-in-olive-green-poly-crepe-laura-byrnes-design",
19 | "#category": ("shopify", "pinupgirlclothing", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/pixhost.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://pixhost.to/show/190/130327671_test-.png",
13 | "#category": ("imagehost", "pixhost", "image"),
14 | "#class" : imagehosts.PixhostImageExtractor,
15 | "#sha1_url" : "4e5470dcf6513944773044d40d883221bbc46cff",
16 | "#sha1_metadata": "3bad6d59db42a5ebbd7842c2307e1c3ebd35e6b0",
17 | "#sha1_content" : "0c8768055e4e20e7c7259608b67799171b691140",
18 | },
19 |
20 | {
21 | "#url" : "https://pixhost.to/gallery/jSMFq",
22 | "#category": ("imagehost", "pixhost", "gallery"),
23 | "#class" : imagehosts.PixhostGalleryExtractor,
24 | "#pattern" : imagehosts.PixhostImageExtractor.pattern,
25 | "#count" : 3,
26 | },
27 |
28 | )
29 |
--------------------------------------------------------------------------------
/test/results/plurk.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import plurk
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.plurk.com/plurkapi",
13 | "#category": ("", "plurk", "timeline"),
14 | "#class" : plurk.PlurkTimelineExtractor,
15 | "#pattern" : "https?://.+",
16 | "#count" : ">= 23",
17 | },
18 |
19 | {
20 | "#url" : "https://www.plurk.com/p/i701j1",
21 | "#category": ("", "plurk", "post"),
22 | "#class" : plurk.PlurkPostExtractor,
23 | "#count" : 3,
24 | "#sha1_url": "2115f208564591b8748525c2807a84596aaaaa5f",
25 | },
26 |
27 | {
28 | "#url" : "https://www.plurk.com/p/i701j1",
29 | "#category": ("", "plurk", "post"),
30 | "#class" : plurk.PlurkPostExtractor,
31 | "#options" : {"comments": True},
32 | "#count" : ">= 210",
33 | },
34 |
35 | )
36 |
--------------------------------------------------------------------------------
/test/results/ponybooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import philomena
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://ponybooru.org/images/1",
13 | "#category": ("philomena", "ponybooru", "post"),
14 | "#class" : philomena.PhilomenaPostExtractor,
15 | "#sha1_content": "bca26f58fafd791fe07adcd2a28efd7751824605",
16 | },
17 |
18 | {
19 | "#url" : "https://www.ponybooru.org/images/1",
20 | "#category": ("philomena", "ponybooru", "post"),
21 | "#class" : philomena.PhilomenaPostExtractor,
22 | },
23 |
24 | {
25 | "#url" : "https://ponybooru.org/search?q=cute",
26 | "#category": ("philomena", "ponybooru", "search"),
27 | "#class" : philomena.PhilomenaSearchExtractor,
28 | "#range" : "40-60",
29 | "#count" : 21,
30 | },
31 |
32 | {
33 | "#url" : "https://ponybooru.org/galleries/27",
34 | "#category": ("philomena", "ponybooru", "gallery"),
35 | "#class" : philomena.PhilomenaGalleryExtractor,
36 | "#count" : ">= 24",
37 | },
38 |
39 | )
40 |
--------------------------------------------------------------------------------
/test/results/poringa.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import poringa
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "http://www.poringa.net/posts/imagenes/3051081/Turrita-alto-ojete.html",
13 | "#category": ("", "poringa", "post"),
14 | "#class" : poringa.PoringaPostExtractor,
15 | "#count" : 26,
16 |
17 | "count" : 26,
18 | "num" : range(1, 26),
19 | "post_id" : "3051081",
20 | "title" : "turrita alto ojete...",
21 | "user" : "vipower1top",
22 | },
23 |
24 | {
25 | "#url" : "http://www.poringa.net/posts/imagenes/3095554/Otra-culona-de-instagram.html",
26 | "#category": ("", "poringa", "post"),
27 | "#class" : poringa.PoringaPostExtractor,
28 | "#count" : 15,
29 |
30 | "count" : 15,
31 | "num" : range(1, 15),
32 | "post_id" : "3095554",
33 | "title" : "Otra culona de instagram",
34 | "user" : "Expectro007",
35 | },
36 |
37 | {
38 | "#url" : "http://www.poringa.net/Expectro007",
39 | "#category": ("", "poringa", "user"),
40 | "#class" : poringa.PoringaUserExtractor,
41 | "#pattern" : r"https?://img-\d+\.poringa\.net/poringa/img/././././././Expectro007/\w{3}\.(jpg|png|gif)",
42 | "#count" : range(500, 600),
43 | },
44 |
45 | {
46 | "#url" : "http://www.poringa.net/buscar/?&q=yuslopez",
47 | "#category": ("", "poringa", "search"),
48 | "#class" : poringa.PoringaSearchExtractor,
49 | "#pattern" : r"https?://img-\d+\.poringa\.net/poringa/img/././././././\w+/\w{3}\.(jpg|png|gif)",
50 | "#range" : "1-50",
51 | "#count" : 50,
52 | },
53 |
54 | )
55 |
--------------------------------------------------------------------------------
/test/results/postimg.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://postimages.org/Wtn2b3hC",
13 | "#category": ("imagehost", "postimg", "image"),
14 | "#class" : imagehosts.PostimgImageExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://www.postimages.org/Wtn2b3hC",
19 | "#category": ("imagehost", "postimg", "image"),
20 | "#class" : imagehosts.PostimgImageExtractor,
21 | },
22 |
23 | {
24 | "#url" : "https://pixxxels.cc/Wtn2b3hC",
25 | "#category": ("imagehost", "postimg", "image"),
26 | "#class" : imagehosts.PostimgImageExtractor,
27 | },
28 |
29 | {
30 | "#url" : "https://postimg.cc/Wtn2b3hC",
31 | "#category": ("imagehost", "postimg", "image"),
32 | "#class" : imagehosts.PostimgImageExtractor,
33 | "#sha1_url" : "72f3c8b1d6c6601a20ad58f35635494b4891a99e",
34 | "#sha1_metadata": "2d05808d04e4e83e33200db83521af06e3147a84",
35 | "#sha1_content" : "cfaa8def53ed1a575e0c665c9d6d8cf2aac7a0ee",
36 | },
37 |
38 | {
39 | "#url" : "https://postimg.cc/gallery/wxpDLgX",
40 | "#category": ("imagehost", "postimg", "gallery"),
41 | "#class" : imagehosts.PostimgGalleryExtractor,
42 | "#pattern" : imagehosts.PostimgImageExtractor.pattern,
43 | "#count" : 22,
44 | },
45 |
46 | )
47 |
--------------------------------------------------------------------------------
/test/results/raidlondon.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.raidlondon.com/collections/flats",
13 | "#category": ("shopify", "raidlondon", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://www.raidlondon.com/collections/flats/products/raid-addyson-chunky-flat-shoe-in-white",
19 | "#category": ("shopify", "raidlondon", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/rbt.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://rbt.asia/g/thread/61487650/",
13 | "#category": ("foolfuuka", "rbt", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#sha1_url": "fadd274b25150a1bdf03a40c58db320fa3b617c4",
16 | },
17 |
18 | {
19 | "#url" : "https://archive.rebeccablacktech.com/g/thread/61487650/",
20 | "#category": ("foolfuuka", "rbt", "thread"),
21 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
22 | "#sha1_url": "fadd274b25150a1bdf03a40c58db320fa3b617c4",
23 | },
24 |
25 | {
26 | "#url" : "https://rbt.asia/g/",
27 | "#category": ("foolfuuka", "rbt", "board"),
28 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://rbt.asia/_/search/text/test/",
33 | "#category": ("foolfuuka", "rbt", "search"),
34 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
35 | },
36 |
37 | {
38 | "#url" : "https://rbt.asia/g/gallery/8",
39 | "#category": ("foolfuuka", "rbt", "gallery"),
40 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
41 | },
42 |
43 | )
44 |
--------------------------------------------------------------------------------
/test/results/reactor.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import reactor
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "http://reactor.cc/tag/gif",
13 | "#category": ("reactor", "reactor", "tag"),
14 | "#class" : reactor.ReactorTagExtractor,
15 | },
16 |
17 | {
18 | "#url" : "http://reactor.cc/search?q=Art",
19 | "#category": ("reactor", "reactor", "search"),
20 | "#class" : reactor.ReactorSearchExtractor,
21 | },
22 |
23 | {
24 | "#url" : "http://reactor.cc/user/Dioklet",
25 | "#category": ("reactor", "reactor", "user"),
26 | "#class" : reactor.ReactorUserExtractor,
27 | },
28 |
29 | {
30 | "#url" : "http://reactor.cc/post/4999736",
31 | "#category": ("reactor", "reactor", "post"),
32 | "#class" : reactor.ReactorPostExtractor,
33 | "#sha1_url": "dfc74d150d7267384d8c229c4b82aa210755daa0",
34 | },
35 |
36 | )
37 |
--------------------------------------------------------------------------------
/test/results/readcomiconline.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import readcomiconline
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://readcomiconline.li/Comic/W-i-t-c-h/Issue-130?id=22289",
13 | "#category": ("", "readcomiconline", "issue"),
14 | "#class" : readcomiconline.ReadcomiconlineIssueExtractor,
15 | "#pattern" : r"https://2\.bp\.blogspot\.com/[\w-]+=s0\?.+",
16 | "#count" : 36,
17 | "#sha1_metadata": "2d9ec81ce1b11fac06ebf96ce33cdbfca0e85eb5",
18 | },
19 |
20 | {
21 | "#url" : "https://readcomiconline.li/Comic/W-i-t-c-h",
22 | "#category": ("", "readcomiconline", "comic"),
23 | "#class" : readcomiconline.ReadcomiconlineComicExtractor,
24 | "#sha1_url" : "74eb8b9504b4084fcc9367b341300b2c52260918",
25 | "#sha1_metadata": "3986248e4458fa44a201ec073c3684917f48ee0c",
26 | },
27 |
28 | {
29 | "#url" : "https://readcomiconline.to/Comic/Bazooka-Jules",
30 | "#category": ("", "readcomiconline", "comic"),
31 | "#class" : readcomiconline.ReadcomiconlineComicExtractor,
32 | "#sha1_url" : "2f66a467a772df4d4592e97a059ddbc3e8991799",
33 | "#sha1_metadata": "f5ba5246cd787bb750924d9690cb1549199bd516",
34 | },
35 |
36 | )
37 |
--------------------------------------------------------------------------------
/test/results/recursive.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import recursive
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "recursive:https://pastebin.com/raw/FLwrCYsT",
13 | "#category": ("", "recursive", ""),
14 | "#class" : recursive.RecursiveExtractor,
15 | "#sha1_url": "eee86d65c346361b818e8f4b2b307d9429f136a2",
16 | },
17 |
18 | )
19 |
--------------------------------------------------------------------------------
/test/results/rule34us.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import rule34us
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://rule34.us/index.php?r=posts/index&q=[terios]_elysion",
13 | "#category": ("booru", "rule34us", "tag"),
14 | "#class" : rule34us.Rule34usTagExtractor,
15 | "#pattern" : r"https://img\d*\.rule34\.us/images/../../[0-9a-f]{32}\.\w+",
16 | "#count" : 10,
17 | },
18 |
19 | {
20 | "#url" : "https://rule34.us/index.php?r=posts/view&id=3709005",
21 | "#category": ("booru", "rule34us", "post"),
22 | "#class" : rule34us.Rule34usPostExtractor,
23 | "#pattern" : r"https://img\d*\.rule34\.us/images/14/7b/147bee6fc2e13f73f5f9bac9d4930b13\.png",
24 | "#sha1_content": "d714342ea84050f82dda5f0c194d677337abafc5",
25 | },
26 |
27 | {
28 | "#url" : "https://rule34.us/index.php?r=posts/view&id=4576310",
29 | "#category": ("booru", "rule34us", "post"),
30 | "#class" : rule34us.Rule34usPostExtractor,
31 | "#pattern" : r"https://video-cdn\d\.rule34\.us/images/a2/94/a294ff8e1f8e0efa041e5dc9d1480011\.mp4",
32 |
33 | "extension" : "mp4",
34 | "file_url" : str,
35 | "filename" : "a294ff8e1f8e0efa041e5dc9d1480011",
36 | "height" : "3982",
37 | "id" : "4576310",
38 | "md5" : "a294ff8e1f8e0efa041e5dc9d1480011",
39 | "score" : r"re:\d+",
40 | "tags" : "tagme, video",
41 | "tags_general" : "video",
42 | "tags_metadata": "tagme",
43 | "uploader" : "Anonymous",
44 | "width" : "3184",
45 | },
46 |
47 | )
48 |
--------------------------------------------------------------------------------
/test/results/slickpic.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import slickpic
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://mattcrandall.slickpic.com/albums/LamborghiniMurcielago/",
13 | "#category": ("", "slickpic", "album"),
14 | "#class" : slickpic.SlickpicAlbumExtractor,
15 | "#pattern" : r"https://stored-cf\.slickpic\.com/NDk5MjNmYTc1MzU0MQ,,/20160807/\w+/p/o/JSBFSS-\d+\.jpg",
16 | "#count" : 102,
17 | "#sha1_metadata": "c37c4ce9c54c09abc6abdf295855d46f11529cbf",
18 | },
19 |
20 | {
21 | "#url" : "https://mattcrandall.slickpic.com/albums/LamborghiniMurcielago/",
22 | "#category": ("", "slickpic", "album"),
23 | "#class" : slickpic.SlickpicAlbumExtractor,
24 | "#range" : "34",
25 | "#sha1_content": [
26 | "276eb2c902187bb177ae8013e310e1d6641fba9a",
27 | "52b5a310587de1048030ab13a912f6a3a9cc7dab",
28 | "cec6630e659dc72db1ee1a9a6f3b525189261988",
29 | "6f81e1e74c6cd6db36844e7211eef8e7cd30055d",
30 | "22e83645fc242bc3584eca7ec982c8a53a4d8a44",
31 | ],
32 | },
33 |
34 | {
35 | "#url" : "https://mattcrandall.slickpic.com/gallery/",
36 | "#category": ("", "slickpic", "user"),
37 | "#class" : slickpic.SlickpicUserExtractor,
38 | "#pattern" : slickpic.SlickpicAlbumExtractor.pattern,
39 | "#count" : ">= 358",
40 | },
41 |
42 | {
43 | "#url" : "https://mattcrandall.slickpic.com/",
44 | "#category": ("", "slickpic", "user"),
45 | "#class" : slickpic.SlickpicUserExtractor,
46 | },
47 |
48 | )
49 |
--------------------------------------------------------------------------------
/test/results/smugloli.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import vichan
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://smuglo.li/a/res/1143245.html",
13 | "#category": ("vichan", "smugloli", "thread"),
14 | "#class" : vichan.VichanThreadExtractor,
15 | "#pattern" : r"https://smug.+/a/src/\d+(-\d)?\.\w+",
16 | "#count" : ">= 50",
17 |
18 | "board" : "a",
19 | "thread": "1143245",
20 | "title": "Rabbit Rabbit Thread #4",
21 | },
22 |
23 | {
24 | "#url" : "https://smugloli.net/a/res/1145409.html",
25 | "#category": ("vichan", "smugloli", "thread"),
26 | "#class" : vichan.VichanThreadExtractor,
27 | },
28 |
29 | {
30 | "#url" : "https://smuglo.li/a",
31 | "#category": ("vichan", "smugloli", "board"),
32 | "#class" : vichan.VichanBoardExtractor,
33 | "#pattern" : vichan.VichanThreadExtractor.pattern,
34 | "#count" : ">= 100",
35 | },
36 |
37 | {
38 | "#url" : "https://smuglo.li/a/1.html",
39 | "#category": ("vichan", "smugloli", "board"),
40 | "#class" : vichan.VichanBoardExtractor,
41 | },
42 |
43 | {
44 | "#url" : "https://smugloli.net/cute/catalog.html",
45 | "#category": ("vichan", "smugloli", "board"),
46 | "#class" : vichan.VichanBoardExtractor,
47 | },
48 |
49 | )
50 |
--------------------------------------------------------------------------------
/test/results/soundgasm.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import soundgasm
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://soundgasm.net/u/ClassWarAndPuppies2/687-Otto-von-Toontown-12822",
13 | "#category": ("", "soundgasm", "audio"),
14 | "#class" : soundgasm.SoundgasmAudioExtractor,
15 | "#pattern" : r"https://media\.soundgasm\.net/sounds/26cb2b23b2f2c6094b40ee3a9167271e274b570a\.m4a",
16 |
17 | "description": "We celebrate today’s important prisoner swap, and finally bring the 2022 mid-terms to a close with Raphael Warnock’s defeat of Herschel Walker in Georgia. Then, we take a look at the Qanon-addled attempt to overthrow the German government and install Heinrich XIII Prince of Reuss as kaiser.",
18 | "extension" : "m4a",
19 | "filename" : "26cb2b23b2f2c6094b40ee3a9167271e274b570a",
20 | "slug" : "687-Otto-von-Toontown-12822",
21 | "title" : "687 - Otto von Toontown (12/8/22)",
22 | "user" : "ClassWarAndPuppies2",
23 | },
24 |
25 | {
26 | "#url" : "https://www.soundgasm.net/user/ClassWarAndPuppies2/687-Otto-von-Toontown-12822",
27 | "#category": ("", "soundgasm", "audio"),
28 | "#class" : soundgasm.SoundgasmAudioExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://soundgasm.net/u/fierce-aphrodite",
33 | "#category": ("", "soundgasm", "user"),
34 | "#class" : soundgasm.SoundgasmUserExtractor,
35 | "#pattern" : r"https://media\.soundgasm\.net/sounds/[0-9a-f]{40}\.m4a",
36 | "#count" : ">= 15",
37 |
38 | "description": str,
39 | "extension" : "m4a",
40 | "filename" : r"re:^[0-9a-f]{40}$",
41 | "slug" : str,
42 | "title" : str,
43 | "url" : str,
44 | "user" : "fierce-aphrodite",
45 | },
46 |
47 | )
48 |
--------------------------------------------------------------------------------
/test/results/speakerdeck.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import speakerdeck
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://speakerdeck.com/speakerdeck/introduction-to-speakerdeck",
13 | "#category": ("", "speakerdeck", "presentation"),
14 | "#class" : speakerdeck.SpeakerdeckPresentationExtractor,
15 | "#pattern" : r"https://files.speakerdeck.com/presentations/50021f75cf1db900020005e7/slide_\d+.jpg",
16 | "#count" : 6,
17 | "#sha1_content": "75c7abf0969b0bcab23e0da9712c95ee5113db3a",
18 |
19 | "author" : "Speaker Deck",
20 | "count" : 6,
21 | "num" : range(1, 6),
22 | "presentation" : "introduction-to-speakerdeck",
23 | "presentation_id": "50021f75cf1db900020005e7",
24 | "title" : "Introduction to SpeakerDeck",
25 | "user" : "speakerdeck",
26 | },
27 |
28 | )
29 |
--------------------------------------------------------------------------------
/test/results/sushiski.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import misskey
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://sushi.ski/@ui@misskey.04.si",
13 | "#category": ("misskey", "sushi.ski", "user"),
14 | "#class" : misskey.MisskeyUserExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://sushi.ski/@hatusimo_sigure/following",
19 | "#category": ("misskey", "sushi.ski", "following"),
20 | "#class" : misskey.MisskeyFollowingExtractor,
21 | },
22 |
23 | {
24 | "#url" : "https://sushi.ski/notes/9bm3x4ksqw",
25 | "#category": ("misskey", "sushi.ski", "note"),
26 | "#class" : misskey.MisskeyNoteExtractor,
27 | "#pattern" : r"https://media\.sushi\.ski/files/[\w-]+\.png",
28 | "#count" : 1,
29 | },
30 |
31 | {
32 | "#url" : "https://sushi.ski/my/favorites",
33 | "#category": ("misskey", "sushi.ski", "favorite"),
34 | "#class" : misskey.MisskeyFavoriteExtractor,
35 | },
36 |
37 | )
38 |
--------------------------------------------------------------------------------
/test/results/tbib.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import gelbooru_v02
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://tbib.org/index.php?page=post&s=list&tags=yuyaiyaui",
13 | "#category": ("gelbooru_v02", "tbib", "tag"),
14 | "#class" : gelbooru_v02.GelbooruV02TagExtractor,
15 | "#count" : ">= 120",
16 | },
17 |
18 | {
19 | "#url" : "https://tbib.org/index.php?page=favorites&s=view&id=7881",
20 | "#category": ("gelbooru_v02", "tbib", "favorite"),
21 | "#class" : gelbooru_v02.GelbooruV02FavoriteExtractor,
22 | "#count" : 3,
23 | },
24 |
25 | {
26 | "#url" : "https://tbib.org/index.php?page=post&s=view&id=9233957",
27 | "#category": ("gelbooru_v02", "tbib", "post"),
28 | "#class" : gelbooru_v02.GelbooruV02PostExtractor,
29 | "#sha1_url" : "5a6ebe07bfff8e6d27f7c30b5480f27abcb577d2",
30 | "#sha1_content": "1c3831b6fbaa4686e3c79035b5d98460b1c85c43",
31 | },
32 |
33 | )
34 |
--------------------------------------------------------------------------------
/test/results/tco.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import urlshortener
8 | from gallery_dl import exception
9 |
10 |
11 | __tests__ = (
12 | {
13 | "#url" : "https://t.co/bCgBY8Iv5n",
14 | "#category": ("urlshortener", "tco", "link"),
15 | "#class" : urlshortener.UrlshortenerLinkExtractor,
16 | "#pattern" : "^https://twitter.com/elonmusk/status/1421395561324896257/photo/1",
17 | "#count" : 1,
18 | },
19 |
20 | {
21 | "#url" : "https://t.co/abcdefghij",
22 | "#category": ("urlshortener", "tco", "link"),
23 | "#class" : urlshortener.UrlshortenerLinkExtractor,
24 | "#exception": exception.NotFoundError,
25 | },
26 |
27 | )
28 |
--------------------------------------------------------------------------------
/test/results/thebarchive.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import foolfuuka
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://thebarchive.com/b/thread/739772332/",
13 | "#category": ("foolfuuka", "thebarchive", "thread"),
14 | "#class" : foolfuuka.FoolfuukaThreadExtractor,
15 | "#sha1_url": "e8b18001307d130d67db31740ce57c8561b5d80c",
16 | },
17 |
18 | {
19 | "#url" : "https://thebarchive.com/b/",
20 | "#category": ("foolfuuka", "thebarchive", "board"),
21 | "#class" : foolfuuka.FoolfuukaBoardExtractor,
22 | },
23 |
24 | {
25 | "#url" : "https://thebarchive.com/_/search/text/test/",
26 | "#category": ("foolfuuka", "thebarchive", "search"),
27 | "#class" : foolfuuka.FoolfuukaSearchExtractor,
28 | },
29 |
30 | {
31 | "#url" : "https://thebarchive.com/b/gallery/9",
32 | "#category": ("foolfuuka", "thebarchive", "gallery"),
33 | "#class" : foolfuuka.FoolfuukaGalleryExtractor,
34 | },
35 |
36 | )
37 |
--------------------------------------------------------------------------------
/test/results/thecollection.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import gelbooru_v01
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://the-collection.booru.org/index.php?page=post&s=list&tags=parody",
13 | "#category": ("gelbooru_v01", "thecollection", "tag"),
14 | "#class" : gelbooru_v01.GelbooruV01TagExtractor,
15 | "#range" : "1-25",
16 | "#count" : 25,
17 | },
18 |
19 | {
20 | "#url" : "https://the-collection.booru.org/index.php?page=favorites&s=view&id=1166",
21 | "#category": ("gelbooru_v01", "thecollection", "favorite"),
22 | "#class" : gelbooru_v01.GelbooruV01FavoriteExtractor,
23 | "#count" : 2,
24 | },
25 |
26 | {
27 | "#url" : "https://the-collection.booru.org/index.php?page=post&s=view&id=100520",
28 | "#category": ("gelbooru_v01", "thecollection", "post"),
29 | "#class" : gelbooru_v01.GelbooruV01PostExtractor,
30 | "#sha1_url" : "0329ac8588bb93cf242ca0edbe3e995b4ba554e8",
31 | "#sha1_content": "1e585874e7b874f7937df1060dd1517fef2f4dfb",
32 | },
33 |
34 | )
35 |
--------------------------------------------------------------------------------
/test/results/tmohentai.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import tmohentai
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://tmohentai.com/contents/653c2aeaa693c",
13 | "#category": ("", "tmohentai", "gallery"),
14 | "#class" : tmohentai.TmohentaiGalleryExtractor,
15 | "#pattern" : r"https://imgrojo\.tmohentai\.com/contents/653c2aeaa693c/\d\d\d\.webp",
16 | "#count" : 46,
17 |
18 | "artists" : ["Andoryu"],
19 | "genres" : [
20 | "Big Breasts",
21 | "BlowJob",
22 | "Cheating",
23 | "Mature",
24 | "Milf",
25 | "Student",
26 | ],
27 | "count" : 46,
28 | "extension" : "webp",
29 | "gallery_id": "653c2aeaa693c",
30 | "language" : "Español",
31 | "num" : int,
32 | "tags" : [
33 | "milf",
34 | "Madre",
35 | "enormes pechos",
36 | "Peluda",
37 | "nakadashi",
38 | "cheating",
39 | "madura",
40 | "sexo a escondidas",
41 | "Ama de casa",
42 | "mamada",
43 | ],
44 | "title" : "La Mama de mi Novia es tan Pervertida que no Pude Soportarlo mas",
45 | "uploader" : "NekoCreme Fansub",
46 | },
47 |
48 | {
49 | "#url" : "https://tmohentai.com/reader/653c2aeaa693c/paginated/1",
50 | "#category": ("", "tmohentai", "gallery"),
51 | "#class" : tmohentai.TmohentaiGalleryExtractor,
52 | },
53 |
54 | )
55 |
--------------------------------------------------------------------------------
/test/results/tumblrgallery.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import tumblrgallery
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://tumblrgallery.xyz/tumblrblog/gallery/103975.html",
13 | "#category": ("", "tumblrgallery", "tumblrblog"),
14 | "#class" : tumblrgallery.TumblrgalleryTumblrblogExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://tumblrgallery.xyz/post/405674.html",
19 | "#category": ("", "tumblrgallery", "post"),
20 | "#class" : tumblrgallery.TumblrgalleryPostExtractor,
21 | "#pattern" : r"https://78\.media\.tumblr\.com/bec67072219c1f3bc04fd9711dec42ef/tumblr_p51qq1XCHS1txhgk3o1_1280\.jpg",
22 | "#count" : 3,
23 | },
24 |
25 | {
26 | "#url" : "https://tumblrgallery.xyz/s.php?q=everyday-life",
27 | "#category": ("", "tumblrgallery", "search"),
28 | "#class" : tumblrgallery.TumblrgallerySearchExtractor,
29 | "#pattern" : r"https://\d+\.media\.tumblr\.com/.+",
30 | "#count" : "< 1000",
31 | },
32 |
33 | )
34 |
--------------------------------------------------------------------------------
/test/results/turboimagehost.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.turboimagehost.com/p/39078423/test--.png.html",
13 | "#category": ("imagehost", "turboimagehost", "image"),
14 | "#class" : imagehosts.TurboimagehostImageExtractor,
15 | "#sha1_url" : "b94de43612318771ced924cb5085976f13b3b90e",
16 | "#sha1_metadata": "704757ca8825f51cec516ec44c1e627c1f2058ca",
17 | "#sha1_content" : (
18 | "f38b54b17cd7462e687b58d83f00fca88b1b105a",
19 | "0c8768055e4e20e7c7259608b67799171b691140",
20 | "961b25d85b5f5bd18cbe3e847ac55925f14d0286"
21 | ),
22 | },
23 |
24 | {
25 | "#url" : "https://www.turboimagehost.com/album/344597/testimagegallery",
26 | "#category": ("imagehost", "turboimagehost", "gallery"),
27 | "#class" : imagehosts.TurboimagehostGalleryExtractor,
28 | "#pattern" : imagehosts.TurboimagehostImageExtractor.pattern,
29 | "#sha1_url": "f2d4fe102fdd71dd1f595cdb0c16ce999d6bb19b",
30 | "#count" : 110,
31 | },
32 |
33 | )
34 |
--------------------------------------------------------------------------------
/test/results/unique-vintage.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.unique-vintage.com/collections/flapper-1920s",
13 | "#category": ("shopify", "unique-vintage", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://www.unique-vintage.com/collections/flapper-1920s/products/unique-vintage-plus-size-black-silver-beaded-troyes-flapper-dress",
19 | "#category": ("shopify", "unique-vintage", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/uploadir.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import uploadir
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://uploadir.com/u/rd3t46ry",
13 | "#comment" : "image",
14 | "#category": ("", "uploadir", "file"),
15 | "#class" : uploadir.UploadirFileExtractor,
16 | "#pattern" : r"https://uploadir\.com/u/rd3t46ry",
17 | "#count" : 1,
18 |
19 | "extension": "jpg",
20 | "filename" : "Chloe and Rachel 4K jpg",
21 | "id" : "rd3t46ry",
22 | },
23 |
24 | {
25 | "#url" : "https://uploadir.com/uploads/gxe8ti9v/downloads/new",
26 | "#comment" : "archive",
27 | "#category": ("", "uploadir", "file"),
28 | "#class" : uploadir.UploadirFileExtractor,
29 | "#pattern" : r"https://uploadir\.com/uploads/gxe8ti9v/downloads",
30 | "#count" : 1,
31 |
32 | "extension": "zip",
33 | "filename" : "NYAN-Mods-Pack#1",
34 | "id" : "gxe8ti9v",
35 | },
36 |
37 | {
38 | "#url" : "https://uploadir.com/u/fllda6xl",
39 | "#comment" : "utf-8 filename",
40 | "#category": ("", "uploadir", "file"),
41 | "#class" : uploadir.UploadirFileExtractor,
42 | "#pattern" : r"https://uploadir\.com/u/fllda6xl",
43 | "#count" : 1,
44 |
45 | "extension": "png",
46 | "filename" : "_圖片_🖼_image_",
47 | "id" : "fllda6xl",
48 | },
49 |
50 | {
51 | "#url" : "https://uploadir.com/uploads/rd3t46ry",
52 | "#category": ("", "uploadir", "file"),
53 | "#class" : uploadir.UploadirFileExtractor,
54 | },
55 |
56 | {
57 | "#url" : "https://uploadir.com/user/uploads/rd3t46ry",
58 | "#category": ("", "uploadir", "file"),
59 | "#class" : uploadir.UploadirFileExtractor,
60 | },
61 |
62 | )
63 |
--------------------------------------------------------------------------------
/test/results/vanillarock.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import vanillarock
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://vanilla-rock.com/mizuhashi_parsee-5",
13 | "#category": ("", "vanillarock", "post"),
14 | "#class" : vanillarock.VanillarockPostExtractor,
15 | "#sha1_url" : "7fb9a4d18d9fa22d7295fee8d94ab5a7a52265dd",
16 | "#sha1_metadata": "b91df99b714e1958d9636748b1c81a07c3ef52c9",
17 | },
18 |
19 | {
20 | "#url" : "https://vanilla-rock.com/tag/%e5%b0%84%e5%91%bd%e4%b8%b8%e6%96%87",
21 | "#category": ("", "vanillarock", "tag"),
22 | "#class" : vanillarock.VanillarockTagExtractor,
23 | "#pattern" : vanillarock.VanillarockPostExtractor.pattern,
24 | "#count" : ">= 12",
25 | },
26 |
27 | {
28 | "#url" : "https://vanilla-rock.com/category/%e4%ba%8c%e6%ac%a1%e3%82%a8%e3%83%ad%e7%94%bb%e5%83%8f/%e8%90%8c%e3%81%88%e3%83%bb%e3%82%bd%e3%83%95%e3%83%88%e3%82%a8%e3%83%ad",
29 | "#category": ("", "vanillarock", "tag"),
30 | "#class" : vanillarock.VanillarockTagExtractor,
31 | "#pattern" : vanillarock.VanillarockPostExtractor.pattern,
32 | "#count" : ">= 5",
33 | },
34 |
35 | )
36 |
--------------------------------------------------------------------------------
/test/results/vidyapics.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shimmie2
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://vidya.pics/post/list/kirby/1",
13 | "#category": ("shimmie2", "vidyapics", "tag"),
14 | "#class" : shimmie2.Shimmie2TagExtractor,
15 | "#pattern" : r"https://vidya.pics/_images/[0-9a-f]{32}/\d+",
16 | "#range" : "1-100",
17 | "#count" : 100,
18 | },
19 |
20 | {
21 | "#url" : "https://vidya.pics/post/view/108820",
22 | "#category": ("shimmie2", "vidyapics", "post"),
23 | "#class" : shimmie2.Shimmie2PostExtractor,
24 | "#pattern" : r"https://vidya\.pics/_images/277ecdb90285bfa6e0c4cd46d9515b11/108820.+\.png",
25 | "#sha1_content": "7d2fe9327759c231ff17f6e341df749b70b191ce",
26 |
27 | "extension": "png",
28 | "file_url" : "https://vidya.pics/_images/277ecdb90285bfa6e0c4cd46d9515b11/108820%20-%201boy%20artist%3Aunknown%20flag%20kirby%20kirby_%28series%29.png",
29 | "filename" : "108820 - 1boy artist:unknown flag kirby kirby_(series)",
30 | "height" : 700,
31 | "id" : 108820,
32 | "md5" : "277ecdb90285bfa6e0c4cd46d9515b11",
33 | "size" : 0,
34 | "tags" : "1boy artist:unknown flag kirby kirby_(series",
35 | "width" : 700,
36 | },
37 |
38 | )
39 |
--------------------------------------------------------------------------------
/test/results/vidyart2.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import gelbooru_v01
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://vidyart2.booru.org/index.php?page=post&s=list&tags=all",
13 | "#category": ("gelbooru_v01", "vidyart2", "tag"),
14 | "#class" : gelbooru_v01.GelbooruV01TagExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://vidyart2.booru.org/index.php?page=favorites&s=view&id=1",
19 | "#category": ("gelbooru_v01", "vidyart2", "favorite"),
20 | "#class" : gelbooru_v01.GelbooruV01FavoriteExtractor,
21 | },
22 |
23 | {
24 | "#url" : "https://vidyart2.booru.org/index.php?page=post&s=view&id=39168",
25 | "#category": ("gelbooru_v01", "vidyart2", "post"),
26 | "#class" : gelbooru_v01.GelbooruV01PostExtractor,
27 | },
28 |
29 | )
30 |
--------------------------------------------------------------------------------
/test/results/vipr.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import imagehosts
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://vipr.im/kcd5jcuhgs3v.html",
13 | "#category": ("imagehost", "vipr", "image"),
14 | "#class" : imagehosts.ViprImageExtractor,
15 | "#sha1_url" : "88f6a3ecbf3356a11ae0868b518c60800e070202",
16 | "#sha1_metadata": "c432e8a1836b0d97045195b745731c2b1bb0e771",
17 | },
18 |
19 | )
20 |
--------------------------------------------------------------------------------
/test/results/visuabusters.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import szurubooru
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.visuabusters.com/booru/posts/query=mincy_mouse",
13 | "#category": ("szurubooru", "visuabusters", "tag"),
14 | "#class" : szurubooru.SzurubooruTagExtractor,
15 | "#pattern" : r"https://www\.visuabusters\.com/booru/data/posts/visuabusters_\d+_\w{16}\.\w+",
16 | "#count" : range(2, 5),
17 | },
18 |
19 | {
20 | "#url" : "https://www.visuabusters.com/booru/posts/query=",
21 | "#category": ("szurubooru", "visuabusters", "tag"),
22 | "#class" : szurubooru.SzurubooruTagExtractor,
23 | },
24 |
25 | {
26 | "#url" : "https://visuabusters.com/booru/posts",
27 | "#category": ("szurubooru", "visuabusters", "tag"),
28 | "#class" : szurubooru.SzurubooruTagExtractor,
29 | },
30 |
31 | {
32 | "#url" : "https://www.visuabusters.com/booru/post/2485",
33 | "#category": ("szurubooru", "visuabusters", "post"),
34 | "#class" : szurubooru.SzurubooruPostExtractor,
35 | "#urls" : "https://www.visuabusters.com/booru/data/posts/visuabusters_2485_ynmXFhNmBs3x0cCm.gif",
36 | "#sha1_content": "781fc0f063503d9d3f282558b9fcd69e37045e88",
37 | },
38 |
39 | )
40 |
--------------------------------------------------------------------------------
/test/results/wallpapercave.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wallpapercave
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://wallpapercave.com/w/wp10270355",
13 | "#category": ("", "wallpapercave", "image"),
14 | "#class" : wallpapercave.WallpapercaveImageExtractor,
15 | "#urls" : "https://wallpapercave.com/download/sekai-saikou-no-ansatsusha-isekai-kizoku-ni-tensei-suru-wallpapers-wp10270355",
16 | "#sha1_content": "58b088aaa1cf1a60e347015019eb0c5a22b263a6",
17 | },
18 |
19 | {
20 | "#url" : "https://wallpapercave.com/apple-wwdc-2024-wallpapers",
21 | "#comment" : "album listing",
22 | "#category": ("", "wallpapercave", "image"),
23 | "#class" : wallpapercave.WallpapercaveImageExtractor,
24 | "#archive" : False,
25 | "#urls" : [
26 | "https://wallpapercave.com/wp/wp13775438.jpg",
27 | "https://wallpapercave.com/wp/wp13775439.jpg",
28 | "https://wallpapercave.com/wp/wp13775440.jpg",
29 | "https://wallpapercave.com/wp/wp13775441.jpg",
30 | ],
31 | },
32 |
33 | )
34 |
--------------------------------------------------------------------------------
/test/results/webmshare.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import webmshare
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://webmshare.com/O9mWY",
13 | "#category": ("", "webmshare", "video"),
14 | "#class" : webmshare.WebmshareVideoExtractor,
15 |
16 | "date" : "dt:2022-12-04 00:00:00",
17 | "extension": "webm",
18 | "filename" : "O9mWY",
19 | "height" : 568,
20 | "id" : "O9mWY",
21 | "thumb" : "https://s1.webmshare.com/t/O9mWY.jpg",
22 | "title" : "Yeah buddy over here",
23 | "url" : "https://s1.webmshare.com/O9mWY.webm",
24 | "views" : int,
25 | "width" : 320,
26 | },
27 |
28 | {
29 | "#url" : "https://s1.webmshare.com/zBGAg.webm",
30 | "#category": ("", "webmshare", "video"),
31 | "#class" : webmshare.WebmshareVideoExtractor,
32 |
33 | "date" : "dt:2018-12-07 00:00:00",
34 | "height": 1080,
35 | "id" : "zBGAg",
36 | "thumb" : "https://s1.webmshare.com/t/zBGAg.jpg",
37 | "title" : "",
38 | "url" : "https://s1.webmshare.com/zBGAg.webm",
39 | "views" : int,
40 | "width" : 1920,
41 | },
42 |
43 | {
44 | "#url" : "https://webmshare.com/play/zBGAg",
45 | "#category": ("", "webmshare", "video"),
46 | "#class" : webmshare.WebmshareVideoExtractor,
47 | },
48 |
49 | {
50 | "#url" : "https://webmshare.com/download-webm/zBGAg",
51 | "#category": ("", "webmshare", "video"),
52 | "#class" : webmshare.WebmshareVideoExtractor,
53 | },
54 |
55 | )
56 |
--------------------------------------------------------------------------------
/test/results/wikibooks.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikibooks.org/wiki/Title",
13 | "#category": ("wikimedia", "wikibooks", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikibooks.org/wiki/Category:Title",
19 | "#category": ("wikimedia", "wikibooks", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/wikidata.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikidata.org/wiki/Title",
13 | "#category": ("wikimedia", "wikidata", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikidata.org/wiki/Category:Title",
19 | "#category": ("wikimedia", "wikidata", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/wikifeet.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikifeet
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikifeet.com/Madison_Beer",
13 | "#category": ("", "wikifeet", "gallery"),
14 | "#class" : wikifeet.WikifeetGalleryExtractor,
15 | "#pattern" : r"https://pics\.wikifeet\.com/Madison_Beer-Feet-\d+\.jpg",
16 | "#count" : ">= 352",
17 |
18 | "celeb" : "Madison_Beer",
19 | "celebrity" : "Madison Beer",
20 | "birthday" : "dt:1999-03-05 00:00:00",
21 | "birthplace": "United States",
22 | "rating" : float,
23 | "pid" : int,
24 | "width" : int,
25 | "height" : int,
26 | "shoesize" : r"re:\d+",
27 | "type" : "women",
28 | "tags" : list,
29 | },
30 |
31 | {
32 | "#url" : "https://men.wikifeet.com/Chris_Hemsworth",
33 | "#category": ("", "wikifeet", "gallery"),
34 | "#class" : wikifeet.WikifeetGalleryExtractor,
35 | "#pattern" : r"https://pics\.wikifeet\.com/Chris_Hemsworth-Feet-\d+\.jpg",
36 | "#count" : ">= 860",
37 |
38 | "celeb" : "Chris_Hemsworth",
39 | "celebrity" : "Chris Hemsworth",
40 | "birthday" : "dt:1983-08-11 00:00:00",
41 | "birthplace": "Australia",
42 | "rating" : float,
43 | "pid" : int,
44 | "width" : int,
45 | "height" : int,
46 | "shoesize" : "22",
47 | "type" : "men",
48 | "tags" : list,
49 | },
50 |
51 | )
52 |
--------------------------------------------------------------------------------
/test/results/wikifeetx.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikifeet
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikifeetx.com/Tifa_Quinn",
13 | "#category": ("", "wikifeetx", "gallery"),
14 | "#class" : wikifeet.WikifeetGalleryExtractor,
15 | "#pattern" : r"https://pics\.wikifeet\.com/Tifa_Quinn-Feet-\d+\.jpg",
16 | "#count" : ">= 9",
17 |
18 | "celeb" : "Tifa_Quinn",
19 | "celebrity" : "Tifa Quinn",
20 | "birthday" : "",
21 | "birthplace": "United States",
22 | "rating" : float,
23 | "pid" : int,
24 | "width" : int,
25 | "height" : int,
26 | "shoesize" : "5",
27 | "type" : "women",
28 | "tags" : list,
29 | },
30 |
31 | )
32 |
--------------------------------------------------------------------------------
/test/results/wikigg.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wiki.gg/wiki/Title",
13 | "#comment" : "for scripts/supportedsites.py",
14 | "#category": ("wikimedia", "wikigg-www", "article"),
15 | "#class" : wikimedia.WikimediaArticleExtractor,
16 | },
17 |
18 | {
19 | "#url" : "https://hearthstone.wiki.gg/wiki/Flame_Juggler",
20 | "#category": ("wikimedia", "wikigg-hearthstone", "article"),
21 | "#class" : wikimedia.WikimediaArticleExtractor,
22 | },
23 |
24 | {
25 | "#url" : "https://terraria.wiki.gg/de/wiki/Golem",
26 | "#comment" : "non-English language prefix (#6370)",
27 | "#category": ("wikimedia", "wikigg-terraria", "article"),
28 | "#class" : wikimedia.WikimediaArticleExtractor,
29 | "#count" : "> 45",
30 | "#archive" : False,
31 | },
32 |
33 | )
34 |
--------------------------------------------------------------------------------
/test/results/wikinews.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikinews.org/wiki/Title",
13 | "#category": ("wikimedia", "wikinews", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikinews.org/wiki/Category:Title",
19 | "#category": ("wikimedia", "wikinews", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/wikipedia.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikipedia.org/wiki/Title",
13 | "#category": ("wikimedia", "wikipedia", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikipedia.org/wiki/Athena",
19 | "#category": ("wikimedia", "wikipedia", "article"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | "#pattern" : r"https://upload.wikimedia.org/wikipedia/.+",
22 | "#count" : range(50, 100),
23 |
24 | "bitdepth" : int,
25 | "canonicaltitle": str,
26 | "comment" : str,
27 | "commonmetadata": dict,
28 | "date" : "type:datetime",
29 | "descriptionshorturl": str,
30 | "descriptionurl": str,
31 | "extension" : str,
32 | "extmetadata" : dict,
33 | "filename" : str,
34 | "height" : int,
35 | "metadata" : dict,
36 | "mime" : r"re:image/\w+",
37 | "page" : "Athena",
38 | "sha1" : r"re:^[0-9a-f]{40}$",
39 | "size" : int,
40 | "timestamp" : str,
41 | "url" : str,
42 | "user" : str,
43 | "userid" : int,
44 | "width" : int,
45 | },
46 |
47 | {
48 | "#url" : "https://en.wikipedia.org/wiki/Category:Physics",
49 | "#category": ("wikimedia", "wikipedia", "category"),
50 | "#class" : wikimedia.WikimediaArticleExtractor,
51 | },
52 |
53 | {
54 | "#url" : "https://en.wikipedia.org",
55 | "#category": ("wikimedia", "wikipedia", "wiki"),
56 | "#class" : wikimedia.WikimediaWikiExtractor,
57 | "#range" : "1-10",
58 | "#count" : 10,
59 | },
60 |
61 | )
62 |
--------------------------------------------------------------------------------
/test/results/wikiquote.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikiquote.org/wiki/Title",
13 | "#category": ("wikimedia", "wikiquote", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikiquote.org/wiki/Category:Title",
19 | "#category": ("wikimedia", "wikiquote", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/wikisource.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikisource.org/wiki/Title",
13 | "#category": ("wikimedia", "wikisource", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikisource.org/wiki/Category:Title",
19 | "#category": ("wikimedia", "wikisource", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/wikispecies.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://species.wikimedia.org/wiki/Geranospiza",
13 | "#category": ("wikimedia", "wikispecies", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | "#urls" : "https://upload.wikimedia.org/wikipedia/commons/0/01/Geranospiza_caerulescens.jpg",
16 | "#sha1_content": "3a17c14b15489928e4154f826af1c42afb5a523e",
17 | },
18 |
19 | {
20 | "#url" : "https://species.wikimedia.org/wiki/Category:Names",
21 | "#category": ("wikimedia", "wikispecies", "category"),
22 | "#class" : wikimedia.WikimediaArticleExtractor,
23 | },
24 |
25 | )
26 |
--------------------------------------------------------------------------------
/test/results/wikiversity.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikiversity.org/wiki/Title",
13 | "#category": ("wikimedia", "wikiversity", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikiversity.org/wiki/Category:Title",
19 | "#category": ("wikimedia", "wikiversity", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/wikivoyage.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wikivoyage.org/wiki/Title",
13 | "#category": ("wikimedia", "wikivoyage", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wikivoyage.org/wiki/Category:Title",
19 | "#category": ("wikimedia", "wikivoyage", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/wiktionary.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import wikimedia
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.wiktionary.org/wiki/Word",
13 | "#category": ("wikimedia", "wiktionary", "article"),
14 | "#class" : wikimedia.WikimediaArticleExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://en.wiktionary.org/wiki/Category:Words",
19 | "#category": ("wikimedia", "wiktionary", "category"),
20 | "#class" : wikimedia.WikimediaArticleExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/windsorstore.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import shopify
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://www.windsorstore.com/collections/dresses-ball-gowns",
13 | "#category": ("shopify", "windsorstore", "collection"),
14 | "#class" : shopify.ShopifyCollectionExtractor,
15 | },
16 |
17 | {
18 | "#url" : "https://www.windsorstore.com/collections/accessories-belts/products/rhine-buckle-dbl-o-ring-pu-strap-belt-073010158001",
19 | "#category": ("shopify", "windsorstore", "product"),
20 | "#class" : shopify.ShopifyProductExtractor,
21 | },
22 |
23 | )
24 |
--------------------------------------------------------------------------------
/test/results/xbooru.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import gelbooru_v02
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "https://xbooru.com/index.php?page=post&s=list&tags=konoyan",
13 | "#category": ("gelbooru_v02", "xbooru", "tag"),
14 | "#class" : gelbooru_v02.GelbooruV02TagExtractor,
15 | "#count" : range(28, 40),
16 | },
17 |
18 | {
19 | "#url" : "https://xbooru.com/index.php?page=pool&s=show&id=757",
20 | "#category": ("gelbooru_v02", "xbooru", "pool"),
21 | "#class" : gelbooru_v02.GelbooruV02PoolExtractor,
22 | "#urls": (
23 | "https://img.xbooru.com/images/154/aeca160f8c7131f6a93033adac5416d7.jpeg",
24 | "https://img.xbooru.com/images/278/6185a8a71547568020e45e8319c02978.jpeg",
25 | "https://img.xbooru.com/images/524/0fc2b1e2e3cc8be259e9712ca3f48b0b.jpeg",
26 | "https://img.xbooru.com/images/253/74412b59a60fac5040c6cfe8efe7a625.jpeg",
27 | "https://img.xbooru.com/images/590/2eacd900958a467fb053b8a92145b55b.jpeg",
28 | ),
29 | },
30 |
31 | {
32 | "#url" : "https://xbooru.com/index.php?page=favorites&s=view&id=45206",
33 | "#category": ("gelbooru_v02", "xbooru", "favorite"),
34 | "#class" : gelbooru_v02.GelbooruV02FavoriteExtractor,
35 | "#count" : 4,
36 | },
37 |
38 | {
39 | "#url" : "https://xbooru.com/index.php?page=post&s=view&id=1025649",
40 | "#category": ("gelbooru_v02", "xbooru", "post"),
41 | "#class" : gelbooru_v02.GelbooruV02PostExtractor,
42 | "#pattern" : r"https://img\.xbooru\.com/images/444/f3eda549ad8b9db244ac335c7406c92f\.jpeg",
43 | "#sha1_content": "086668afd445438d491ecc11cee3ac69b4d65530",
44 | },
45 |
46 | )
47 |
--------------------------------------------------------------------------------
/test/results/ytdl.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # This program is free software; you can redistribute it and/or modify
4 | # it under the terms of the GNU General Public License version 2 as
5 | # published by the Free Software Foundation.
6 |
7 | from gallery_dl.extractor import ytdl
8 |
9 |
10 | __tests__ = (
11 | {
12 | "#url" : "ytdl:https://www.youtube.com/watch?v=BaW_jenozKc&t=1s&end=9",
13 | "#category": ("", "ytdl", "Youtube"),
14 | "#class" : ytdl.YoutubeDLExtractor,
15 | },
16 |
17 | )
18 |
--------------------------------------------------------------------------------