diff --git a/scripts/Wallpaper Engine/requirements.txt b/scripts/Wallpaper Engine/requirements.txt new file mode 100644 index 0000000..5fee0d8 --- /dev/null +++ b/scripts/Wallpaper Engine/requirements.txt @@ -0,0 +1,5 @@ +beautifulsoup4==4.4.1 +bs4==0.0.1 +lxml==4.6.3 +requests==2.20.0 +tqdm==4.7.6 diff --git a/scripts/Wallpaper Engine/wallhaven-dl.py b/scripts/Wallpaper Engine/wallhaven-dl.py new file mode 100644 index 0000000..42b0341 --- /dev/null +++ b/scripts/Wallpaper Engine/wallhaven-dl.py @@ -0,0 +1,121 @@ +# 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()