mirror of
https://github.com/searxng/searxng
synced 2024-01-01 19:24:07 +01:00
65 lines
No EOL
1.4 KiB
Python
65 lines
No EOL
1.4 KiB
Python
import httpx
|
|
from urllib.parse import urlencode
|
|
from datetime import datetime
|
|
|
|
# Engine metadata
|
|
about = {
|
|
"website": "https://www.pixiv.net/",
|
|
"wikidata_id": None,
|
|
"official_api_documentation": None,
|
|
"use_official_api": False,
|
|
"require_api_key": False,
|
|
"results": "JSON",
|
|
}
|
|
|
|
# Engine configuration
|
|
paging = True
|
|
categories = ['images']
|
|
|
|
# Search URL
|
|
base_url = "https://www.pixiv.net/ajax/search/illustrations"
|
|
|
|
|
|
def request(query, params):
|
|
page_number = params.get("pageno", 1)
|
|
query_params = {
|
|
"word": query,
|
|
"order": "date_d",
|
|
"mode": "all",
|
|
"p": page_number,
|
|
"s_mode": "s_tag_full",
|
|
"type": "illust_and_ugoira",
|
|
"lang": "en",
|
|
}
|
|
|
|
with httpx.Client() as client:
|
|
response = client.get(f"{base_url}/{query}?{urlencode(query_params)}")
|
|
params["url"] = response.url
|
|
|
|
return params
|
|
|
|
|
|
def format_results(item):
|
|
title = item["title"]
|
|
url = item["url"]
|
|
user_id = item["userId"]
|
|
user_name = item["userName"]
|
|
image_url = item["url"]
|
|
|
|
|
|
return {
|
|
"title": title,
|
|
"url": image_url,
|
|
"author": f"{user_name} (ID: {user_id})",
|
|
"img_src": image_url,
|
|
"source": 'pixiv.net',
|
|
"template": "images.html",
|
|
}
|
|
|
|
|
|
def response(resp):
|
|
data = resp.json()
|
|
illustrations = data["body"]["illust"]["data"]
|
|
results = [format_results(item) for item in illustrations]
|
|
|
|
return results |