.oO SearXNG Developer Documentation Oo.
Loading...
Searching...
No Matches
searx.engines.public_domain_image_archive Namespace Reference

Functions

 _clean_url (url)
 _get_algolia_api_url ()
 _clear_cached_api_url ()
 request (query, params)
 response (resp)

Variables

str THUMBNAIL_SUFFIX = "?fit=max&h=360&w=360"
dict about
str pdia_base_url = 'https://pdimagearchive.org'
str pdia_config_start = "/_astro/InfiniteSearch."
str pdia_config_end = ".js"
list categories = ['images']
int page_size = 20
bool paging = True
 __CACHED_API_URL = None

Detailed Description

Public domain image archive

Function Documentation

◆ _clean_url()

searx.engines.public_domain_image_archive._clean_url ( url)
protected

Definition at line 53 of file public_domain_image_archive.py.

53def _clean_url(url):
54 parsed = urlparse(url)
55 query = [(k, v) for (k, v) in parse_qsl(parsed.query) if k not in ['ixid', 's']]
56
57 return urlunparse((parsed.scheme, parsed.netloc, parsed.path, parsed.params, urlencode(query), parsed.fragment))
58
59

Referenced by response().

Here is the caller graph for this function:

◆ _clear_cached_api_url()

searx.engines.public_domain_image_archive._clear_cached_api_url ( )
protected

Definition at line 86 of file public_domain_image_archive.py.

86def _clear_cached_api_url():
87 global __CACHED_API_URL # pylint:disable=global-statement
88
89 __CACHED_API_URL = None
90
91

Referenced by response().

Here is the caller graph for this function:

◆ _get_algolia_api_url()

searx.engines.public_domain_image_archive._get_algolia_api_url ( )
protected

Definition at line 60 of file public_domain_image_archive.py.

60def _get_algolia_api_url():
61 global __CACHED_API_URL # pylint:disable=global-statement
62
63 if __CACHED_API_URL:
64 return __CACHED_API_URL
65
66 # fake request to extract api url
67 resp = get(f"{pdia_base_url}/search/?q=")
68 if resp.status_code != 200:
69 raise LookupError("Failed to fetch config location (and as such the API url) for PDImageArchive")
70 pdia_config_filepart = extr(resp.text, pdia_config_start, pdia_config_end)
71 pdia_config_url = pdia_base_url + pdia_config_start + pdia_config_filepart + pdia_config_end
72
73 resp = get(pdia_config_url)
74 if resp.status_code != 200:
75 raise LookupError("Failed to obtain AWS api url for PDImageArchive")
76
77 api_url = extr(resp.text, 'const r="', '"', default=None)
78
79 if api_url is None:
80 raise LookupError("Couldn't obtain AWS api url for PDImageArchive")
81
82 __CACHED_API_URL = api_url
83 return api_url
84
85

Referenced by request().

Here is the caller graph for this function:

◆ request()

searx.engines.public_domain_image_archive.request ( query,
params )

Definition at line 92 of file public_domain_image_archive.py.

92def request(query, params):
93 params['url'] = _get_algolia_api_url()
94 params['method'] = 'POST'
95
96 request_data = {
97 'page': params['pageno'] - 1,
98 'query': query,
99 'hitsPerPage': page_size,
100 'indexName': 'prod_all-images',
101 }
102 params['headers'] = {'Content-Type': 'application/json'}
103 params['data'] = dumps(request_data)
104
105 # http errors are handled manually to be able to reset the api url
106 params['raise_for_httperror'] = False
107 return params
108
109

References _get_algolia_api_url().

Here is the call graph for this function:

◆ response()

searx.engines.public_domain_image_archive.response ( resp)

Definition at line 110 of file public_domain_image_archive.py.

110def response(resp):
111 results = []
112 json_data = resp.json()
113
114 if resp.status_code == 403:
115 _clear_cached_api_url()
116 raise SearxEngineAccessDeniedException()
117
118 if resp.status_code != 200:
119 raise SearxEngineException()
120
121 if 'results' not in json_data:
122 return []
123
124 for result in json_data['results'][0]['hits']:
125 content = []
126
127 if result.get("themes"):
128 content.append("Themes: " + result['themes'])
129
130 if result.get("encompassingWork"):
131 content.append("Encompassing work: " + result['encompassingWork'])
132
133 base_image_url = result['thumbnail'].split("?")[0]
134
135 results.append(
136 {
137 'template': 'images.html',
138 'url': _clean_url(f"{about['website']}/images/{result['objectID']}"),
139 'img_src': _clean_url(base_image_url),
140 'thumbnail_src': _clean_url(base_image_url + THUMBNAIL_SUFFIX),
141 'title': f"{result['title'].strip()} by {result['artist']} {result.get('displayYear', '')}",
142 'content': "\n".join(content),
143 }
144 )
145
146 return results

References _clean_url(), and _clear_cached_api_url().

Here is the call graph for this function:

Variable Documentation

◆ __CACHED_API_URL

searx.engines.public_domain_image_archive.__CACHED_API_URL = None
private

Definition at line 50 of file public_domain_image_archive.py.

◆ about

dict searx.engines.public_domain_image_archive.about
Initial value:
1= {
2 "website": 'https://pdimagearchive.org',
3 "use_official_api": False,
4 "require_api_key": False,
5 "results": 'JSON',
6}

Definition at line 35 of file public_domain_image_archive.py.

◆ categories

list searx.engines.public_domain_image_archive.categories = ['images']

Definition at line 45 of file public_domain_image_archive.py.

◆ page_size

int searx.engines.public_domain_image_archive.page_size = 20

Definition at line 46 of file public_domain_image_archive.py.

◆ paging

bool searx.engines.public_domain_image_archive.paging = True

Definition at line 47 of file public_domain_image_archive.py.

◆ pdia_base_url

str searx.engines.public_domain_image_archive.pdia_base_url = 'https://pdimagearchive.org'

Definition at line 42 of file public_domain_image_archive.py.

◆ pdia_config_end

str searx.engines.public_domain_image_archive.pdia_config_end = ".js"

Definition at line 44 of file public_domain_image_archive.py.

◆ pdia_config_start

str searx.engines.public_domain_image_archive.pdia_config_start = "/_astro/InfiniteSearch."

Definition at line 43 of file public_domain_image_archive.py.

◆ THUMBNAIL_SUFFIX

str searx.engines.public_domain_image_archive.THUMBNAIL_SUFFIX = "?fit=max&h=360&w=360"

Definition at line 11 of file public_domain_image_archive.py.