# coding: utf-8
from __future__ import unicode_literals
import re
from . common import InfoExtractor
from . . utils import (
int_or_none ,
parse_duration ,
parse_iso8601 ,
)
class AirMozillaIE ( InfoExtractor ) :
_VALID_URL = r ' https?://air \ .mozilla \ .org/(?P<id>[0-9a-z-]+)/? '
_TEST = {
' url ' : ' https://air.mozilla.org/privacy-lab-a-meetup-for-privacy-minded-people-in-san-francisco/ ' ,
' md5 ' : ' 8d02f53ee39cf006009180e21df1f3ba ' ,
' info_dict ' : {
' id ' : ' 6x4q2w ' ,
' ext ' : ' mp4 ' ,
' title ' : ' Privacy Lab - a meetup for privacy minded people in San Francisco ' ,
' thumbnail ' : r ' re:https?://.*/poster \ .jpg ' ,
' description ' : ' Brings together privacy professionals and others interested in privacy at for-profits, non-profits, and NGOs in an effort to contribute to the state of the ecosystem... ' ,
' timestamp ' : 1422487800 ,
' upload_date ' : ' 20150128 ' ,
' location ' : ' SFO Commons ' ,
' duration ' : 3780 ,
' view_count ' : int ,
' categories ' : [ ' Main ' , ' Privacy ' ] ,
}
}
def _real_extract ( self , url ) :
display_id = self . _match_id ( url )
webpage = self . _download_webpage ( url , display_id )
video_id = self . _html_search_regex ( r ' //vid \ .ly/(.*?)/embed ' , webpage , ' id ' )
embed_script = self . _download_webpage ( ' https://vid.ly/ {0} /embed ' . format ( video_id ) , video_id )
jwconfig = self . _parse_json ( self . _search_regex (
r ' initCallback \ ((.*) \ ); ' , embed_script , ' metadata ' ) , video_id ) [ ' config ' ]
info_dict = self . _parse_jwplayer_data ( jwconfig , video_id )
view_count = int_or_none ( self . _html_search_regex (
r ' Views since archived: ([0-9]+) ' ,
webpage , ' view count ' , fatal = False ) )
timestamp = parse_iso8601 ( self . _html_search_regex (
r ' <time datetime= " (.*?) " ' , webpage , ' timestamp ' , fatal = False ) )
duration = parse_duration ( self . _search_regex (
r ' Duration: \ s*( \ d+ \ s*hours? \ s* \ d+ \ s*minutes?) ' ,
webpage , ' duration ' , fatal = False ) )
info_dict . update ( {
' id ' : video_id ,
' title ' : self . _og_search_title ( webpage ) ,
' url ' : self . _og_search_url ( webpage ) ,
' display_id ' : display_id ,
' description ' : self . _og_search_description ( webpage ) ,
' timestamp ' : timestamp ,
' location ' : self . _html_search_regex ( r ' Location: (.*) ' , webpage , ' location ' , default = None ) ,
' duration ' : duration ,
' view_count ' : view_count ,
' categories ' : re . findall ( r ' <a href= " .*? " class= " channel " >(.*?)</a> ' , webpage ) ,
} )
return info_dict