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
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
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
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
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
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
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
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