livestreamfails.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from .common import InfoExtractor
  2. from ..utils import format_field, traverse_obj, unified_timestamp
  3. class LivestreamfailsIE(InfoExtractor):
  4. _VALID_URL = r'https?://(?:www\.)?livestreamfails\.com/(?:clip|post)/(?P<id>[0-9]+)'
  5. _TESTS = [{
  6. 'url': 'https://livestreamfails.com/clip/139200',
  7. 'md5': '8a03aea1a46e94a05af6410337463102',
  8. 'info_dict': {
  9. 'id': '139200',
  10. 'ext': 'mp4',
  11. 'display_id': 'ConcernedLitigiousSalmonPeteZaroll-O8yo9W2L8OZEKhV2',
  12. 'title': 'Streamer jumps off a trampoline at full speed',
  13. 'creator': 'paradeev1ch',
  14. 'thumbnail': r're:^https?://.+',
  15. 'timestamp': 1656271785,
  16. 'upload_date': '20220626',
  17. },
  18. }, {
  19. 'url': 'https://livestreamfails.com/post/139200',
  20. 'only_matching': True,
  21. }]
  22. def _real_extract(self, url):
  23. video_id = self._match_id(url)
  24. api_response = self._download_json(f'https://api.livestreamfails.com/clip/{video_id}', video_id)
  25. return {
  26. 'id': video_id,
  27. 'display_id': api_response.get('sourceId'),
  28. 'timestamp': unified_timestamp(api_response.get('createdAt')),
  29. 'url': f'https://livestreamfails-video-prod.b-cdn.net/video/{api_response["videoId"]}',
  30. 'title': api_response.get('label'),
  31. 'creator': traverse_obj(api_response, ('streamer', 'label')),
  32. 'thumbnail': format_field(api_response, 'imageId', 'https://livestreamfails-image-prod.b-cdn.net/image/%s'),
  33. }