mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-11-01 09:26:45 -07:00 
			
		
		
		
	[imgur] Improve (Closes #7928)
This commit is contained in:
		@@ -13,7 +13,7 @@ from ..utils import (
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ImgurIE(InfoExtractor):
 | 
			
		||||
    _VALID_URL = r'https?://(?:i\.)?imgur\.com/(gallery/)?(?P<id>[a-zA-Z0-9]{6,})'
 | 
			
		||||
    _VALID_URL = r'https?://(?:i\.)?imgur\.com/(?:(?:gallery|topic/[^/]+)/)?(?P<id>[a-zA-Z0-9]{6,})(?:[/?#&]+|\.[a-z]+)?$'
 | 
			
		||||
 | 
			
		||||
    _TESTS = [{
 | 
			
		||||
        'url': 'https://i.imgur.com/A61SaA1.gifv',
 | 
			
		||||
@@ -40,6 +40,9 @@ class ImgurIE(InfoExtractor):
 | 
			
		||||
            'description': 'Imgur: The most awesome images on the Internet.'
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }, {
 | 
			
		||||
        'url': 'http://imgur.com/topic/Funny/N8rOudd',
 | 
			
		||||
        'only_matching': True,
 | 
			
		||||
    }]
 | 
			
		||||
 | 
			
		||||
    def _real_extract(self, url):
 | 
			
		||||
@@ -109,28 +112,38 @@ class ImgurIE(InfoExtractor):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ImgurAlbumIE(InfoExtractor):
 | 
			
		||||
    _VALID_URL = r'https?://(?:i\.)?imgur\.com/(gallery/)?(?P<id>[a-zA-Z0-9]{5})(?![a-zA-Z0-9])'
 | 
			
		||||
    _VALID_URL = r'https?://(?:i\.)?imgur\.com/(?:(?:a|gallery|topic/[^/]+)/)?(?P<id>[a-zA-Z0-9]{5})(?:[/?#&]+)?$'
 | 
			
		||||
 | 
			
		||||
    _TEST = {
 | 
			
		||||
    _TESTS = [{
 | 
			
		||||
        'url': 'http://imgur.com/gallery/Q95ko',
 | 
			
		||||
        'info_dict': {
 | 
			
		||||
            'id': 'Q95ko',
 | 
			
		||||
        },
 | 
			
		||||
        'playlist_count': 25,
 | 
			
		||||
    }
 | 
			
		||||
    }, {
 | 
			
		||||
        'url': 'http://imgur.com/a/j6Orj',
 | 
			
		||||
        'only_matching': True,
 | 
			
		||||
    }, {
 | 
			
		||||
        'url': 'http://imgur.com/topic/Aww/ll5Vk',
 | 
			
		||||
        'only_matching': True,
 | 
			
		||||
    }]
 | 
			
		||||
 | 
			
		||||
    def _real_extract(self, url):
 | 
			
		||||
        album_id = self._match_id(url)
 | 
			
		||||
 | 
			
		||||
        album_img_data = self._download_json(
 | 
			
		||||
            'http://imgur.com/gallery/%s/album_images/hit.json?all=true' % album_id, album_id)['data']
 | 
			
		||||
        album_images = self._download_json(
 | 
			
		||||
            'http://imgur.com/gallery/%s/album_images/hit.json?all=true' % album_id,
 | 
			
		||||
            album_id, fatal=False)
 | 
			
		||||
 | 
			
		||||
        if len(album_img_data) == 0:
 | 
			
		||||
            return self.url_result('http://imgur.com/%s' % album_id)
 | 
			
		||||
        else:
 | 
			
		||||
            album_images = album_img_data['images']
 | 
			
		||||
            entries = [
 | 
			
		||||
                self.url_result('http://imgur.com/%s' % image['hash'])
 | 
			
		||||
                for image in album_images if image.get('hash')]
 | 
			
		||||
        if album_images:
 | 
			
		||||
            data = album_images.get('data')
 | 
			
		||||
            if data and isinstance(data, dict):
 | 
			
		||||
                images = data.get('images')
 | 
			
		||||
                if images and isinstance(images, list):
 | 
			
		||||
                    entries = [
 | 
			
		||||
                        self.url_result('http://imgur.com/%s' % image['hash'])
 | 
			
		||||
                        for image in images if image.get('hash')]
 | 
			
		||||
                    return self.playlist_result(entries, album_id)
 | 
			
		||||
 | 
			
		||||
        return self.playlist_result(entries, album_id)
 | 
			
		||||
        # Fallback to single video
 | 
			
		||||
        return self.url_result('http://imgur.com/%s' % album_id, ImgurIE.ie_key())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user