9gag.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. # pylint: disable=invalid-name
  4. """9GAG (social media)"""
  5. from json import loads
  6. from datetime import datetime
  7. from urllib.parse import urlencode
  8. about = {
  9. "website": 'https://9gag.com/',
  10. "wikidata_id": 'Q277421',
  11. "official_api_documentation": None,
  12. "use_official_api": True,
  13. "require_api_key": False,
  14. "results": 'JSON',
  15. }
  16. categories = ['social media']
  17. paging = True
  18. search_url = "https://9gag.com/v1/search-posts?{query}"
  19. page_size = 10
  20. def request(query, params):
  21. query = urlencode({'query': query, 'c': (params['pageno'] - 1) * page_size})
  22. params['url'] = search_url.format(query=query)
  23. return params
  24. def response(resp):
  25. results = []
  26. json_results = loads(resp.text)['data']
  27. for result in json_results['posts']:
  28. result_type = result['type']
  29. if result_type == 'Photo':
  30. results.append(
  31. {
  32. 'template': 'images.html',
  33. 'url': result['url'],
  34. 'title': result['title'],
  35. 'content': result['description'],
  36. 'publishedDate': datetime.utcfromtimestamp(result['creationTs']),
  37. 'img_src': result['images']['image700']['url'],
  38. 'thumbnail_src': result['images']['imageFbThumbnail']['url'],
  39. }
  40. )
  41. elif result_type == 'Animated':
  42. results.append(
  43. {
  44. 'template': 'videos.html',
  45. 'url': result['url'],
  46. 'title': result['title'],
  47. 'content': result['description'],
  48. 'publishedDate': datetime.utcfromtimestamp(result['creationTs']),
  49. 'thumbnail': result['images']['imageFbThumbnail']['url'],
  50. 'iframe_src': result['images'].get('image460sv', {}).get('url'),
  51. }
  52. )
  53. if 'tags' in json_results:
  54. for suggestion in json_results['tags']:
  55. results.append({'suggestion': suggestion['key']})
  56. return results