Module booru.client.paheal
Expand source code
import json
import re
import aiohttp
from typing import Union
from ..utils.constant import Api, better_object
from random import shuffle, randint
from xmltodict import parse
Booru = Api()
class Paheal(object):
"""Paheal Client
Methods
-------
search : function
Search and gets images from paheal.
search_image : function
Search and gets images from paheal, but only returns image.
"""
def __init__(self, api_key: str = "", user_id: str = ""):
"""Initializes paheal.
Parameters
----------
api_key : str
Your API Key which is accessible within your account options page
user_id : str
Your user ID, which is accessible on the account options/profile page.
"""
if api_key and user_id == "":
self.api_key = None
self.user_id = None
else:
self.api_key = api_key
self.user_id = user_id
self.specs = {"api_key": self.api_key, "user_id": self.user_id}
async def search(
self,
query: str,
limit: int = 100,
page: int = 1,
random: bool = True,
gacha: bool = False,
) -> Union[aiohttp.ClientResponse, str]:
"""Search and gets images from paheal.
Parameters
----------
query : str
The tags to search for.
limit : int
The limit of images to return.
page : int
The number of desired page
random : bool
Shuffle the whole dict, default is True.
gacha : bool
Get random single object, limit property will be ignored.
Returns
-------
dict
The json object returned by paheal.
"""
if limit > 1000:
raise ValueError(Booru.error_handling_limit)
self.tags = query
self.specs["tags"] = self.tags
self.specs["limit"] = limit
self.specs["page"] = page
async with aiohttp.ClientSession() as session:
async with session.get(Booru.paheal, params=self.specs) as resp:
self.data = await resp.text()
data_dict = parse(self.data)
unsolved = json.dumps(data_dict)
self.final = json.loads(unsolved)
if "tag" not in self.final["posts"]:
raise ValueError(Booru.error_handling_null)
self.not_random = self.final["posts"]["tag"]
shuffle(self.not_random)
try:
if gacha:
return better_object(
self.final["posts"]["tag"][
randint(0, len(self.final["posts"]["tag"]))
]
)
elif random:
return better_object(self.final["posts"]["tag"])
else:
return better_object(self.not_random)
except Exception as e:
raise Exception(f"Failed to get data: {e}")
async def search_image(
self, query: str, limit: int = 100, page: int = 1
) -> Union[aiohttp.ClientResponse, str]:
"""Gets images, meant just image urls from paheal.
Parameters
----------
query : str
The tags to search for.
limit : int
The limit of images to return.
page : int
The number of desired page
Returns
-------
list
The list of image urls.
"""
if limit > 1000:
raise ValueError(Booru.error_handling_limit)
self.tags = query
self.specs["tags"] = self.tags
self.specs["limit"] = limit
self.specs["page"] = page
try:
async with aiohttp.ClientSession() as session:
async with session.get(Booru.paheal, params=self.specs) as resp:
self.data = await resp.text()
data_dict = parse(self.data)
unsolved = json.dumps(data_dict)
self.final = json.loads(unsolved)
abc_kontol = self.final["posts"]["tag"]
## extract all image urls
self.image_urls = []
for i in abc_kontol: # paheal emang ngentot
self.image_urls.append(i["@file_url"])
shuffle(self.image_urls)
return better_object(self.image_urls)
except Exception as e:
raise Exception(f"Failed to get data: {e}")
Classes
class Paheal (api_key: str = '', user_id: str = '')
-
Paheal Client
Methods
search : function Search and gets images from paheal.
search_image : function Search and gets images from paheal, but only returns image.
Initializes paheal.
Parameters
api_key
:str
- Your API Key which is accessible within your account options page
user_id
:str
- Your user ID, which is accessible on the account options/profile page.
Expand source code
class Paheal(object): """Paheal Client Methods ------- search : function Search and gets images from paheal. search_image : function Search and gets images from paheal, but only returns image. """ def __init__(self, api_key: str = "", user_id: str = ""): """Initializes paheal. Parameters ---------- api_key : str Your API Key which is accessible within your account options page user_id : str Your user ID, which is accessible on the account options/profile page. """ if api_key and user_id == "": self.api_key = None self.user_id = None else: self.api_key = api_key self.user_id = user_id self.specs = {"api_key": self.api_key, "user_id": self.user_id} async def search( self, query: str, limit: int = 100, page: int = 1, random: bool = True, gacha: bool = False, ) -> Union[aiohttp.ClientResponse, str]: """Search and gets images from paheal. Parameters ---------- query : str The tags to search for. limit : int The limit of images to return. page : int The number of desired page random : bool Shuffle the whole dict, default is True. gacha : bool Get random single object, limit property will be ignored. Returns ------- dict The json object returned by paheal. """ if limit > 1000: raise ValueError(Booru.error_handling_limit) self.tags = query self.specs["tags"] = self.tags self.specs["limit"] = limit self.specs["page"] = page async with aiohttp.ClientSession() as session: async with session.get(Booru.paheal, params=self.specs) as resp: self.data = await resp.text() data_dict = parse(self.data) unsolved = json.dumps(data_dict) self.final = json.loads(unsolved) if "tag" not in self.final["posts"]: raise ValueError(Booru.error_handling_null) self.not_random = self.final["posts"]["tag"] shuffle(self.not_random) try: if gacha: return better_object( self.final["posts"]["tag"][ randint(0, len(self.final["posts"]["tag"])) ] ) elif random: return better_object(self.final["posts"]["tag"]) else: return better_object(self.not_random) except Exception as e: raise Exception(f"Failed to get data: {e}") async def search_image( self, query: str, limit: int = 100, page: int = 1 ) -> Union[aiohttp.ClientResponse, str]: """Gets images, meant just image urls from paheal. Parameters ---------- query : str The tags to search for. limit : int The limit of images to return. page : int The number of desired page Returns ------- list The list of image urls. """ if limit > 1000: raise ValueError(Booru.error_handling_limit) self.tags = query self.specs["tags"] = self.tags self.specs["limit"] = limit self.specs["page"] = page try: async with aiohttp.ClientSession() as session: async with session.get(Booru.paheal, params=self.specs) as resp: self.data = await resp.text() data_dict = parse(self.data) unsolved = json.dumps(data_dict) self.final = json.loads(unsolved) abc_kontol = self.final["posts"]["tag"] ## extract all image urls self.image_urls = [] for i in abc_kontol: # paheal emang ngentot self.image_urls.append(i["@file_url"]) shuffle(self.image_urls) return better_object(self.image_urls) except Exception as e: raise Exception(f"Failed to get data: {e}")
Methods
async def search(self, query: str, limit: int = 100, page: int = 1, random: bool = True, gacha: bool = False) ‑> Union[aiohttp.client_reqrep.ClientResponse, str]
-
Search and gets images from paheal.
Parameters
query
:str
- The tags to search for.
limit
:int
- The limit of images to return.
page
:int
- The number of desired page
random
:bool
- Shuffle the whole dict, default is True.
gacha
:bool
- Get random single object, limit property will be ignored.
Returns
dict
- The json object returned by paheal.
Expand source code
async def search( self, query: str, limit: int = 100, page: int = 1, random: bool = True, gacha: bool = False, ) -> Union[aiohttp.ClientResponse, str]: """Search and gets images from paheal. Parameters ---------- query : str The tags to search for. limit : int The limit of images to return. page : int The number of desired page random : bool Shuffle the whole dict, default is True. gacha : bool Get random single object, limit property will be ignored. Returns ------- dict The json object returned by paheal. """ if limit > 1000: raise ValueError(Booru.error_handling_limit) self.tags = query self.specs["tags"] = self.tags self.specs["limit"] = limit self.specs["page"] = page async with aiohttp.ClientSession() as session: async with session.get(Booru.paheal, params=self.specs) as resp: self.data = await resp.text() data_dict = parse(self.data) unsolved = json.dumps(data_dict) self.final = json.loads(unsolved) if "tag" not in self.final["posts"]: raise ValueError(Booru.error_handling_null) self.not_random = self.final["posts"]["tag"] shuffle(self.not_random) try: if gacha: return better_object( self.final["posts"]["tag"][ randint(0, len(self.final["posts"]["tag"])) ] ) elif random: return better_object(self.final["posts"]["tag"]) else: return better_object(self.not_random) except Exception as e: raise Exception(f"Failed to get data: {e}")
async def search_image(self, query: str, limit: int = 100, page: int = 1) ‑> Union[aiohttp.client_reqrep.ClientResponse, str]
-
Gets images, meant just image urls from paheal.
Parameters
query
:str
- The tags to search for.
limit
:int
- The limit of images to return.
page
:int
- The number of desired page
Returns
list
- The list of image urls.
Expand source code
async def search_image( self, query: str, limit: int = 100, page: int = 1 ) -> Union[aiohttp.ClientResponse, str]: """Gets images, meant just image urls from paheal. Parameters ---------- query : str The tags to search for. limit : int The limit of images to return. page : int The number of desired page Returns ------- list The list of image urls. """ if limit > 1000: raise ValueError(Booru.error_handling_limit) self.tags = query self.specs["tags"] = self.tags self.specs["limit"] = limit self.specs["page"] = page try: async with aiohttp.ClientSession() as session: async with session.get(Booru.paheal, params=self.specs) as resp: self.data = await resp.text() data_dict = parse(self.data) unsolved = json.dumps(data_dict) self.final = json.loads(unsolved) abc_kontol = self.final["posts"]["tag"] ## extract all image urls self.image_urls = [] for i in abc_kontol: # paheal emang ngentot self.image_urls.append(i["@file_url"]) shuffle(self.image_urls) return better_object(self.image_urls) except Exception as e: raise Exception(f"Failed to get data: {e}")