|  | @@ -75,7 +75,7 @@ class SafariBaseIE(InfoExtractor):
 | 
	
		
			
				|  |  |  class SafariIE(SafariBaseIE):
 | 
	
		
			
				|  |  |      IE_NAME = 'safari'
 | 
	
		
			
				|  |  |      IE_DESC = 'safaribooksonline.com online video'
 | 
	
		
			
				|  |  | -    _VALID_URL = r'https?://(?:www\.)?safaribooksonline\.com/library/view/[^/]+/(?P<course_id>[^/]+)/(?P<part>part\d+)\.html'
 | 
	
		
			
				|  |  | +    _VALID_URL = r'https?://(?:www\.)?safaribooksonline\.com/library/view/[^/]+/(?P<course_id>[^/]+)/(?P<part>[^/?#&]+)\.html'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      _TESTS = [{
 | 
	
		
			
				|  |  |          'url': 'https://www.safaribooksonline.com/library/view/hadoop-fundamentals-livelessons/9780133392838/part00.html',
 | 
	
	
		
			
				|  | @@ -92,6 +92,9 @@ class SafariIE(SafariBaseIE):
 | 
	
		
			
				|  |  |          # non-digits in course id
 | 
	
		
			
				|  |  |          'url': 'https://www.safaribooksonline.com/library/view/create-a-nodejs/100000006A0210/part00.html',
 | 
	
		
			
				|  |  |          'only_matching': True,
 | 
	
		
			
				|  |  | +    }, {
 | 
	
		
			
				|  |  | +        'url': 'https://www.safaribooksonline.com/library/view/learning-path-red/9780134664057/RHCE_Introduction.html',
 | 
	
		
			
				|  |  | +        'only_matching': True,
 | 
	
		
			
				|  |  |      }]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _real_extract(self, url):
 | 
	
	
		
			
				|  | @@ -132,12 +135,15 @@ class SafariIE(SafariBaseIE):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class SafariApiIE(SafariBaseIE):
 | 
	
		
			
				|  |  |      IE_NAME = 'safari:api'
 | 
	
		
			
				|  |  | -    _VALID_URL = r'https?://(?:www\.)?safaribooksonline\.com/api/v1/book/(?P<course_id>[^/]+)/chapter(?:-content)?/(?P<part>part\d+)\.html'
 | 
	
		
			
				|  |  | +    _VALID_URL = r'https?://(?:www\.)?safaribooksonline\.com/api/v1/book/(?P<course_id>[^/]+)/chapter(?:-content)?/(?P<part>[^/?#&]+)\.html'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    _TEST = {
 | 
	
		
			
				|  |  | +    _TESTS = [{
 | 
	
		
			
				|  |  |          'url': 'https://www.safaribooksonline.com/api/v1/book/9780133392838/chapter/part00.html',
 | 
	
		
			
				|  |  |          'only_matching': True,
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    }, {
 | 
	
		
			
				|  |  | +        'url': 'https://www.safaribooksonline.com/api/v1/book/9780134664057/chapter/RHCE_Introduction.html',
 | 
	
		
			
				|  |  | +        'only_matching': True,
 | 
	
		
			
				|  |  | +    }]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def _real_extract(self, url):
 | 
	
		
			
				|  |  |          mobj = re.match(self._VALID_URL, url)
 |