core.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """
  3. Core Engine (science)
  4. """
  5. from json import loads
  6. from datetime import datetime
  7. from urllib.parse import urlencode
  8. about = {
  9. "website": 'https://core.ac.uk',
  10. "wikidata_id": 'Q22661180',
  11. "official_api_documentation": 'https://core.ac.uk/documentation/api/',
  12. "use_official_api": True,
  13. "require_api_key": True,
  14. "results": 'JSON',
  15. }
  16. categories = ['science']
  17. paging = True
  18. nb_per_page = 20
  19. # apikey = ''
  20. apikey = 'MVBozuTX8QF9I1D0GviL5bCn2Ueat6NS'
  21. base_url = 'https://core.ac.uk:443/api-v2/search/'
  22. search_string = '{query}?page={page}&pageSize={nb_per_page}&apiKey={apikey}'
  23. def request(query, params):
  24. search_path = search_string.format(
  25. query=urlencode({'q': query}),
  26. nb_per_page=nb_per_page,
  27. page=params['pageno'],
  28. apikey=apikey)
  29. params['url'] = base_url + search_path
  30. return params
  31. def response(resp):
  32. results = []
  33. json_data = loads(resp.text)
  34. for result in json_data['data']:
  35. time = result['_source']['publishedDate']
  36. if time is None:
  37. date = datetime.now()
  38. else:
  39. date = datetime.fromtimestamp(time / 1000)
  40. results.append({
  41. 'url': result['_source']['urls'][0],
  42. 'title': result['_source']['title'],
  43. 'content': result['_source']['description'],
  44. 'publishedDate': date})
  45. return results