python-scripts/scripts/Wallpaper Engine/wallhaven-dl.py

122 lines
4.1 KiB
Python
Raw Permalink Normal View History

2022-10-09 12:56:01 +00:00
# Hey there! I got tired of downloading wallpapers manually so here it is.
import os
import getpass
import re
import requests
import tqdm
import time
import urllib
import json
os.makedirs('Wallhaven', exist_ok=True)
BASEURL="https://wallhaven.cc/api/v1/w/"
cookies=dict()
global APIKEY
APIKEY = ""
def category():
global BASEURL
print('''
****************************************************************
Category Codes
all - Every wallpaper.
general - For 'general' wallpapers only.
anime - For 'Anime' Wallpapers only.
people - For 'people' wallapapers only.
ga - For 'General' and 'Anime' wallapapers only.
gp - For 'General' and 'People' wallpapers only.
****************************************************************
''')
ccode = input('Enter Category: ').lower()
ctags = {'all':'111', 'anime':'010', 'general':'100', 'people':'001', 'ga':'110', 'gp':'101' }
ctag = ctags[ccode]
print('''
****************************************************************
Purity Codes
sfw - For 'Safe For Work'
sketchy - For 'Sketchy'
nsfw - For 'Not Safe For Work'
ws - For 'SFW' and 'Sketchy'
wn - For 'SFW' and 'NSFW'
sn - For 'Sketchy' and 'NSFW'
all - For 'SFW', 'Sketchy' and 'NSFW'
****************************************************************
''')
pcode = input('Enter Purity: ')
ptags = {'sfw':'100', 'sketchy':'010', 'nsfw':'001', 'ws':'110', 'wn':'101', 'sn':'011', 'all':'111'}
ptag = ptags[pcode]
BASEURL = 'https://wallhaven.cc/api/v1/search?apikey=' + APIKEY + "&categories=" +\
ctag + '&purity=' + ptag + '&page='
def latest():
global BASEURL
print('Downloading latest')
topListRange = '1M'
BASEURL = 'https://wallhaven.cc/api/v1/search?apikey=' + APIKEY + '&topRange=' +\
topListRange + '&sorting=toplist&page='
def search():
global BASEURL
query = input('Enter search query: ')
BASEURL = 'https://wallhaven.cc/api/v1/search?apikey=' + APIKEY + '&q=' + \
urllib.parse.quote_plus(query) + '&page='
def downloadPage(pageId, totalImage):
url = BASEURL + str(pageId)
urlreq = requests.get(url, cookies=cookies)
pagesImages = json.loads(urlreq.content);
pageData = pagesImages["data"]
for i in range(len(pageData)):
currentImage = (((pageId - 1) * 24) + (i + 1))
url = pageData[i]["path"]
filename = os.path.basename(url)
osPath = os.path.join('Wallhaven', filename)
if not os.path.exists(osPath):
imgreq = requests.get(url, cookies=cookies)
if imgreq.status_code == 200:
print("Downloading : %s - %s / %s" % (filename, currentImage , totalImage))
with open(osPath, 'ab') as imageFile:
for chunk in imgreq.iter_content(1024):
imageFile.write(chunk)
elif (imgreq.status_code != 403 and imgreq.status_code != 404):
print("Unable to download %s - %s / %s" % (filename, currentImage , totalImage))
else:
print("%s already exist - %s / %s" % (filename, currentImage , totalImage))
def main():
Choice = input('''Choose how you want to download the image:
Enter "category" for downloading wallpapers from specified categories
Enter "latest" for downloading latest wallpapers
Enter "search" for downloading wallpapers from search
Enter choice: ''').lower()
while Choice not in ['category', 'latest', 'search']:
if Choice != None:
print('You entered an incorrect value.')
choice = input('Enter choice: ')
if Choice == 'category':
category()
elif Choice == 'latest':
latest()
elif Choice == 'search':
search()
pgid = int(input('How Many pages you want to Download: '))
totalImageToDownload = str(24 * pgid)
print('Number of Wallpapers to Download: ' + totalImageToDownload)
for j in range(1, pgid + 1):
downloadPage(j, totalImageToDownload)
if __name__ == '__main__':
main()