2014-01-05 12:48:12 +08:00
from __future__ import unicode_literals
2013-07-09 04:02:23 +08:00
from . common import InfoExtractor
2014-12-13 19:24:42 +08:00
from . . utils import (
2014-03-24 21:53:03 +08:00
int_or_none ,
2019-03-11 16:04:06 +08:00
parse_duration ,
qualities ,
2014-03-24 21:53:03 +08:00
)
2014-01-05 12:48:12 +08:00
2013-07-09 04:02:23 +08:00
class VeohIE ( InfoExtractor ) :
2018-02-11 07:51:10 +08:00
_VALID_URL = r ' https?://(?:www \ .)?veoh \ .com/(?:watch|embed|iphone/#_Watch)/(?P<id>(?:v|e|yapi-)[ \ da-zA-Z]+) '
2014-03-24 21:53:03 +08:00
2017-07-09 15:54:52 +08:00
_TESTS = [ {
' url ' : ' http://www.veoh.com/watch/v56314296nk7Zdmz3 ' ,
2019-03-11 16:04:06 +08:00
' md5 ' : ' 9e7ecc0fd8bbee7a69fe38953aeebd30 ' ,
2017-07-09 15:54:52 +08:00
' info_dict ' : {
2019-03-11 16:04:06 +08:00
' id ' : ' v56314296nk7Zdmz3 ' ,
2017-07-09 15:54:52 +08:00
' ext ' : ' mp4 ' ,
' title ' : ' Straight Backs Are Stronger ' ,
' uploader ' : ' LUMOback ' ,
' description ' : ' At LUMOback, we believe straight backs are stronger. The LUMOback Posture & Movement Sensor: It gently vibrates when you slouch, inspiring improved posture and mobility. Use the app to track your data and improve your posture over time. ' ,
2014-03-24 21:53:03 +08:00
} ,
2018-02-11 07:51:10 +08:00
} , {
' url ' : ' http://www.veoh.com/embed/v56314296nk7Zdmz3 ' ,
' only_matching ' : True ,
2017-07-09 15:54:52 +08:00
} , {
' url ' : ' http://www.veoh.com/watch/v27701988pbTc4wzN?h1=Chile+workers+cover+up+to+avoid+skin+damage ' ,
' md5 ' : ' 4a6ff84b87d536a6a71e6aa6c0ad07fa ' ,
' info_dict ' : {
' id ' : ' 27701988 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' Chile workers cover up to avoid skin damage ' ,
' description ' : ' md5:2bd151625a60a32822873efc246ba20d ' ,
' uploader ' : ' afp-news ' ,
' duration ' : 123 ,
2014-03-24 21:53:03 +08:00
} ,
2017-07-09 15:54:52 +08:00
' skip ' : ' This video has been deleted. ' ,
} , {
' url ' : ' http://www.veoh.com/watch/v69525809F6Nc4frX ' ,
' md5 ' : ' 4fde7b9e33577bab2f2f8f260e30e979 ' ,
' note ' : ' Embedded ooyala video ' ,
' info_dict ' : {
' id ' : ' 69525809 ' ,
' ext ' : ' mp4 ' ,
' title ' : ' Doctors Alter Plan For Preteen \' s Weight Loss Surgery ' ,
' description ' : ' md5:f5a11c51f8fb51d2315bca0937526891 ' ,
' uploader ' : ' newsy-videos ' ,
2014-03-24 21:53:03 +08:00
} ,
2017-07-09 15:54:52 +08:00
' skip ' : ' This video has been deleted. ' ,
} , {
' url ' : ' http://www.veoh.com/watch/e152215AJxZktGS ' ,
' only_matching ' : True ,
} ]
2014-03-24 21:53:03 +08:00
def _extract_video ( self , source ) :
return {
' id ' : source . get ( ' videoId ' ) ,
' title ' : source . get ( ' title ' ) ,
' description ' : source . get ( ' description ' ) ,
' thumbnail ' : source . get ( ' highResImage ' ) or source . get ( ' medResImage ' ) ,
' uploader ' : source . get ( ' username ' ) ,
' duration ' : int_or_none ( source . get ( ' length ' ) ) ,
' view_count ' : int_or_none ( source . get ( ' views ' ) ) ,
' age_limit ' : 18 if source . get ( ' isMature ' ) == ' true ' or source . get ( ' isSexy ' ) == ' true ' else 0 ,
' formats ' : self . _extract_formats ( source ) ,
2013-07-09 04:02:23 +08:00
}
def _real_extract ( self , url ) :
2019-03-11 16:04:06 +08:00
video_id = self . _match_id ( url )
video = self . _download_json (
' https://www.veoh.com/watch/getVideo/ ' + video_id ,
video_id ) [ ' video ' ]
title = video [ ' title ' ]
2013-07-09 04:02:23 +08:00
2019-03-11 16:04:06 +08:00
thumbnail_url = None
q = qualities ( [ ' HQ ' , ' Regular ' ] )
formats = [ ]
for f_id , f_url in video . get ( ' src ' , { } ) . items ( ) :
if not f_url :
continue
if f_id == ' poster ' :
thumbnail_url = f_url
else :
formats . append ( {
' format_id ' : f_id ,
' quality ' : q ( f_id ) ,
' url ' : f_url ,
} )
self . _sort_formats ( formats )
2014-03-24 21:53:03 +08:00
2019-03-11 16:04:06 +08:00
return {
' id ' : video_id ,
' title ' : title ,
' description ' : video . get ( ' description ' ) ,
' thumbnail ' : thumbnail_url ,
' uploader ' : video . get ( ' author ' , { } ) . get ( ' nickname ' ) ,
' duration ' : int_or_none ( video . get ( ' lengthBySec ' ) ) or parse_duration ( video . get ( ' length ' ) ) ,
' view_count ' : int_or_none ( video . get ( ' views ' ) ) ,
' formats ' : formats ,
' average_rating ' : int_or_none ( video . get ( ' rating ' ) ) ,
' comment_count ' : int_or_none ( video . get ( ' numOfComments ' ) ) ,
}