2015-04-06 03:50:21 +08:00
from __future__ import unicode_literals
import re
2015-04-06 23:24:17 +08:00
from . common import InfoExtractor
2017-11-01 00:05:25 +08:00
from . . utils import ExtractorError
2015-04-06 23:24:17 +08:00
2015-04-06 03:50:21 +08:00
class SpankBangIE ( InfoExtractor ) :
2017-11-17 02:05:04 +08:00
_VALID_URL = r ' https?://(?:(?:www|m|[a-z] {2} ) \ .)?spankbang \ .com/(?P<id>[ \ da-z]+)/video '
2016-02-06 00:16:56 +08:00
_TESTS = [ {
2015-04-06 23:24:17 +08:00
' url ' : ' http://spankbang.com/3vvn/video/fantasy+solo ' ,
' md5 ' : ' 1cc433e1d6aa14bc376535b8679302f7 ' ,
' info_dict ' : {
' id ' : ' 3vvn ' ,
' ext ' : ' mp4 ' ,
' title ' : ' fantasy solo ' ,
2017-11-17 02:05:04 +08:00
' description ' : ' Watch fantasy solo free HD porn video - 05 minutes - Babe,Masturbation,Solo,Toy - dillion harper masturbates on a bed free adult movies sexy clips. ' ,
2017-01-02 20:08:07 +08:00
' thumbnail ' : r ' re:^https?://.* \ .jpg$ ' ,
2015-04-06 23:24:17 +08:00
' uploader ' : ' silly2587 ' ,
' age_limit ' : 18 ,
2015-04-06 04:57:59 +08:00
}
2016-02-06 00:16:56 +08:00
} , {
# 480p only
' url ' : ' http://spankbang.com/1vt0/video/solvane+gangbang ' ,
' only_matching ' : True ,
2017-02-21 01:54:43 +08:00
} , {
# no uploader
' url ' : ' http://spankbang.com/lklg/video/sex+with+anyone+wedding+edition+2 ' ,
' only_matching ' : True ,
2017-11-17 02:05:04 +08:00
} , {
# mobile page
' url ' : ' http://m.spankbang.com/1o2de/video/can+t+remember+her+name ' ,
' only_matching ' : True ,
2016-02-06 00:16:56 +08:00
} ]
2015-04-06 03:50:21 +08:00
def _real_extract ( self , url ) :
video_id = self . _match_id ( url )
webpage = self . _download_webpage ( url , video_id )
2017-11-01 00:05:25 +08:00
if re . search ( r ' <[^>]+ \ bid=[ " \' ]video_removed ' , webpage ) :
raise ExtractorError (
' Video %s is not available ' % video_id , expected = True )
2015-04-06 23:24:17 +08:00
stream_key = self . _html_search_regex (
r ''' var \ s+stream_key \ s*= \ s*[ ' " ](.+?)[ ' " ] ''' ,
webpage , ' stream key ' )
formats = [ {
' url ' : ' http://spankbang.com/_ %s / %s /title/ %s p__mp4 ' % ( video_id , stream_key , height ) ,
' ext ' : ' mp4 ' ,
' format_id ' : ' %s p ' % height ,
' height ' : int ( height ) ,
2016-02-06 00:16:12 +08:00
} for height in re . findall ( r ' <(?:span|li|p)[^>]+[qb]_( \ d+)p ' , webpage ) ]
2016-02-06 00:16:40 +08:00
self . _check_formats ( formats , video_id )
2015-04-06 23:24:17 +08:00
self . _sort_formats ( formats )
title = self . _html_search_regex (
2016-01-27 23:49:56 +08:00
r ' (?s)<h1[^>]*>(.+?)</h1> ' , webpage , ' title ' )
2016-08-25 20:45:57 +08:00
description = self . _og_search_description ( webpage )
2015-04-06 23:24:17 +08:00
thumbnail = self . _og_search_thumbnail ( webpage )
uploader = self . _search_regex (
2016-08-25 20:45:57 +08:00
r ' class= " user " [^>]*><img[^>]+>([^<]+) ' ,
2017-02-21 01:54:43 +08:00
webpage , ' uploader ' , default = None )
2015-04-06 23:24:17 +08:00
age_limit = self . _rta_search ( webpage )
2015-04-06 03:50:21 +08:00
return {
2015-04-06 23:24:17 +08:00
' id ' : video_id ,
' title ' : title ,
' description ' : description ,
' thumbnail ' : thumbnail ,
' uploader ' : uploader ,
' formats ' : formats ,
' age_limit ' : age_limit ,
2015-04-06 03:50:21 +08:00
}