]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/bambuser.py
de5d4faf3b920ddb0f2231f05311b9858dc5ef86
   1 from __future__ 
import unicode_literals
 
   7 from .common 
import InfoExtractor
 
  13 class BambuserIE(InfoExtractor
): 
  15     _VALID_URL 
= r
'https?://bambuser\.com/v/(?P<id>\d+)' 
  16     _API_KEY 
= '005f64509e19a868399060af746a00aa' 
  19         'url': 'http://bambuser.com/v/4050584', 
  20         # MD5 seems to be flaky, see https://travis-ci.org/rg3/youtube-dl/jobs/14051016#L388 
  21         #u'md5': 'fba8f7693e48fd4e8641b3fd5539a641', 
  25             'title': 'Education engineering days - lightning talks', 
  27             'uploader': 'pixelversity', 
  28             'uploader_id': '344706', 
  31             # It doesn't respect the 'Range' header, it would download the whole video 
  32             # caused the travis builds to fail: https://travis-ci.org/rg3/youtube-dl/jobs/14493845#L59 
  33             'skip_download': True, 
  37     def _real_extract(self
, url
): 
  38         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  39         video_id 
= mobj
.group('id') 
  40         info_url 
= ('http://player-c.api.bambuser.com/getVideo.json?' 
  41             '&api_key=%s&vid=%s' % (self
._API
_KEY
, video_id
)) 
  42         info_json 
= self
._download
_webpage
(info_url
, video_id
) 
  43         info 
= json
.loads(info_json
)['result'] 
  47             'title': info
['title'], 
  49             'thumbnail': info
.get('preview'), 
  50             'duration': int(info
['length']), 
  51             'view_count': int(info
['views_total']), 
  52             'uploader': info
['username'], 
  53             'uploader_id': info
['uid'], 
  57 class BambuserChannelIE(InfoExtractor
): 
  58     IE_NAME 
= 'bambuser:channel' 
  59     _VALID_URL 
= r
'https?://bambuser\.com/channel/(?P<user>.*?)(?:/|#|\?|$)' 
  60     # The maximum number we can get with each request 
  63         'url': 'http://bambuser.com/channel/pixelversity', 
  65             'title': 'pixelversity', 
  67         'playlist_mincount': 60, 
  70     def _real_extract(self
, url
): 
  71         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  72         user 
= mobj
.group('user') 
  75         for i 
in itertools
.count(1): 
  76             req_url 
= ('http://bambuser.com/xhr-api/index.php?username={user}' 
  77                 '&sort=created&access_mode=0%2C1%2C2&limit={count}' 
  78                 '&method=broadcast&format=json&vid_older_than={last}' 
  79                 ).format(user
=user
, count
=self
._STEP
, last
=last_id
) 
  80             req 
= compat_urllib_request
.Request(req_url
) 
  81             # Without setting this header, we wouldn't get any result 
  82             req
.add_header('Referer', 'http://bambuser.com/channel/%s' % user
) 
  83             data 
= self
._download
_json
( 
  84                 req
, user
, 'Downloading page %d' % i
) 
  85             results 
= data
['result'] 
  88             last_id 
= results
[-1]['vid'] 
  89             urls
.extend(self
.url_result(v
['page'], 'Bambuser') for v 
in results
)