83 search_res = resp.json()
94 heading = search_res.get(
'Heading',
'')
101 answer = search_res.get(
'Answer',
'')
103 answer_type = search_res.get(
'AnswerType')
104 logger.debug(
'AnswerType="%s" Answer="%s"', answer_type, answer)
105 if isinstance(answer, str)
and answer_type
not in [
'calc',
'ip']:
107 results.types.Answer(
108 answer=html_to_text(answer),
109 url=search_res.get(
'AbstractURL',
''),
114 if 'Definition' in search_res:
115 content = content + search_res.get(
'Definition',
'')
117 if 'Abstract' in search_res:
118 content = content + search_res.get(
'Abstract',
'')
121 image = search_res.get(
'Image')
122 image =
None if image ==
'' else image
123 if image
is not None and urlparse(image).netloc ==
'':
124 image = urljoin(
'https://duckduckgo.com', image)
128 for ddg_result
in search_res.get(
'Results', []):
129 firstURL = ddg_result.get(
'FirstURL')
130 text = ddg_result.get(
'Text')
131 if firstURL
is not None and text
is not None:
132 urls.append({
'title': text,
'url': firstURL})
133 results.append({
'title': heading,
'url': firstURL})
136 for ddg_result
in search_res.get(
'RelatedTopics', []):
137 if 'FirstURL' in ddg_result:
138 firstURL = ddg_result.get(
'FirstURL')
139 text = ddg_result.get(
'Text')
142 if suggestion != heading
and suggestion
is not None:
143 results.append({
'suggestion': suggestion})
144 elif 'Topics' in ddg_result:
146 relatedTopics.append({
'name': ddg_result.get(
'Name',
''),
'suggestions': suggestions})
147 for topic_result
in ddg_result.get(
'Topics', []):
148 suggestion =
result_to_text(topic_result.get(
'Text'), topic_result.get(
'Result'))
149 if suggestion != heading
and suggestion
is not None:
150 suggestions.append(suggestion)
153 abstractURL = search_res.get(
'AbstractURL',
'')
154 if abstractURL !=
'':
156 infobox_id = abstractURL
157 urls.append({
'title': search_res.get(
'AbstractSource'),
'url': abstractURL,
'official':
True})
158 results.append({
'url': abstractURL,
'title': heading})
161 definitionURL = search_res.get(
'DefinitionURL',
'')
162 if definitionURL !=
'':
164 infobox_id = definitionURL
165 urls.append({
'title': search_res.get(
'DefinitionSource'),
'url': definitionURL})
173 if 'Infobox' in search_res:
174 infobox = search_res.get(
'Infobox')
175 if 'content' in infobox:
178 for info
in infobox.get(
'content'):
179 data_type = info.get(
'data_type')
180 data_label = info.get(
'label')
181 data_value = info.get(
'value')
184 if data_value ==
'""':
191 external_url = get_external_url(data_type, data_value)
192 if external_url
is not None:
193 urls.append({
'title': data_label,
'url': external_url})
194 elif data_type
in [
'instance',
'wiki_maps_trigger',
'google_play_artist_id']:
199 elif data_type ==
'string' and data_label ==
'Website':
202 elif data_type ==
'area':
203 attributes.append({
'label': data_label,
'value':
area_to_str(data_value),
'entity':
'P2046'})
204 osm_zoom = area_to_osm_zoom(data_value.get(
'amount'))
205 elif data_type ==
'coordinates':
206 if data_value.get(
'globe') ==
'http://www.wikidata.org/entity/Q2':
212 attributes.append({
'label': data_label,
'value': data_value,
'entity':
'P625'})
213 elif data_type ==
'string':
214 attributes.append({
'label': data_label,
'value': data_value})
217 data_label = coordinates.get(
'label')
218 data_value = coordinates.get(
'value')
219 latitude = data_value.get(
'latitude')
220 longitude = data_value.get(
'longitude')
221 url = get_earth_coordinates_url(latitude, longitude, osm_zoom)
222 urls.append({
'title':
'OpenStreetMap',
'url': url,
'entity':
'P625'})
226 if image
is None and len(attributes) == 0
and len(urls) == 1
and len(relatedTopics) == 0
and len(content) == 0:
227 results.append({
'url': urls[0][
'url'],
'title': heading,
'content': content})
235 'attributes': attributes,
237 'relatedTopics': relatedTopics,