forked from Shinonome/dots-hyprland
140 lines
3.8 KiB
Python
Executable File
140 lines
3.8 KiB
Python
Executable File
#!/usr/bin/python3
|
||
import requests
|
||
import json
|
||
import os
|
||
import sys
|
||
from PIL import Image
|
||
|
||
def printhelp():
|
||
print('''
|
||
Usage: waifu-get.py [OPTION]... [TAG]...
|
||
|
||
Options:
|
||
--segs\tForce NSFW images
|
||
--im\tUse waifu.im API. You can use many tags
|
||
--pics\tUse waifu.pics API. Use 1 tag only.
|
||
--nekos\tUse nekos.life (old) API. No tags.
|
||
|
||
Tags:
|
||
waifu.im (type):
|
||
maid waifu marin-kitagawa mori-calliope raiden-shogun oppai selfies uniform
|
||
waifu.im (nsfw tags):
|
||
ecchi hentai ero ass paizuri oral milf
|
||
''')
|
||
exit()
|
||
|
||
###### help ######
|
||
if len(sys.argv) == 1:
|
||
printhelp()
|
||
|
||
###### variables ######
|
||
api_name = {'im': 'waifu.im', 'nekos': 'nekos.life', 'pics': 'waifu.pics', 'moe': 'nekos.moe'}
|
||
debug = False
|
||
mode = 'im' # either 'im' (waifu.im), 'nekos' (nekos.life), or 'pics' (waifu.pics)
|
||
taglist = []
|
||
segs = False
|
||
output = {}
|
||
headers = {}
|
||
|
||
###### arguments ######
|
||
for i in range(1, len(sys.argv)): # Add tags
|
||
if sys.argv[i] == '--debug':
|
||
debug = True
|
||
elif sys.argv[i] == '--segs':
|
||
segs = True
|
||
elif sys.argv[i] == '--im':
|
||
mode = 'im'
|
||
elif sys.argv[i] == '--neko':
|
||
mode = 'nekos'
|
||
elif sys.argv[i] == '--pics':
|
||
mode = 'pics'
|
||
elif sys.argv[i] == '--moe':
|
||
mode = 'moe'
|
||
elif sys.argv[i] == '--help' or sys.argv[i] == '-h':
|
||
printhelp()
|
||
else:
|
||
taglist.append(sys.argv[i])
|
||
|
||
###### prepare request ######
|
||
if mode == 'im':
|
||
url = 'https://api.waifu.im/search'
|
||
headers = {'Accept-Version': 'v5'}
|
||
|
||
elif mode == 'nekos':
|
||
if segs:
|
||
url = 'https://nekos.life/api/lewd/neko'
|
||
else:
|
||
url = 'https://nekos.life/api/neko'
|
||
|
||
elif mode == 'pics':
|
||
if segs:
|
||
url = 'https://api.waifu.pics/nsfw/'
|
||
else:
|
||
url = 'https://api.waifu.pics/sfw/'
|
||
|
||
if len(taglist) > 0:
|
||
url += taglist[0]
|
||
else:
|
||
url += 'waifu'
|
||
|
||
elif mode == 'moe':
|
||
url = 'https://nekos.moe/api/v1/random/image'
|
||
if segs:
|
||
url += '?nsfw=true'
|
||
|
||
else: # default: waifu.im
|
||
url = 'https://api.waifu.im/search'
|
||
headers = {'Accept-Version': 'v5'}
|
||
|
||
|
||
params = {
|
||
'included_tags': taglist,
|
||
'height': '>=600',
|
||
'nsfw': segs
|
||
}
|
||
|
||
os.system('eww update rev_waifustatus=true')
|
||
os.system('eww update waifu_status=\'Requesting {0} API\''.format(api_name[mode]))
|
||
response = requests.get(url, params=params, headers=headers)
|
||
|
||
if debug:
|
||
print(json.dumps(response.json()))
|
||
exit()
|
||
|
||
###### processing ######
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
# Process the response data as needed
|
||
if mode == 'im':
|
||
output['link'] = data['images'][0]['url']
|
||
output['sauce'] = data['images'][0]['source']
|
||
elif mode == 'nekos':
|
||
output['link'] = data['neko']
|
||
output['sauce'] = data['neko']
|
||
elif mode == 'moe':
|
||
image_id = data['images'][0]['id']
|
||
output['link'] = str('https://nekos.moe/image/' + image_id)
|
||
output['sauce'] = str('https://nekos.moe/post/' + image_id)
|
||
elif mode == 'pics':
|
||
output['link'] = data['url']
|
||
output['sauce'] = data['url']
|
||
else: # default: waifu.im
|
||
output['link'] = data['images'][0]['url']
|
||
output['sauce'] = data['images'][0]['source']
|
||
|
||
os.system('eww update waifu_status=\'Downloading image\'')
|
||
os.system('wget -O "{0}" "{1}" -q –read-timeout=0.1'.format('eww_covers/waifu_tmp', output['link']))
|
||
os.system('eww update waifu=\'{"name":"eww_covers/waifu_loading", "size": [0, 100]}\'')
|
||
os.system('mv ./eww_covers/waifu_tmp ./eww_covers/waifu')
|
||
|
||
with Image.open('./eww_covers/waifu') as img:
|
||
output['size'] = img.size
|
||
output['path'] = 'eww_covers/waifu'
|
||
output['ext'] = str('.' + img.format.lower())
|
||
print(json.dumps(output))
|
||
|
||
os.system('eww update rev_waifustatus=false')
|
||
|
||
else:
|
||
print('Request failed with status code:', response.status_code)
|