]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/orf.py
41ef8e992ac8f898de90f775b72cbc133caec805
4 import xml
. etree
. ElementTree
7 from . common
import InfoExtractor
14 class ORFIE ( InfoExtractor
):
15 _VALID_URL
= r
'https?://tvthek.orf.at/(programs/.+?/episodes|topics/.+?)/(?P<id>\d+)'
18 u
'url' : u
'http://tvthek.orf.at/programs/1171769-Wetter-ZIB/episodes/6557323-Wetter' ,
19 u
'file' : u
'6566957.flv' ,
22 u
'description' : u
'Christa Kummer, Marcus Wadsak und Kollegen präsentieren abwechselnd ihre täglichen Wetterprognosen für Österreich. \r \r Mehr Wetter unter wetter.ORF.at' ,
26 u
'skip_download' : True ,
30 def _real_extract ( self
, url
):
31 mobj
= re
. match ( self
._ VALID
_U RL
, url
)
32 playlist_id
= mobj
. group ( 'id' )
33 webpage
= self
._ download
_ webpage
( url
, playlist_id
)
35 flash_xml
= self
._ search
_ regex
( 'ORF.flashXML = \' (.+?) \' ' , webpage
, u
'flash xml' )
36 flash_xml
= compat_urlparse
. parse_qs ( 'xml=' + flash_xml
)[ 'xml' ][ 0 ]
37 flash_config
= xml
. etree
. ElementTree
. fromstring ( flash_xml
. encode ( 'utf-8' ))
38 playlist_json
= self
._ search
_ regex
( r
'playlist\' : \' ( \
[.* ?\
]) \' ', webpage, u' playlist
').replace(r' \" ',' "')
39 playlist = json.loads(playlist_json)
42 ns = '{http://tempuri.org/XMLSchema.xsd}'
43 xpath = ' %(ns)s Playlist/ %(ns)s Items/ %(ns)s Item' % {'ns': ns}
44 webpage_description = self._og_search_description(webpage)
45 for (i, (item, info)) in enumerate(zip(flash_config.findall(xpath), playlist), 1):
46 # Get best quality url
48 for q in ['Q6A', 'Q4A', 'Q1A']:
49 video_url = find_xpath_attr(item, ' %s VideoUrl' % ns, 'quality', q)
50 if video_url is not None:
51 rtmp_url = video_url.text
54 raise ExtractorError(u'Couldn \' t get video url: %s ' % info['id'])
55 description = self._html_search_regex(
56 r'id=" playlist_entry_
%s ".*?<p>(.*?)</p>' % i, webpage,
57 u'description', default=webpage_description, flags=re.DOTALL)
61 'title': info['title'],
64 'description': description,