bpb.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """BPB refers to ``Bundeszentrale für poltische Bildung``, which is a German
  3. governmental institution aiming to reduce misinformation by providing resources
  4. about politics and history.
  5. """
  6. from datetime import datetime
  7. from urllib.parse import urlencode
  8. about = {
  9. 'website': "https://www.bpb.de",
  10. 'official_api_documentation': None,
  11. 'use_official_api': False,
  12. 'require_api_key': False,
  13. 'results': 'JSON',
  14. 'language': 'de',
  15. }
  16. paging = True
  17. categories = ['general']
  18. base_url = "https://www.bpb.de"
  19. def request(query, params):
  20. args = {
  21. 'query[term]': query,
  22. 'page': params['pageno'] - 1,
  23. 'sort[direction]': 'descending',
  24. 'payload[nid]': 65350,
  25. }
  26. params['url'] = f"{base_url}/bpbapi/filter/search?{urlencode(args)}"
  27. return params
  28. def response(resp):
  29. results = []
  30. json_resp = resp.json()
  31. for result in json_resp['teaser']:
  32. thumbnail = None
  33. if result['teaser']['image']:
  34. thumbnail = base_url + result['teaser']['image']['sources'][-1]['url']
  35. metadata = result['extension']['overline']
  36. authors = ', '.join(author['name'] for author in result['extension'].get('authors', []))
  37. if authors:
  38. metadata += f" | {authors}"
  39. publishedDate = None
  40. if result['extension'].get('publishingDate'):
  41. publishedDate = datetime.utcfromtimestamp(result['extension']['publishingDate'])
  42. results.append(
  43. {
  44. 'url': base_url + result['teaser']['link']['url'],
  45. 'title': result['teaser']['title'],
  46. 'content': result['teaser']['text'],
  47. 'thumbnail': thumbnail,
  48. 'publishedDate': publishedDate,
  49. 'metadata': metadata,
  50. }
  51. )
  52. return results