| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | 
							- # SPDX-License-Identifier: AGPL-3.0-or-later
 
- """Open library (books)
 
- """
 
- from urllib.parse import urlencode
 
- import re
 
- from dateutil import parser
 
- about = {
 
-     'website': 'https://openlibrary.org',
 
-     'wikidata_id': 'Q1201876',
 
-     'require_api_key': False,
 
-     'use_official_api': False,
 
-     'official_api_documentation': 'https://openlibrary.org/developers/api',
 
- }
 
- paging = True
 
- categories = []
 
- base_url = "https://openlibrary.org"
 
- results_per_page = 10
 
- def request(query, params):
 
-     args = {
 
-         'q': query,
 
-         'page': params['pageno'],
 
-         'limit': results_per_page,
 
-     }
 
-     params['url'] = f"{base_url}/search.json?{urlencode(args)}"
 
-     return params
 
- def _parse_date(date):
 
-     try:
 
-         return parser.parse(date)
 
-     except parser.ParserError:
 
-         return None
 
- def response(resp):
 
-     results = []
 
-     for item in resp.json().get("docs", []):
 
-         cover = None
 
-         if 'lending_identifier_s' in item:
 
-             cover = f"https://archive.org/services/img/{item['lending_identifier_s']}"
 
-         published = item.get('publish_date')
 
-         if published:
 
-             published_dates = [date for date in map(_parse_date, published) if date]
 
-             if published_dates:
 
-                 published = min(published_dates)
 
-         if not published:
 
-             published = parser.parse(str(item.get('first_published_year')))
 
-         result = {
 
-             'template': 'paper.html',
 
-             'url': f"{base_url}{item['key']}",
 
-             'title': item['title'],
 
-             'content': re.sub(r"\{|\}", "", item['first_sentence'][0]) if item.get('first_sentence') else '',
 
-             'isbn': item.get('isbn', [])[:5],
 
-             'authors': item.get('author_name', []),
 
-             'thumbnail': cover,
 
-             'publishedDate': published,
 
-             'tags': item.get('subject', [])[:10] + item.get('place', [])[:10],
 
-         }
 
-         results.append(result)
 
-     return results
 
 
  |