mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	Merge remote-tracking branch 'iemejia/master'
This commit is contained in:
		| @@ -20,6 +20,7 @@ from youtube_dl.extractor import ( | ||||
|     SoundcloudUserIE, | ||||
|     LivestreamIE, | ||||
|     NHLVideocenterIE, | ||||
|     BambuserChannelIE, | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -85,5 +86,13 @@ class TestPlaylists(unittest.TestCase): | ||||
|         self.assertEqual(result['title'], u'Highlights') | ||||
|         self.assertEqual(len(result['entries']), 12) | ||||
|  | ||||
|     def test_bambuser_channel(self): | ||||
|         dl = FakeYDL() | ||||
|         ie = BambuserChannelIE(dl) | ||||
|         result = ie.extract('http://bambuser.com/channel/pixelversity') | ||||
|         self.assertIsPlaylist(result) | ||||
|         self.assertEqual(result['title'], u'pixelversity') | ||||
|         self.assertTrue(len(result['entries']) >= 66) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|   | ||||
| @@ -9,6 +9,7 @@ from .arte import ( | ||||
|     ArteTVFutureIE, | ||||
| ) | ||||
| from .auengine import AUEngineIE | ||||
| from .bambuser import BambuserIE, BambuserChannelIE | ||||
| from .bandcamp import BandcampIE | ||||
| from .bliptv import BlipTVIE, BlipTVUserIE | ||||
| from .bloomberg import BloombergIE | ||||
|   | ||||
							
								
								
									
										80
									
								
								youtube_dl/extractor/bambuser.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								youtube_dl/extractor/bambuser.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| import re | ||||
| import json | ||||
| import itertools | ||||
|  | ||||
| from .common import InfoExtractor | ||||
| from ..utils import ( | ||||
|     compat_urllib_request, | ||||
| ) | ||||
|  | ||||
|  | ||||
| class BambuserIE(InfoExtractor): | ||||
|     IE_NAME = u'bambuser' | ||||
|     _VALID_URL = r'https?://bambuser\.com/v/(?P<id>\d+)' | ||||
|     _API_KEY = '005f64509e19a868399060af746a00aa' | ||||
|  | ||||
|     _TEST = { | ||||
|         u'url': u'http://bambuser.com/v/4050584', | ||||
|         u'md5': u'fba8f7693e48fd4e8641b3fd5539a641', | ||||
|         u'info_dict': { | ||||
|             u'id': u'4050584', | ||||
|             u'ext': u'flv', | ||||
|             u'title': u'Education engineering days - lightning talks', | ||||
|             u'duration': 3741, | ||||
|             u'uploader': u'pixelversity', | ||||
|             u'uploader_id': u'344706', | ||||
|         }, | ||||
|     } | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         video_id = mobj.group('id') | ||||
|         info_url = ('http://player-c.api.bambuser.com/getVideo.json?' | ||||
|             '&api_key=%s&vid=%s' % (self._API_KEY, video_id)) | ||||
|         info_json = self._download_webpage(info_url, video_id) | ||||
|         info = json.loads(info_json)['result'] | ||||
|  | ||||
|         return { | ||||
|             'id': video_id, | ||||
|             'title': info['title'], | ||||
|             'url': info['url'], | ||||
|             'thumbnail': info.get('preview'), | ||||
|             'duration': int(info['length']), | ||||
|             'view_count': int(info['views_total']), | ||||
|             'uploader': info['username'], | ||||
|             'uploader_id': info['uid'], | ||||
|         } | ||||
|  | ||||
|  | ||||
| class BambuserChannelIE(InfoExtractor): | ||||
|     IE_NAME = u'bambuser:channel' | ||||
|     _VALID_URL = r'http://bambuser.com/channel/(?P<user>.*?)(?:/|#|\?|$)' | ||||
|     # The maximum number we can get with each request | ||||
|     _STEP = 50 | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         user = mobj.group('user') | ||||
|         urls = [] | ||||
|         last_id = '' | ||||
|         for i in itertools.count(1): | ||||
|             req_url = ('http://bambuser.com/xhr-api/index.php?username={user}' | ||||
|                 '&sort=created&access_mode=0%2C1%2C2&limit={count}' | ||||
|                 '&method=broadcast&format=json&vid_older_than={last}' | ||||
|                 ).format(user=user, count=self._STEP, last=last_id) | ||||
|             req = compat_urllib_request.Request(req_url) | ||||
|             # Without setting this header, we wouldn't get any result | ||||
|             req.add_header('Referer', 'http://bambuser.com/channel/%s' % user) | ||||
|             info_json = self._download_webpage(req, user, | ||||
|                 u'Downloading page %d' % i) | ||||
|             results = json.loads(info_json)['result'] | ||||
|             if len(results) == 0: | ||||
|                 break | ||||
|             last_id = results[-1]['vid'] | ||||
|             urls.extend(self.url_result(v['page'], 'Bambuser') for v in results) | ||||
|  | ||||
|         return { | ||||
|             '_type': 'playlist', | ||||
|             'title': user, | ||||
|             'entries': urls, | ||||
|         } | ||||
		Reference in New Issue
	
	Block a user
	 Ismaël Mejía
					Ismaël Mejía