/pppixiv

A tool to download pixiv illustrations

Primary LanguagePythonApache License 2.0Apache-2.0

pppixiv

build image issue license last_commit

Get links to pixiv illustrations and links to download illustrations via our api. Please note that this project is a subproject of tg-dumb-bot. Since the current api is designed for tg-dumb-bot, you don't have easy access to the links we return (telegram comes with previews). For example, you need to call the pixivAPI variable inside our service to use the download link. Also you can modify our source code directly. We will provide more features for this project later.

Usage

For users in mainland China, please enable vpn service.

Build with Docker

Build your docker image and run it.

# build locally
$ docker build . -t pixiv
# run on detach 
# -v will specify the folder where the illustrations will be downloaded
$ docker run -d -p 3333:5000 \
             -e username="your_pixiv_accout_name" \
             -e password="your_pixiv_account_password" \
             -v /Your/local/path/dir:/APP/Illusts pixiv

If you successfully run this image up, you can run the test.py file to see the output. The first time will be slower because you have to get the pixiv token.

$ python3 test.py # Make sure you have the requests library installed

Use DockerHub Image

Pull our built image directly.

$ docker pull godmountain/pppixiv:latest
$ docker run -d -p 3333:5000 \
             -e username="your_pixiv_accout_name" \
             -e password="your_pixiv_account_password" \
             -v /Your/local/path/dir:/APP/Illusts godmountain/pppixiv:latest

Run outside the docker container

Create .env file and Illusts folders.

.
β”œβ”€β”€ .env πŸ‘ˆπŸ» Paste your pixiv account and password into the .env file.
β”œβ”€β”€ Illusts πŸ‘ˆπŸ» Create the Illusts folder in the root directory of the project.
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ LICENSE
β”œβ”€β”€ README.md
β”œβ”€β”€ app.py
β”œβ”€β”€ image
β”œβ”€β”€ main.py
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ router
β”œβ”€β”€ run.sh
β”œβ”€β”€ services
β”œβ”€β”€ static
β”œβ”€β”€ templates
└── test.py

.env should like πŸ‘‡πŸ»

username=xxx
password=xxx
port=xxx

Add chromedriver to your environment variable. (Notice : The chromedriver version should be the same as the chrome browser you downloaded.) Please google how to set chromedriver environment variables by yourself. Then execute the following two commands after you have set up chromedriver.

$ pip3 install -r requirements.txt
$ python3 main.py

Solution for get token failure

If you encounter this problem below. πŸ‘‡πŸ»

DEBUG in main: =====================================================================================
DEBUG in main: Authorized on pixiv account your_account_name. Please wait for authentication.
DEBUG in pixiv: getToken error!
DEBUG in pixiv: getToken error!
DEBUG in pixiv: getToken error!
DEBUG in pixiv: getToken error!
DEBUG in pixiv: getToken error!
DEBUG in main: Failed to get token, please check if you are blocked by pixiv or possibly because of reCAPTCHA v2 detection.
DEBUG in main: Application ends gracefully.
DEBUG in main: =====================================================================================

You can try setting headless to False and then manually validate reCAPTCHA. Please note that when you use this approach, make sure you are running the pppixiv outside a docker container.

Visit our dashboard

Visithttp://ip:port/dashboard.You will see πŸ‘‡πŸ» Then enter the uid and click the search button, all the illustrations of the user with the specified uid will be searched and displayed on the right side.

Click the download button and all illustrations will be downloaded. If the download is successful, the gray dot on the right will turn green. Failed downloads will turn red.

After the illustration is downloaded successfully you will see the following message.

Click the Preview button to preview the illustration you just downloaded.

The artist in this example is referenced from 仁井学.

Api for accessing our pixiv services

Visithttp://ip:port/getIllustListByUidand post data {"uid":"xxx"}.You will get πŸ‘‡πŸ»

status : 0 stands for failure while 1 stands for success
message : error message
list : returned data

{
  "status": 1,
  "message": "message",
  "list": [
    {"title": "title1", "url": "preview_url", "download_url":  "download_url"},
    {},
    {},
  ]
}

Visithttp://ip:port/getIllustRankingand post data {"mode":"xxx"}. (We have mode: day, week, month, day_male, day_female, week_original, week_rookie, day_manga) You will get πŸ‘‡πŸ»

{
  "status": 1,
  "message": "message",
  "list": [
    {"title": "title1", "url": "preview_url", "download_url":  "download_url"},
    {},
    {},
  ]
}

Visithttp://ip:port/getTrendingTags. You will get πŸ‘‡πŸ»

{
  "status": 1,
  "message": "message",
  "list": [
    {"tag": "JP version(Unicode)", "translated_tag": "EN version"},
    {},
    {},
  ]
}

Visithttp://ip:port/getIllustDownloadUrland post data {"illust_id":"xxx"}. You will get πŸ‘‡πŸ»

{
  "status": 1,
  "message": "message",
  "list": [
    {"title": "title", "url": "preview_url", "download_url":  "download_url"},
  ]
}

Contributing

Contributions must be available on a separately named branch based on the latest version of the main branch.