12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # SPDX-License-Identifier: AGPL-3.0-or-later
- # pylint: disable=invalid-name
- """9GAG (social media)"""
- from json import loads
- from datetime import datetime
- from urllib.parse import urlencode
- about = {
- "website": 'https://9gag.com/',
- "wikidata_id": 'Q277421',
- "official_api_documentation": None,
- "use_official_api": True,
- "require_api_key": False,
- "results": 'JSON',
- }
- categories = ['social media']
- paging = True
- search_url = "https://9gag.com/v1/search-posts?{query}"
- page_size = 10
- def request(query, params):
- query = urlencode({'query': query, 'c': (params['pageno'] - 1) * page_size})
- params['url'] = search_url.format(query=query)
- return params
- def response(resp):
- results = []
- json_results = loads(resp.text)['data']
- for result in json_results['posts']:
- result_type = result['type']
- # Get the not cropped version of the thumbnail when the image height is not too important
- if result['images']['image700']['height'] > 400:
- thumbnail = result['images']['imageFbThumbnail']['url']
- else:
- thumbnail = result['images']['image700']['url']
- if result_type == 'Photo':
- results.append(
- {
- 'template': 'images.html',
- 'url': result['url'],
- 'title': result['title'],
- 'content': result['description'],
- 'publishedDate': datetime.fromtimestamp(result['creationTs']),
- 'img_src': result['images']['image700']['url'],
- 'thumbnail_src': thumbnail,
- }
- )
- elif result_type == 'Animated':
- results.append(
- {
- 'template': 'videos.html',
- 'url': result['url'],
- 'title': result['title'],
- 'content': result['description'],
- 'publishedDate': datetime.fromtimestamp(result['creationTs']),
- 'thumbnail': thumbnail,
- 'iframe_src': result['images'].get('image460sv', {}).get('url'),
- }
- )
- if 'tags' in json_results:
- for suggestion in json_results['tags']:
- results.append({'suggestion': suggestion['key']})
- return results
|