forked from zaclys/searxng
		
	Merge pull request #15 from return42/add-springer
Add a search engine for Springer Nature
This commit is contained in:
		
						commit
						d01741c9a2
					
				
					 5 changed files with 87 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -194,6 +194,7 @@ PYLINT_FILES=\ | |||
| 	searx/engines/meilisearch.py \
 | ||||
| 	searx/engines/solidtorrents.py \
 | ||||
| 	searx/engines/solr.py \
 | ||||
| 	searx/engines/springer.py \
 | ||||
| 	searx/engines/google_scholar.py \
 | ||||
| 	searx/engines/yahoo_news.py \
 | ||||
| 	searx/engines/apkmirror.py \
 | ||||
|  |  | |||
							
								
								
									
										74
									
								
								searx/engines/springer.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								searx/engines/springer.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| # SPDX-License-Identifier: AGPL-3.0-or-later | ||||
| """Springer Nature (science) | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| # pylint: disable=missing-function-docstring | ||||
| 
 | ||||
| from datetime import datetime | ||||
| from json import loads | ||||
| from urllib.parse import urlencode | ||||
| 
 | ||||
| from searx import logger | ||||
| from searx.exceptions import SearxEngineAPIException | ||||
| 
 | ||||
| logger = logger.getChild('Springer Nature engine') | ||||
| 
 | ||||
| about = { | ||||
|     "website": 'https://www.springernature.com/', | ||||
|     "wikidata_id": 'Q21096327', | ||||
|     "official_api_documentation": 'https://dev.springernature.com/', | ||||
|     "use_official_api": True, | ||||
|     "require_api_key": True, | ||||
|     "results": 'JSON', | ||||
| } | ||||
| 
 | ||||
| categories = ['science'] | ||||
| paging = True | ||||
| nb_per_page = 10 | ||||
| api_key = 'unset' | ||||
| 
 | ||||
| base_url = 'https://api.springernature.com/metadata/json?' | ||||
| 
 | ||||
| def request(query, params): | ||||
|     if api_key == 'unset': | ||||
|         raise SearxEngineAPIException('missing Springer-Nature API key') | ||||
|     args = urlencode({ | ||||
|         'q' : query, | ||||
|         's' : nb_per_page * (params['pageno'] - 1), | ||||
|         'p' : nb_per_page, | ||||
|         'api_key' : api_key | ||||
|         }) | ||||
|     params['url'] = base_url + args | ||||
|     logger.debug("query_url --> %s", params['url']) | ||||
|     return params | ||||
| 
 | ||||
| 
 | ||||
| def response(resp): | ||||
|     results = [] | ||||
|     json_data = loads(resp.text) | ||||
| 
 | ||||
|     for record in json_data['records']: | ||||
|         content = record['abstract'][0:500] | ||||
|         if len(record['abstract']) > len(content): | ||||
|             content += "..." | ||||
|         published = datetime.strptime(record['publicationDate'], '%Y-%m-%d') | ||||
| 
 | ||||
|         metadata = [record[x] for x in [ | ||||
|             'publicationName', | ||||
|             'identifier', | ||||
|             'contentType', | ||||
|         ] if record.get(x) is not None] | ||||
| 
 | ||||
|         metadata = ' / '.join(metadata) | ||||
|         if record.get('startingPage') and record.get('endingPage') is not None: | ||||
|             metadata += " (%(startingPage)s-%(endingPage)s)" % record | ||||
| 
 | ||||
|         results.append({ | ||||
|             'title': record['title'], | ||||
|             'url': record['url'][0]['value'].replace('http://', 'https://', 1), | ||||
|             'content' : content, | ||||
|             'publishedDate' : published, | ||||
|             'metadata' : metadata | ||||
|         }) | ||||
|     return results | ||||
|  | @ -966,6 +966,16 @@ engines: | |||
| #    query_fields : '' # query fields | ||||
| #    enable_http : True | ||||
| 
 | ||||
|   - name : springer nature | ||||
|     engine : springer | ||||
|     # get your API key from: https://dev.springernature.com/signup | ||||
|     # api_key : "a69685087d07eca9f13db62f65b8f601" # working API key, for test & debug | ||||
|     # set api_key and comment out disabled .. | ||||
|     disabled: True | ||||
|     shortcut : springer | ||||
|     categories : science | ||||
|     timeout : 6.0 | ||||
| 
 | ||||
|   - name : startpage | ||||
|     engine : startpage | ||||
|     shortcut : sp | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ | |||
|     {%- if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif -%} | ||||
|     {%- if result.magnetlink %}<small> • {{ result_link(result.magnetlink, icon('magnet') + _('magnet link'), "magnetlink", id) }}</small>{% endif -%} | ||||
|     {%- if result.torrentfile %}<small> • {{ result_link(result.torrentfile, icon('download-alt') + _('torrent file'), "torrentfile", id) }}</small>{% endif -%} | ||||
|     {%- if result.metadata %} <div class="highlight">{{ result.metadata|safe }}</div>{% endif -%} | ||||
| {%- endmacro %} | ||||
| 
 | ||||
| <!-- Draw result footer --> | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ | |||
| <!-- Draw result sub header --> | ||||
| {%- macro result_sub_header(result) -%} | ||||
|   {% if result.publishedDate %}<time class="published_date" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %} | ||||
|   {%- if result.metadata %} <div class="highlight">{{ result.metadata|safe }}</div>{% endif -%} | ||||
| {%- endmacro -%} | ||||
| 
 | ||||
| <!-- Draw result sub footer --> | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Alexandre Flament
						Alexandre Flament