2018-10-11 05:47:21 +08:00
# coding: utf-8
from __future__ import unicode_literals
2019-02-06 04:39:12 +08:00
import re
2019-02-06 07:13:31 +08:00
from . common import InfoExtractor
from . . utils import parse_duration , merge_dicts
2018-10-11 05:47:21 +08:00
class MallTVIE ( InfoExtractor ) :
2019-02-06 07:13:31 +08:00
_VALID_URL = r ' https?://(?:www \ .)?mall \ .tv/(?:.+/)?(?P<id>.+)(?: \ ?.*$|$) '
2018-10-11 05:47:21 +08:00
_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 07:13:31 +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 ' ,
' upload_date ' : ' 20181007 ' ,
' timestamp ' : 1538870400
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 ' ,
2019-02-06 07:13:31 +08:00
' only_matching ' : 1 ,
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 07:13:31 +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 ' ,
' upload_date ' : ' 20181007 ' ,
' timestamp ' : 1538870400
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 )
2019-02-06 07:13:31 +08:00
src_id_regex = r ' (?P<src><source src=([ \ " \' ])?.+?/(?P<id> \ w { 6,}?)/index)(?P<after> \ 1?[^>]*?>) '
video_id = self . _search_regex ( src_id_regex , webpage , ' ID ' ,
2019-02-06 04:39:12 +08:00
group = ' id ' )
2018-10-11 05:47:21 +08:00
info = self . _search_json_ld ( webpage , video_id , default = { } )
2019-02-06 07:13:31 +08:00
html = re . sub ( src_id_regex , r ' \ g<src>.m3u8 \ g<after> ' , webpage )
media = self . _parse_html5_media_entries ( url , html , video_id )
2019-02-06 04:39:12 +08:00
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
result . update ( { ' thumbnail ' : thumbnail } )
result . update ( { ' duration ' : duration } )
2019-01-07 01:06:12 +08:00
2019-02-06 07:13:31 +08:00
return merge_dicts ( media [ 0 ] , info , result )