hitbox.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. # coding: utf-8
  2. from __future__ import unicode_literals
  3. from .common import InfoExtractor
  4. from ..utils import (
  5. unified_strdate,
  6. )
  7. class HitboxIE(InfoExtractor):
  8. _VALID_URL = r'https?://(?:www\.)?hitbox\.tv/video/(?P<id>[0-9]+)'
  9. _TESTS = [{
  10. 'url': 'http://www.hitbox.tv/video/358062',
  11. 'info_dict': {
  12. 'id': '358062',
  13. 'title': 'Megaman',
  14. 'alt_title': 'Megaman',
  15. 'description': '',
  16. 'ext': 'mp4',
  17. 'thumbnail': 're:^https?://.*\.jpg$',
  18. 'duration': 3834,
  19. 'resolution': 'SD 480p',
  20. 'uploader_id': 'supergreatfriend',
  21. 'view_count': int,
  22. 'upload_date': '20141225',
  23. 'categories': [None],
  24. },
  25. 'params': {
  26. # m3u8 download
  27. 'skip_download': True,
  28. },
  29. }, {
  30. 'url': 'http://www.hitbox.tv/video/203213',
  31. 'info_dict': {
  32. 'id': '203213',
  33. 'title': 'hitbox @ gamescom, Sub Button Hype extended, Giveaway - hitbox News Update with Oxy',
  34. 'alt_title': 'hitboxlive - Aug 9th #6',
  35. 'description': '',
  36. 'ext': 'mp4',
  37. 'thumbnail': 're:^https?://.*\.jpg$',
  38. 'duration': 215,
  39. 'resolution': 'HD 720p',
  40. 'uploader_id': 'hitboxlive',
  41. 'view_count': int,
  42. 'upload_date': '20140809',
  43. 'categories': ['Live Show'],
  44. },
  45. 'params': {
  46. # m3u8 download
  47. 'skip_download': True,
  48. },
  49. }]
  50. def _real_extract(self, url):
  51. video_id = self._match_id(url)
  52. thumb_base = 'https://edge.sf.hitbox.tv'
  53. metadata = self._download_json(
  54. 'https://www.hitbox.tv/api/media/video/%s' % (video_id), video_id
  55. )
  56. video_meta = metadata.get('video', [])[0]
  57. title = video_meta.get('media_status')
  58. alt_title = video_meta.get('media_title')
  59. description = video_meta.get('media_description')
  60. duration = int(float(video_meta.get('media_duration')))
  61. uploader = video_meta.get('media_user_name')
  62. views = int(video_meta.get('media_views'))
  63. upload_date = unified_strdate(video_meta.get('media_date_added'))
  64. categories = [video_meta.get('category_name')]
  65. thumbs = [
  66. {'url': thumb_base + video_meta.get('media_thumbnail'),
  67. 'width': 320,
  68. 'height': 180},
  69. {'url': thumb_base + video_meta.get('media_thumbnail_large'),
  70. 'width': 768,
  71. 'height': 432},
  72. ]
  73. player_config = self._download_json(
  74. 'https://www.hitbox.tv/api/player/config/video/%s' % (video_id),
  75. video_id
  76. )
  77. clip = player_config.get('clip')
  78. video_url = clip.get('url')
  79. res = clip.get('bitrates', [])[0].get('label')
  80. return {
  81. 'id': video_id,
  82. 'title': title,
  83. 'alt_title': alt_title,
  84. 'description': description,
  85. 'url': video_url,
  86. 'ext': 'mp4',
  87. 'thumbnails': thumbs,
  88. 'duration': duration,
  89. 'resolution': res,
  90. 'uploader_id': uploader,
  91. 'view_count': views,
  92. 'upload_date': upload_date,
  93. 'categories': categories,
  94. 'protocol': 'm3u8',
  95. }