112 lines
3.8 KiB
Python
112 lines
3.8 KiB
Python
|
import json
|
||
|
import traceback
|
||
|
import requests
|
||
|
import webbrowser
|
||
|
import random
|
||
|
import asyncio
|
||
|
import xml.etree.ElementTree as ET
|
||
|
|
||
|
async def booruGet(booru, tags, page=None, limit=30):
|
||
|
|
||
|
try:
|
||
|
|
||
|
booru_list = ["realbooru", "yandere", "danbooru", "konachan", "rule34"]
|
||
|
real_list = ["realbooru"]
|
||
|
anime_list = ["yandere", "danbooru", "konachan"]
|
||
|
|
||
|
thumbnail = ""
|
||
|
|
||
|
if page is None:
|
||
|
page = random.randint(0, 30)
|
||
|
|
||
|
if booru == "2d":
|
||
|
booru = random.choice(anime_list)
|
||
|
elif booru == "3d":
|
||
|
booru = random.choice(real_list)
|
||
|
elif booru == "random" or booru not in booru_list:
|
||
|
booru = random.choice(booru_list)
|
||
|
|
||
|
if booru == "realbooru":
|
||
|
|
||
|
url = f"https://realbooru.com/index.php?page=dapi&s=post&q=index&limit={limit}&pid={page}&tags={tags}"
|
||
|
base_url = "https://realbooru.com/images/"
|
||
|
thumbnail_url = "https://realbooru.com/thumbnails/"
|
||
|
|
||
|
post = random.choice(ET.fromstring(requests.get(url).text))
|
||
|
file_format = post.get("file_url").split(".")[-1]
|
||
|
thumb_format = post.get("preview_url").split(".")[-1]
|
||
|
md5 = post.get("md5")
|
||
|
output = f"{md5[:2]}/{md5[2:4]}/{md5}.{file_format}"
|
||
|
output_thumb = f"{md5[:2]}/{md5[2:4]}/thumbnail_{md5}.{thumb_format}"
|
||
|
|
||
|
image = source = base_url+output
|
||
|
thumbnail = thumbnail_url+output_thumb
|
||
|
|
||
|
tags = post.get("tags")
|
||
|
|
||
|
elif booru == "yandere":
|
||
|
|
||
|
url = f"https://yande.re/post.json?limit={limit}&tags={tags}&page={page}"
|
||
|
output = random.choice(json.loads(requests.get(url).text))
|
||
|
|
||
|
image = output["sample_url"]
|
||
|
source = output["file_url"]
|
||
|
|
||
|
tags = output["tags"]
|
||
|
|
||
|
elif booru == "danbooru":
|
||
|
|
||
|
url = f"https://danbooru.donmai.us/posts.json?&page={page}&tags={tags}&limit={limit}"
|
||
|
output = random.choice(json.loads(requests.get(url).text))
|
||
|
|
||
|
image = output["large_file_url"]
|
||
|
source = output["file_url"]
|
||
|
|
||
|
tags = output["tag_string"]
|
||
|
|
||
|
elif booru == "konachan":
|
||
|
|
||
|
url = f"https://konachan.com/post.json?&page={page}&tags={tags}&limit={limit}"
|
||
|
output = random.choice(json.loads(requests.get(url).text))
|
||
|
|
||
|
image = output["sample_url"]
|
||
|
source = output["file_url"]
|
||
|
|
||
|
tags = output["tags"]
|
||
|
|
||
|
elif booru == "rule34":
|
||
|
|
||
|
url = f"https://api.rule34.xxx/index.php?page=dapi&s=post&q=index&limit={limit}&pid={page}&tags={tags}&json=1"
|
||
|
print(url)
|
||
|
print(requests.get(url).json)
|
||
|
output = random.choice(json.loads(requests.get(url).json))
|
||
|
|
||
|
image = output["sample_url"]
|
||
|
source = output["file_url"]
|
||
|
|
||
|
tags = output["tags"]
|
||
|
|
||
|
if (".jpg" in image) or (".png" in image) or (".webp" in image) or (".jpeg" in image) or (".gif" in image):
|
||
|
kind = "image"
|
||
|
else:
|
||
|
kind = "video"
|
||
|
|
||
|
return {"image": image, "thumbnail": thumbnail, "source": source, "kind": kind, "tags": tags.strip(), "error": ""}
|
||
|
|
||
|
except IndexError:
|
||
|
|
||
|
return {"image": "http://res.end-play.xyz/discord/invalid.jpg", "thumbnail": "", "source": "N/A", "kind": "image", "tags": "", "error": "Found page with such tags is empty.\nDecrease images limit or page number and try again."}
|
||
|
|
||
|
except Exception as exp:
|
||
|
|
||
|
return {"image": "http://res.end-play.xyz/discord/invalid.jpg", "thumbnail": "", "source": "N/A", "kind": "image", "tags": "", "error": str(traceback.format_exc())}
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
|
||
|
booru = input("Input booru: ")
|
||
|
tags = input("Input tags: ")
|
||
|
|
||
|
url = asyncio.run(booruGet(booru, tags))
|
||
|
print(url)
|
||
|
webbrowser.open(url["image"])
|