def _parse(self, url, **kwargs): """Return metadata for the given URL that matches :attr:`url_pattern`. :type url: unicode :param url: A remote URL string. :param \*\*kwargs: The named matches from the url match object. :rtype: dict :returns: Any extracted metadata. """ video_id = kwargs['id'] youtube = build_youtube_client() if youtube is None: msg = _( 'No API key configured for YouTube (use Google\'s developer console to create one)' ) raise UserStorageError(msg) yt_result = youtube.fetch_video_details(video_id) if not yt_result: raise UserStorageError(yt_result.message) video_info = yt_result.meta_info.copy() video_info['thumbnail_url'] = yt_result.meta_info['thumbnail']['url'] del video_info['thumbnail'] return video_info
def _parse(self, url, **kwargs): """Return metadata for the given URL that matches :attr:`url_pattern`. :type url: unicode :param url: A remote URL string. :param \*\*kwargs: The named matches from the url match object. :rtype: dict :returns: Any extracted metadata. """ id = kwargs['id'] yt_service = gdata.youtube.service.YouTubeService() yt_service.ssl = False try: entry = yt_service.GetYouTubeVideoEntry(video_id=id) except gdata.service.RequestError, request_error: e = request_error.args[0] if e['status'] == 403 and e['body'] == 'Private video': raise UserStorageError( _('This video is private and cannot be embedded.')) elif e['status'] == 400 and e['body'] == 'Invalid id': raise UserStorageError( _('Invalid YouTube URL. This video does not exist.')) raise UserStorageError(_('YouTube Error: %s') % e['body'])
def _parse(self, url, id, **kwargs): """Return metadata for the given URL that matches :attr:`url_pattern`. :type url: unicode :param url: A remote URL string. :param \*\*kwargs: The named matches from the url match object. :rtype: dict :returns: Any extracted metadata. """ if '?' in url: url += '&skin=api' else: url += '?skin=api' req = Request(url) try: temp_data = urlopen(req) xmlstring = temp_data.read() try: try: xmltree = ElementTree.fromstring(xmlstring) except: temp_data.close() raise except SyntaxError: raise UserStorageError( _('Invalid BlipTV URL. This video does not exist.')) except URLError, e: log.exception(e) raise
def _parse(self, url, **kwargs): """Return metadata for the given URL that matches :attr:`url_pattern`. :type url: unicode :param url: A remote URL string. :param \*\*kwargs: The named matches from the url match object. :rtype: dict :returns: Any extracted metadata. """ id = kwargs['id'] # Ensure the video uses the .com TLD for the API request. url = 'http://www.dailymotion.com/video/%s' % id data_url = 'http://www.dailymotion.com/services/oembed?' + \ urlencode({'format': 'json', 'url': url}) headers = {'User-Agent': USER_AGENT} req = Request(data_url, headers=headers) try: temp_data = urlopen(req) try: data_string = temp_data.read() if data_string == 'This video cannot be embeded.': raise UserStorageError( _('This DailyMotion video does not allow embedding.')) data = simplejson.loads(data_string) finally: temp_data.close() except URLError, e: log.exception(e) data = {}
def parse(self, file=None, url=None): """Return metadata for the given file or raise an error. :type file: :class:`cgi.FieldStorage` or None :param file: A freshly uploaded file object. :type url: unicode or None :param url: A remote URL string. :rtype: dict :returns: Any extracted metadata. :raises UnsuitableEngineError: If file information cannot be parsed. """ if url is None: raise UnsuitableEngineError if url.startswith('rtmp://'): known_server_uris = self._data.setdefault(RTMP_SERVER_URIS, ()) if RTMP_URI_DIVIDER in url: # Allow the user to explicitly mark the server/file separation parts = url.split(RTMP_URI_DIVIDER) server_uri = parts[0].rstrip('/') file_uri = ''.join(parts[1:]).lstrip('/') if server_uri not in known_server_uris: known_server_uris.append(server_uri) else: # Get the rtmp server from our list of known servers or fail for server_uri in known_server_uris: if url.startswith(server_uri): file_uri = url[len(server_uri.rstrip('/') + '/'):] break else: raise UserStorageError( _('This RTMP server has not been configured. Add it ' 'by going to Settings > Storage Engines > ' 'Remote URLs.')) unique_id = ''.join((server_uri, RTMP_URI_DIVIDER, file_uri)) else: unique_id = url filename = os.path.basename(url) name, ext = os.path.splitext(filename) ext = unicode(ext).lstrip('.').lower() container = guess_container_format(ext) # FIXME: Replace guess_container_format with something that takes # into consideration the supported formats of all the custom # players that may be installed. # if not container or container == 'unknown': # raise UnsuitableEngineError return { 'type': guess_media_type(ext), 'container': container, 'display_name': u'%s.%s' % (name, container or ext), 'unique_id': unique_id, }