2018-10-11 05:47:21 +08:00
# coding: utf-8
from __future__ import unicode_literals
2019-01-07 01:06:12 +08:00
import hashlib
2018-10-11 05:47:21 +08:00
from . common import InfoExtractor
2018-10-11 07:14:35 +08:00
from . . utils import parse_duration
2019-02-06 04:39:12 +08:00
import re
2018-10-11 05:47:21 +08:00
class MallTVIE ( InfoExtractor ) :
_VALID_URL = r ' https?://(?:www \ .)?mall \ .tv/(?:.+/)?(?P<id>.+) '
_TESTS = [
{
2019-01-07 01:06:12 +08:00
' url ' : ' https://www.mall.tv/18-miliard-pro-neziskovky-opravdu-jsou-sportovci-nebo-clovek-v-tisni-pijavice ' ,
' md5 ' : ' 9ced0de056534410837077e23bfba796 ' ,
2018-10-11 05:47:21 +08:00
' info_dict ' : {
2019-02-06 04:39:12 +08:00
' id ' : ' t0zzt0 ' ,
2018-10-11 05:47:21 +08:00
' ext ' : ' mp4 ' ,
2019-01-07 01:06:12 +08:00
' title ' : ' 18 miliard pro neziskovky. Opravdu jsou sportovci nebo Člověk v tísni pijavice? ' ,
2019-02-06 04:39:12 +08:00
' description ' : " Pokud někdo hospodaří s penězmi daňových poplatníků, pak logicky chceme vědět, jak s nimi nakládá. Objem dotací pro neziskovky roste, ale opravdu jsou tyto organizace „pijavice ' , jak o nich hovoří And "
2019-01-07 01:06:12 +08:00
}
2018-10-11 05:47:21 +08:00
} ,
{
2019-01-07 01:06:12 +08:00
' url ' : ' https://www.mall.tv/kdo-to-plati/18-miliard-pro-neziskovky-opravdu-jsou-sportovci-nebo-clovek-v-tisni-pijavice ' ,
' md5 ' : ' 9ced0de056534410837077e23bfba796 ' ,
2018-10-11 05:47:21 +08:00
' info_dict ' : {
2019-02-06 04:39:12 +08:00
' id ' : ' t0zzt0 ' ,
2018-10-11 05:47:21 +08:00
' ext ' : ' mp4 ' ,
2019-01-07 01:06:12 +08:00
' title ' : ' 18 miliard pro neziskovky. Opravdu jsou sportovci nebo Člověk v tísni pijavice? ' ,
2019-02-06 04:39:12 +08:00
' description ' : " Pokud někdo hospodaří s penězmi daňových poplatníků, pak logicky chceme vědět, jak s nimi nakládá. Objem dotací pro neziskovky roste, ale opravdu jsou tyto organizace „pijavice ' , jak o nich hovoří And "
2019-01-07 01:06:12 +08:00
}
}
2018-10-11 05:47:21 +08:00
]
def _real_extract ( self , url ) :
2019-02-06 04:39:12 +08:00
display_id = self . _match_id ( url )
webpage = self . _download_webpage ( url , display_id )
src_id_regex = r ' (?P<before><source src=([ \ " \' ])?)(?P<src>.+?/(?P<id> \ w { 6,}?)/index)(?P<after> \ 1?[^>]*?>) '
video_id = self . _html_search_regex ( src_id_regex , webpage , ' ID ' ,
group = ' id ' )
2018-10-11 05:47:21 +08:00
info = self . _search_json_ld ( webpage , video_id , default = { } )
2019-02-06 04:39:12 +08:00
html = re . sub ( src_id_regex , r ' \ g<before> \ g<src>.m3u8 \ g<after> ' , webpage )
media = self . _parse_html5_media_entries ( ' ' , html , video_id )
thumbnail = info . get ( ' thumbnail ' , self . _og_search_thumbnail ( webpage ) )
2019-01-07 01:06:12 +08:00
duration = parse_duration ( info . get ( ' duration ' ) )
result = {
2019-02-06 04:39:12 +08:00
' id ' : video_id ,
' title ' : info . get ( ' title ' , self . _og_search_title ( webpage ) ) ,
' description ' : self . _og_search_description ( webpage )
2018-10-11 05:47:21 +08:00
}
2019-02-06 04:39:12 +08:00
if media :
result . update ( media [ 0 ] )
result . update ( { ' thumbnail ' : thumbnail } )
result . update ( { ' duration ' : duration } )
2019-01-07 01:06:12 +08:00
return result