mirror of
https://github.com/ytdl-org/youtube-dl
synced 2025-01-01 00:50:09 +09:00
[livestreamfails] Add new extractor
This commit is contained in:
parent
a03b9775d5
commit
951aa74cbe
@ -627,6 +627,9 @@ from .livestream import (
|
||||
LivestreamOriginalIE,
|
||||
LivestreamShortenerIE,
|
||||
)
|
||||
from .livestreamfails import (
|
||||
LivestreamfailsIE,
|
||||
)
|
||||
from .lnkgo import LnkGoIE
|
||||
from .localnews8 import LocalNews8IE
|
||||
from .lovehomeporn import LoveHomePornIE
|
||||
|
49
youtube_dl/extractor/livestreamfails.py
Normal file
49
youtube_dl/extractor/livestreamfails.py
Normal file
@ -0,0 +1,49 @@
|
||||
from .common import InfoExtractor
|
||||
import json
|
||||
import time
|
||||
import calendar
|
||||
|
||||
|
||||
class LivestreamfailsIE(InfoExtractor):
|
||||
_VALID_URL = r'https?://(?:www\.)?livestreamfails\.com/clip/(?P<id>[0-9]+)'
|
||||
_TESTS = [{
|
||||
'url': 'https://livestreamfails.com/clip/139200',
|
||||
'md5': '8a03aea1a46e94a05af6410337463102',
|
||||
'info_dict': {
|
||||
'id': '139200',
|
||||
'ext': 'mp4',
|
||||
'display_id': 'ConcernedLitigiousSalmonPeteZaroll-O8yo9W2L8OZEKhV2',
|
||||
'title': 'Streamer jumps off a trampoline at full speed',
|
||||
'creator': 'paradeev1ch',
|
||||
'thumbnail': 'https://livestreamfails-image-prod.b-cdn.net/image/3877b1d38db083fa25c82685bbaf645637e575ea.png',
|
||||
'timestamp': 1656271785,
|
||||
'upload_date': '20220626',
|
||||
}
|
||||
}]
|
||||
|
||||
def _real_extract(self, url):
|
||||
result = {}
|
||||
result['id'] = self._match_id(url)
|
||||
|
||||
# https://livestreamfails.com/clip/id uses https://api.livestreamfails.com/clip/ to fetch the video metadata
|
||||
# Use the same endpoint here to avoid loading and parsing the provided page (which requires JS)
|
||||
apiResponse = json.loads(self._download_webpage('https://api.livestreamfails.com/clip/' + result['id'], result['id']))
|
||||
|
||||
# Twitch ID of clip
|
||||
result['display_id'] = apiResponse.get('sourceId')
|
||||
|
||||
# Get the input timestamp (test case gives 2022-06-26T19:29:45.515Z)
|
||||
result['timestamp'] = apiResponse.get('createdAt')
|
||||
if(result.get('timestamp')):
|
||||
# Parse it into a struct_time
|
||||
result['timestamp'] = time.strptime(result['timestamp'], '%Y-%m-%dT%H:%M:%S.%fZ')
|
||||
# Convert the struct_time to a UNIX timestamp while ignoring the local timezone attached by time.strptime()
|
||||
result['timestamp'] = calendar.timegm(result['timestamp'])
|
||||
|
||||
# Other fields
|
||||
result['url'] = 'https://livestreamfails-video-prod.b-cdn.net/video/' + apiResponse.get('videoId')
|
||||
result['title'] = apiResponse.get('label')
|
||||
result['creator'] = apiResponse.get('streamer', {}).get('label')
|
||||
result['thumbnail'] = 'https://livestreamfails-image-prod.b-cdn.net/image/' + apiResponse.get('imageId')
|
||||
|
||||
return result
|
Loading…
Reference in New Issue
Block a user