Source code for retaggr.engines.paheal
from retaggr.engines.base import Engine, ImageResult
from retaggr.errors import NotAvailableSearchException
# External imports
import hashlib
from retaggr.aiohttp_requests import requests
import xml.etree.ElementTree as ET
[docs]class Paheal(Engine):
"""Reverse searches https://rule34.paheal.net for images.
This booru does require images to be downloaded before searching.
"""
host = None
download_required = True
def __init__(self):
pass
[docs] async def search_image(self, url):
tags = []
source = []
m = hashlib.md5()
r = await requests.get(url)
async for data in r.content.iter_chunked(8192):
m.update(data)
md5_hash = m.hexdigest()
paheal_request = await requests.get(f"http://rule34.paheal.net/api/danbooru/find_posts?md5={md5_hash}")
xml_tree = ET.fromstring(await paheal_request.text())
for post in xml_tree:
for tag in post.attrib["tags"].split():
tags.append(tag.lower())
source.append(post.attrib["source"])
return ImageResult(tags, source, None)
[docs] async def search_tag(self, tag):
"""Reverse search the booru for tag data.
"""
raise NotAvailableSearchException("This engine cannot search tags.")