Merge branch 'bleacherreport' of github.com:remitamine/youtube-dl into remitamine...
authorremitamine <remitamine@gmail.com>
Mon, 21 Dec 2015 10:18:32 +0000 (11:18 +0100)
committerremitamine <remitamine@gmail.com>
Mon, 21 Dec 2015 10:18:32 +0000 (11:18 +0100)
1  2 
youtube_dl/extractor/__init__.py
youtube_dl/extractor/dramafever.py

index add1df02321520198a74c3a8fd078bb65d51f1db,4d65ece94cefb786e46c562e5a78b485533a5739..760b65441f8e18765f723e2f0dd5f55ea0bd7187
@@@ -3,15 -3,9 +3,15 @@@ from __future__ import unicode_literal
  from .abc import ABCIE
  from .abc7news import Abc7NewsIE
  from .academicearth import AcademicEarthCourseIE
 +from .acast import (
 +    ACastIE,
 +    ACastChannelIE,
 +)
  from .addanime import AddAnimeIE
  from .adobetv import (
      AdobeTVIE,
 +    AdobeTVShowIE,
 +    AdobeTVChannelIE,
      AdobeTVVideoIE,
  )
  from .adultswim import AdultSwimIE
@@@ -44,7 -38,6 +44,7 @@@ from .arte import 
  )
  from .atresplayer import AtresPlayerIE
  from .atttechchannel import ATTTechChannelIE
 +from .audimedia import AudiMediaIE
  from .audiomack import AudiomackIE, AudiomackAlbumIE
  from .azubu import AzubuIE
  from .baidu import BaiduVideoIE
@@@ -61,15 -54,17 +61,19 @@@ from .beatportpro import BeatportProI
  from .bet import BetIE
  from .bild import BildIE
  from .bilibili import BiliBiliIE
+ from .bleacherreport import (
+     BleacherReportIE,
+     BleacherReportCMSIE,
+ )
  from .blinkx import BlinkxIE
 -from .bliptv import BlipTVIE, BlipTVUserIE
  from .bloomberg import BloombergIE
  from .bpb import BpbIE
  from .br import BRIE
  from .breakcom import BreakIE
 -from .brightcove import BrightcoveIE
 +from .brightcove import (
 +    BrightcoveLegacyIE,
 +    BrightcoveNewIE,
 +)
  from .buzzfeed import BuzzFeedIE
  from .byutv import BYUtvIE
  from .c56 import C56IE
@@@ -77,6 -72,7 +81,6 @@@ from .camdemy import 
      CamdemyIE,
      CamdemyFolderIE
  )
 -from .canal13cl import Canal13clIE
  from .canalplus import CanalplusIE
  from .canalc2 import Canalc2IE
  from .cbs import CBSIE
@@@ -137,7 -133,6 +141,7 @@@ from .dfb import DFBI
  from .dhm import DHMIE
  from .dotsub import DotsubIE
  from .douyutv import DouyuTVIE
 +from .dplay import DPlayIE
  from .dramafever import (
      DramaFeverIE,
      DramaFeverSeriesIE,
@@@ -204,9 -199,7 +208,9 @@@ from .francetv import 
  from .freesound import FreesoundIE
  from .freespeech import FreespeechIE
  from .freevideo import FreeVideoIE
 +from .funimation import FunimationIE
  from .funnyordie import FunnyOrDieIE
 +from .gameinformer import GameInformerIE
  from .gamekings import GamekingsIE
  from .gameone import (
      GameOneIE,
@@@ -230,11 -223,10 +234,11 @@@ from .globo import 
  from .godtube import GodTubeIE
  from .goldenmoustache import GoldenMoustacheIE
  from .golem import GolemIE
 +from .googledrive import GoogleDriveIE
  from .googleplus import GooglePlusIE
  from .googlesearch import GoogleSearchIE
 -from .gorillavid import GorillaVidIE
  from .goshgay import GoshgayIE
 +from .gputechconf import GPUTechConfIE
  from .groupon import GrouponIE
  from .hark import HarkIE
  from .hearthisat import HearThisAtIE
@@@ -281,7 -273,6 +285,7 @@@ from .jadorecettepub import JadoreCette
  from .jeuxvideo import JeuxVideoIE
  from .jove import JoveIE
  from .jukebox import JukeboxIE
 +from .jwplatform import JWPlatformIE
  from .jpopsukitv import JpopsukiIE
  from .kaltura import KalturaIE
  from .kanalplay import KanalPlayIE
@@@ -336,7 -327,6 +340,7 @@@ from .lynda import 
  from .m6 import M6IE
  from .macgamestore import MacGameStoreIE
  from .mailru import MailRuIE
 +from .makertv import MakerTVIE
  from .malemotion import MalemotionIE
  from .mdr import MDRIE
  from .metacafe import MetacafeIE
@@@ -360,6 -350,7 +364,6 @@@ from .motherless import MotherlessI
  from .motorsport import MotorsportIE
  from .movieclips import MovieClipsIE
  from .moviezine import MoviezineIE
 -from .movshare import MovShareIE
  from .mtv import (
      MTVIE,
      MTVServicesEmbeddedIE,
@@@ -425,22 -416,14 +429,22 @@@ from .noco import NocoI
  from .normalboots import NormalbootsIE
  from .nosvideo import NosVideoIE
  from .nova import NovaIE
 -from .novamov import NovaMovIE
 +from .novamov import (
 +    NovaMovIE,
 +    WholeCloudIE,
 +    NowVideoIE,
 +    VideoWeedIE,
 +    CloudTimeIE,
 +)
  from .nowness import (
      NownessIE,
      NownessPlaylistIE,
      NownessSeriesIE,
  )
 -from .nowtv import NowTVIE
 -from .nowvideo import NowVideoIE
 +from .nowtv import (
 +    NowTVIE,
 +    NowTVListIE,
 +)
  from .npo import (
      NPOIE,
      NPOLiveIE,
@@@ -477,7 -460,10 +481,7 @@@ from .orf import 
  from .parliamentliveuk import ParliamentLiveUKIE
  from .patreon import PatreonIE
  from .pbs import PBSIE
 -from .periscope import (
 -    PeriscopeIE,
 -    QuickscopeIE,
 -)
 +from .periscope import PeriscopeIE
  from .philharmoniedeparis import PhilharmonieDeParisIE
  from .phoenix import PhoenixIE
  from .photobucket import PhotobucketIE
@@@ -569,10 -555,6 +573,10 @@@ from .shahid import ShahidI
  from .shared import SharedIE
  from .sharesix import ShareSixIE
  from .sina import SinaIE
 +from .skynewsarabia import (
 +    SkyNewsArabiaIE,
 +    SkyNewsArabiaArticleIE,
 +)
  from .slideshare import SlideshareIE
  from .slutload import SlutloadIE
  from .smotri import (
@@@ -595,8 -577,7 +599,8 @@@ from .soundcloud import 
      SoundcloudIE,
      SoundcloudSetIE,
      SoundcloudUserIE,
 -    SoundcloudPlaylistIE
 +    SoundcloudPlaylistIE,
 +    SoundcloudSearchIE
  )
  from .soundgasm import (
      SoundgasmIE,
@@@ -649,7 -630,6 +653,7 @@@ from .teachingchannel import TeachingCh
  from .teamcoco import TeamcocoIE
  from .techtalks import TechTalksIE
  from .ted import TEDIE
 +from .tele13 import Tele13IE
  from .telebruxelles import TeleBruxellesIE
  from .telecinco import TelecincoIE
  from .telegraaf import TelegraafIE
@@@ -678,7 -658,6 +682,7 @@@ from .tnaflix import 
      EMPFlixIE,
      MovieFapIE,
  )
 +from .toggle import ToggleIE
  from .thvideo import (
      THVideoIE,
      THVideoPlaylistIE
@@@ -749,15 -728,16 +753,15 @@@ from .vh1 import VH1I
  from .vice import ViceIE
  from .viddler import ViddlerIE
  from .videodetective import VideoDetectiveIE
 -from .videolecturesnet import VideoLecturesNetIE
  from .videofyme import VideofyMeIE
  from .videomega import VideoMegaIE
  from .videopremium import VideoPremiumIE
  from .videott import VideoTtIE
 -from .videoweed import VideoWeedIE
  from .vidme import VidmeIE
  from .vidzi import VidziIE
  from .vier import VierIE, VierVideosIE
  from .viewster import ViewsterIE
 +from .viidea import ViideaIE
  from .vimeo import (
      VimeoIE,
      VimeoAlbumIE,
@@@ -810,7 -790,6 +814,7 @@@ from .wrzuta import WrzutaI
  from .wsj import WSJIE
  from .xbef import XBefIE
  from .xboxclips import XboxClipsIE
 +from .xfileshare import XFileShareIE
  from .xhamster import (
      XHamsterIE,
      XHamsterEmbedIE,
@@@ -854,7 -833,6 +858,7 @@@ from .youtube import 
      YoutubeTruncatedIDIE,
      YoutubeTruncatedURLIE,
      YoutubeUserIE,
 +    YoutubePlaylistsIE,
      YoutubeWatchLaterIE,
  )
  from .zapiks import ZapiksIE
index d836c1a6c27ccd757e4e1f6574e8851c90775193,2a43107548bfbad0769d56aadbcb0015c4b578d8..60ed438f8cd9b254fa1ae8d25cd76ed866cab25d
@@@ -3,23 -3,20 +3,20 @@@ from __future__ import unicode_literal
  
  import itertools
  
- from .common import InfoExtractor
+ from .amp import AMPIE
  from ..compat import (
      compat_HTTPError,
      compat_urllib_parse,
 -    compat_urllib_request,
      compat_urlparse,
  )
  from ..utils import (
      ExtractorError,
      clean_html,
-     determine_ext,
-     int_or_none,
-     parse_iso8601,
 +    sanitized_Request,
  )
  
  
- class DramaFeverBaseIE(InfoExtractor):
+ class DramaFeverBaseIE(AMPIE):
      _LOGIN_URL = 'https://www.dramafever.com/accounts/login/'
      _NETRC_MACHINE = 'dramafever'
  
@@@ -51,7 -48,7 +48,7 @@@
              'password': password,
          }
  
 -        request = compat_urllib_request.Request(
 +        request = sanitized_Request(
              self._LOGIN_URL, compat_urllib_parse.urlencode(login_form).encode('utf-8'))
          response = self._download_webpage(
              request, None, 'Logging in as %s' % username)
@@@ -80,60 -77,25 +77,25 @@@ class DramaFeverIE(DramaFeverBaseIE)
              'timestamp': 1404336058,
              'upload_date': '20140702',
              'duration': 343,
-         }
+         },
+         'params': {
+             # m3u8 download
+             'skip_download': True,
+         },
      }
  
      def _real_extract(self, url):
          video_id = self._match_id(url).replace('/', '.')
  
          try:
-             feed = self._download_json(
-                 'http://www.dramafever.com/amp/episode/feed.json?guid=%s' % video_id,
-                 video_id, 'Downloading episode JSON')['channel']['item']
+             info = self._extract_feed_info(
+                 'http://www.dramafever.com/amp/episode/feed.json?guid=%s' % video_id)
          except ExtractorError as e:
              if isinstance(e.cause, compat_HTTPError):
                  raise ExtractorError(
                      'Currently unavailable in your country.', expected=True)
              raise
  
-         media_group = feed.get('media-group', {})
-         formats = []
-         for media_content in media_group['media-content']:
-             src = media_content.get('@attributes', {}).get('url')
-             if not src:
-                 continue
-             ext = determine_ext(src)
-             if ext == 'f4m':
-                 formats.extend(self._extract_f4m_formats(
-                     src, video_id, f4m_id='hds'))
-             elif ext == 'm3u8':
-                 formats.extend(self._extract_m3u8_formats(
-                     src, video_id, 'mp4', m3u8_id='hls'))
-             else:
-                 formats.append({
-                     'url': src,
-                 })
-         self._sort_formats(formats)
-         title = media_group.get('media-title')
-         description = media_group.get('media-description')
-         duration = int_or_none(media_group['media-content'][0].get('@attributes', {}).get('duration'))
-         thumbnail = self._proto_relative_url(
-             media_group.get('media-thumbnail', {}).get('@attributes', {}).get('url'))
-         timestamp = parse_iso8601(feed.get('pubDate'), ' ')
-         subtitles = {}
-         for media_subtitle in media_group.get('media-subTitle', []):
-             lang = media_subtitle.get('@attributes', {}).get('lang')
-             href = media_subtitle.get('@attributes', {}).get('href')
-             if not lang or not href:
-                 continue
-             subtitles[lang] = [{
-                 'ext': 'ttml',
-                 'url': href,
-             }]
          series_id, episode_number = video_id.split('.')
          episode_info = self._download_json(
              # We only need a single episode info, so restricting page size to one episode
              if value:
                  subfile = value[0].get('subfile') or value[0].get('new_subfile')
                  if subfile and subfile != 'http://www.dramafever.com/st/':
-                     subtitles.setdefault('English', []).append({
+                     info['subtitiles'].setdefault('English', []).append({
                          'ext': 'srt',
                          'url': subfile,
                      })
  
-         return {
-             'id': video_id,
-             'title': title,
-             'description': description,
-             'thumbnail': thumbnail,
-             'timestamp': timestamp,
-             'duration': duration,
-             'formats': formats,
-             'subtitles': subtitles,
-         }
+         return info
  
  
  class DramaFeverSeriesIE(DramaFeverBaseIE):