Source code for retaggr.engines.danbooru

from retaggr.engines.base import Engine, ImageResult

# External modules
import asyncio
import requests as fuck_aiohttp
import functools

[docs]class Danbooru(Engine): """Reverse searches https://danbooru.donmai.us for images. This booru does not required images to be downloaded before searching. :param username: The danbooru username you wish to use. :type username: str :param api_key: A danbooru API key. You can obtain one from your profile. :type api_key: str :param min_score: Minimum search match percentage needed. :type min_score: float """ host = "https://danbooru.donmai.us" download_required = False def __init__(self, username, api_key, min_score): self.min_score = min_score self.username = username self.api_key = api_key
[docs] async def search_image(self, url): tags = [] source = [] rating = None iqdb_url = self.host + "/iqdb_queries.json" loop = asyncio.get_event_loop() r = await loop.run_in_executor(None, functools.partial(fuck_aiohttp.get, iqdb_url, params={"url":url}, auth=(self.username, self.api_key))) json = r.json() if 'success' in json: if not json['success']: # pragma: no cover return ImageResult(tags, source, rating) if len(json) > 0: if json[0]['score'] > self.min_score: tags = json[0]["post"]["tag_string"].split() source.append(json[0]["post"]["source"]) rating = json[0]["post"]["rating"] return ImageResult(tags, source, rating)