Beispiel #1
0
def video_info(url):
    """Fetch info about a video using youtube-dl

    :param url: URL of the web page containing the video
    :rtype: :class:`weboob.capabilities.video.Video`
    """

    if not MediaPlayer._find_in_path(os.environ['PATH'], 'youtube-dl'):
        raise Exception('Please install youtube-dl')

    try:
        j = json.loads(subprocess.check_output(['youtube-dl', '-f', 'best', '-J', url]))
    except subprocess.CalledProcessError:
        return

    v = BaseVideo(id=url)
    v.title = j.get('title') or NotAvailable
    v.ext = j.get('ext') or NotAvailable
    v.description = j.get('description') or NotAvailable
    v.url = j['url']
    v.duration = j.get('duration') or NotAvailable
    v.author = j.get('uploader') or NotAvailable
    v.rating = j.get('average_rating') or NotAvailable

    if j.get('thumbnail'):
        v.thumbnail = Thumbnail(j['thumbnail'])

    d = j.get('upload_date', j.get('release_date'))
    if d:
        v.date = parse_date(d)

    return v
Beispiel #2
0
    def create_video_from_json(self, _video):
        video = BaseVideo()
        video.id = u'%s' % _video['id']
        video.backend = u'%s' % _video['id'].split('@')[-1]

        if 'url' in _video.keys():
            video.url = u'%s' % _video['url']

        if 'thumbnail' in _video.keys() and _video['thumbnail'] and 'url' in _video['thumbnail'].keys():
            video.thumbnail = BaseImage()
            video.thumbnail.url = u'%s' % _video['thumbnail']['url']
        else:
            video.thumbnail.url = u''
        video.title = u'%s' % _video['title']

        if _video['date']:
            _date = re.search('(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*', _video['date'])

            try:
                datetime.strptime(_date.group(1), '%Y-%m-%d %H:%M:%S')
            except TypeError:
                datetime(*(time.strptime(_date.group(1), '%Y-%m-%d %H:%M:%S')[0:6]))

        video.description = u'%s' % _video['description']
        video.author = u'%s' % _video['author']

        if _video['duration']:
            _duration = _video['duration'].split(':')
            video.duration = timedelta(hours=int(_duration[0]), minutes=int(_duration[1]), seconds=int(_duration[2]))

        return video
Beispiel #3
0
 def separate_collections_and_videos(self, objs):
     videos = []
     categories = []
     for obj in objs:
         if self.is_category(obj):
             categories.append(self.create_category_from_json(obj))
         else:
             video = BaseVideo()
             video.id = obj['id'].split('@')[0]
             video.backend = obj['id'].split('@')[-1]
             videos.append(video)
     return categories, videos
Beispiel #4
0
    def get_video(self, _id, video=None):
        if not video:
            video = BaseVideo(_id)

        new_video = video_info(_id)

        if not new_video:
            return

        video.ext = u'm3u8'

        for k, v in new_video.iter_fields():
            if not empty(v) and empty(getattr(video, k)):
                setattr(video, k, v)

        return video
Beispiel #5
0
    def get_video(self, _id, video=None):
        if not video:
            video = BaseVideo(_id)

        new_video = video_info(_id)

        if not new_video:
            return

        video.ext = u'm3u8'

        for k, v in new_video.iter_fields():
            if not empty(v) and empty(getattr(video, k)):
                setattr(video, k, v)

        return video
Beispiel #6
0
    def search_videos(self, pattern, sortby):
        j = self.request('/api/v1/search/videos?count=10&sort=-match',
                         params={
                             'search': pattern,
                             'start': 0,
                         })

        for item in j['data']:
            video = BaseVideo()
            self._parse_video(video, item)
            yield video
Beispiel #7
0
 def parse_video(self, _video, category):
     video = BaseVideo(u'%s#%s' % (_video['code'], category))
     video.title = unicode(_video['title'])
     video._video_code = unicode(_video['code'])
     video.ext = u'mp4'
     if 'runtime' in _video:
         video.duration = timedelta(seconds=int(_video['runtime']))
     if 'description' in _video:
         video.description = unicode(_video['description'])
     renditions = sorted(_video['rendition'], key=lambda x: 'bandwidth' in x and x['bandwidth']['code'], reverse=True)
     video.url = unicode(max(renditions, key=lambda x: 'bandwidth' in x)['href'])
     return video
Beispiel #8
0
 def parse_video(self, _video, category):
     video = BaseVideo(u'%s#%s' % (_video['code'], category))
     video.title = unicode(_video['title'])
     video._video_code = unicode(_video['code'])
     video.ext = u'mp4'
     if 'runtime' in _video:
         video.duration = timedelta(seconds=int(_video['runtime']))
     if 'description' in _video:
         video.description = unicode(_video['description'])
     renditions = sorted(
         _video['rendition'],
         key=lambda x: 'bandwidth' in x and x['bandwidth']['code'],
         reverse=True)
     video.url = unicode(
         max(renditions, key=lambda x: 'bandwidth' in x)['href'])
     return video
Beispiel #9
0
 def parse_video(self, _video, category):
     video = BaseVideo(u"%s#%s" % (_video["code"], category))
     video.title = unicode(_video["title"])
     video._video_code = unicode(_video["code"])
     video.ext = u"mp4"
     if "runtime" in _video:
         video.duration = timedelta(seconds=int(_video["runtime"]))
     if "description" in _video:
         video.description = unicode(_video["description"])
     renditions = sorted(
         _video["rendition"], key=lambda x: "bandwidth" in x and x["bandwidth"]["code"], reverse=True
     )
     video.url = unicode(max(renditions, key=lambda x: "bandwidth" in x)["href"])
     return video
Beispiel #10
0
    def get_video(self, id, video=None):
        item = self.request('/api/v1/videos/%s' % id)

        if not video:
            video = BaseVideo()

        self._parse_video(video, item)

        video._torrent = item['files'][0]['magnetUri']
        video.url = item['files'][0]['fileUrl']
        video.ext = video.url.rsplit('.', 1)[-1]
        video.size = item['files'][0]['size']

        return video
Beispiel #11
0
    def parse_movie(self, movie):
        video = BaseVideo(u'%s#%s' % (movie['code'], 'movie'))
        video.title = unicode(movie['trailer']['name'])
        video._video_code = unicode(movie['trailer']['code'])
        video.ext = u'mp4'
        if 'poster' in movie:
            video.thumbnail = Thumbnail(movie['poster']['href'])
            video.thumbnail.url = unicode(movie['poster']['href'])
        tdate = movie['release']['releaseDate'].split('-')
        day = 1
        month = 1
        year = 1901
        if len(tdate) > 2:
            year = int(tdate[0])
            month = int(tdate[1])
            day = int(tdate[2])

        video.date = date(year, month, day)
        if 'userRating' in movie['statistics']:
            video.rating = movie['statistics']['userRating']
        elif 'pressRating' in movie['statistics']:
            video.rating = movie['statistics']['pressRating'] * 2
        video.rating_max = 5
        if 'synopsis' in movie:
            video.description = unicode(movie['synopsis'].replace('<p>', '').replace('</p>', ''))
        elif 'synopsisShort' in movie:
            video.description = unicode(movie['synopsisShort'].replace('<p>', '').replace('</p>', ''))
        if 'castingShort' in movie:
            if 'directors' in movie['castingShort']:
                video.author = unicode(movie['castingShort']['directors'])
        if 'runtime' in movie:
            video.duration = timedelta(seconds=int(movie['runtime']))
        return video
Beispiel #12
0
 def __init__(self, *args, **kwargs):
     BaseVideo.__init__(self, *args, **kwargs)
     self.ext = u'wmv'
Beispiel #13
0
 def __init__(self, *args, **kwargs):
     BaseVideo.__init__(self, *args, **kwargs)
     # not always flv...
     self.ext = NotAvailable
Beispiel #14
0
 def __init__(self, *args, **kwargs):
     BaseVideo.__init__(self, *args, **kwargs)
     # not always flv...
     self.ext = NotAvailable
Beispiel #15
0
    def parse_movie(self, movie):
        video = BaseVideo(u'%s#%s' % (movie['code'], 'movie'))
        video.title = unicode(movie['trailer']['name'])
        video._video_code = unicode(movie['trailer']['code'])
        video.ext = u'mp4'
        if 'poster' in movie:
            video.thumbnail = Thumbnail(movie['poster']['href'])
            video.thumbnail.url = unicode(movie['poster']['href'])
        tdate = movie['release']['releaseDate'].split('-')
        day = 1
        month = 1
        year = 1901
        if len(tdate) > 2:
            year = int(tdate[0])
            month = int(tdate[1])
            day = int(tdate[2])

        video.date = date(year, month, day)
        if 'userRating' in movie['statistics']:
            video.rating = movie['statistics']['userRating']
        elif 'pressRating' in movie['statistics']:
            video.rating = movie['statistics']['pressRating'] * 2
        video.rating_max = 5
        if 'synopsis' in movie:
            video.description = unicode(movie['synopsis'].replace(
                '<p>', '').replace('</p>', ''))
        elif 'synopsisShort' in movie:
            video.description = unicode(movie['synopsisShort'].replace(
                '<p>', '').replace('</p>', ''))
        if 'castingShort' in movie:
            if 'directors' in movie['castingShort']:
                video.author = unicode(movie['castingShort']['directors'])
        if 'runtime' in movie:
            video.duration = timedelta(seconds=int(movie['runtime']))
        return video
Beispiel #16
0
 def __init__(self, *args, **kwargs):
     BaseVideo.__init__(self, *args, **kwargs)
     self.nsfw = False
     self.ext = u'mp4'
Beispiel #17
0
 def __init__(self, *args, **kwargs):
     BaseVideo.__init__(self, *args, **kwargs)
     self.nsfw = True
     self.ext = u'flv'
Beispiel #18
0
 def __init__(self, *args, **kwargs):
     BaseVideo.__init__(self, *args, **kwargs)
     self.nsfw = True
Beispiel #19
0
 def __init__(self, _id, *args, **kwargs):
     BaseVideo.__init__(self, 'live.%s' % _id, *args, **kwargs)
Beispiel #20
0
def video_info(url):
    """Fetch info about a video using youtube-dl

    :param url: URL of the web page containing the video
    :rtype: :class:`weboob.capabilities.video.Video`
    """

    if not MediaPlayer._find_in_path(os.environ['PATH'], 'youtube-dl'):
        raise Exception('Please install youtube-dl')

    try:
        j = json.loads(
            subprocess.check_output(['youtube-dl', '-f', 'best', '-J', url]))
    except subprocess.CalledProcessError:
        return

    v = BaseVideo(id=url)
    v.title = unicode(j.get('title')) if j.get('title') else NotAvailable
    v.ext = unicode(j.get('ext')) if j.get('ext') else NotAvailable
    v.description = unicode(
        j.get('description')) if j.get('description') else NotAvailable
    v.url = unicode(j['url'])
    v.duration = timedelta(
        seconds=j.get('duration')) if j.get('duration') else NotAvailable
    v.author = unicode(
        j.get('uploader')) if j.get('uploader') else NotAvailable
    v.rating = j.get('average_rating') or NotAvailable

    if j.get('thumbnail'):
        v.thumbnail = Thumbnail(unicode(j['thumbnail']))

    d = j.get('upload_date', j.get('release_date'))
    if d:
        v.date = parse_date(d)

    return v
Beispiel #21
0
    def parse_movie(self, movie):
        video = BaseVideo(u"%s#%s" % (movie["code"], "movie"))
        video.title = unicode(movie["trailer"]["name"])
        video._video_code = unicode(movie["trailer"]["code"])
        video.ext = u"mp4"
        if "poster" in movie:
            video.thumbnail = BaseImage(movie["poster"]["href"])
            video.thumbnail.url = unicode(movie["poster"]["href"])
        tdate = movie["release"]["releaseDate"].split("-")
        day = 1
        month = 1
        year = 1901
        if len(tdate) > 2:
            year = int(tdate[0])
            month = int(tdate[1])
            day = int(tdate[2])

        video.date = date(year, month, day)
        if "userRating" in movie["statistics"]:
            video.rating = movie["statistics"]["userRating"]
        elif "pressRating" in movie["statistics"]:
            video.rating = movie["statistics"]["pressRating"] * 2
        video.rating_max = 5
        if "synopsis" in movie:
            video.description = unicode(movie["synopsis"].replace("<p>", "").replace("</p>", ""))
        elif "synopsisShort" in movie:
            video.description = unicode(movie["synopsisShort"].replace("<p>", "").replace("</p>", ""))
        if "castingShort" in movie:
            if "directors" in movie["castingShort"]:
                video.author = unicode(movie["castingShort"]["directors"])
        if "runtime" in movie:
            video.duration = timedelta(seconds=int(movie["runtime"]))
        return video