loc.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """
  3. Library of Congress : images from Prints and Photographs Online Catalog
  4. """
  5. from json import loads
  6. from urllib.parse import urlencode
  7. about = {
  8. "website": 'https://www.loc.gov/pictures/',
  9. "wikidata_id": 'Q131454',
  10. "official_api_documentation": 'https://www.loc.gov/pictures/api',
  11. "use_official_api": True,
  12. "require_api_key": False,
  13. "results": 'JSON',
  14. }
  15. categories = ['images']
  16. paging = True
  17. base_url = 'https://loc.gov/pictures/search/?'
  18. search_string = "&sp={page}&{query}&fo=json"
  19. IMG_SRC_FIXES = {
  20. 'https://tile.loc.gov/storage-services/': 'https://tile.loc.gov/storage-services/',
  21. 'https://loc.gov/pictures/static/images/': 'https://tile.loc.gov/storage-services/',
  22. 'https://www.loc.gov/pictures/cdn/': 'https://tile.loc.gov/storage-services/',
  23. }
  24. def request(query, params):
  25. search_path = search_string.format(
  26. query=urlencode({'q': query}),
  27. page=params['pageno'])
  28. params['url'] = base_url + search_path
  29. return params
  30. def response(resp):
  31. results = []
  32. json_data = loads(resp.text)
  33. for result in json_data['results']:
  34. img_src = result['image']['full']
  35. for url_prefix, url_replace in IMG_SRC_FIXES.items():
  36. if img_src.startswith(url_prefix):
  37. img_src = img_src.replace(url_prefix, url_replace)
  38. break
  39. else:
  40. img_src = result['image']['thumb']
  41. results.append({
  42. 'url': result['links']['item'],
  43. 'title': result['title'],
  44. 'img_src': img_src,
  45. 'thumbnail_src': result['image']['thumb'],
  46. 'author': result['creator'],
  47. 'template': 'images.html'
  48. })
  49. return results