Exemple #1
0
 def get_url_data(self, url):
     parsed = urlparse.urlsplit(url)
     if (parsed.scheme in ('http', 'https')
             and parsed.netloc == 'video.google.com'
             and parsed.path == '/videoplay' and 'docid' in parsed.query):
         return {'url': url}
     raise UnhandledVideo(url)
    def get_video(self, url, fields=None, api_keys=None, require_loaders=True):
        """
        For each registered :mod:`suite <vidscraper.suites>`, calls
        :meth:`~BaseSuite.get_video` with the given ``url``, ``fields``, and
        ``api_keys``, until a suite returns a :class:`.Video` instance.

        :param require_loaders: Changes the behavior if no suite is found
                                which handles the given parameters. If
                                ``True`` (default), :exc:`.UnhandledVideo`
                                will be raised; otherwise, a video will 
                                returned with the given ``url`` and
                                ``fields``, but it will not be able to load
                                any additional data.
        :raises: :exc:`.UnhandledVideo` if ``require_loaders`` is ``True`` and
                 no registered suite returns a video for the given parameters.
        :returns: :class:`.Video` instance with no data loaded.

        """
        for suite in self.suites:
            try:
                return suite.get_video(url, fields=fields, api_keys=api_keys)
            except UnhandledVideo:
                pass

        if require_loaders:
            raise UnhandledVideo(url)

        return Video(url, fields=fields)
Exemple #3
0
 def get_url_data(self, url):
     parsed_url = urlparse.urlsplit(url)
     if (parsed_url.scheme in ('http', 'https') and
         parsed_url.netloc in ('ustream.tv', 'www.ustream.tv')):
         match = self.path_re.match(parsed_url.path)
         if match:
             return match.groupdict()
     raise UnhandledVideo(url)
    def get_url_data(self, url):
        """
        Parses the url into data which can be used to construct a url this
        loader can use to get data.

        :raises: :exc:`.UnhandledVideo` if the url isn't handled by this
                 loader.

        """
        raise UnhandledVideo(url)
    def get_video(self, url, fields=None, api_keys=None):
        """
        Returns a video using this suite's loaders. This instance will not
        have data loaded.

        :param url: A video URL. Video website URLs generally work; more
                    obscure urls (like API urls) might work as well.
        :param fields: A list of fields to be fetched for the video. Limiting this
                       may decrease the number of HTTP requests required for
                       loading the video.

                       .. seealso:: :ref:`video-fields`
        :param api_keys: A dictionary of API keys for various services. Check
                         the documentation for each
                         :mod:`suite <vidscraper.suites>` to find what API
                         keys they may want or require.
        :raises: :exc:`.UnhandledVideo` if none of this suite's loaders can
                 handle the given url and api keys.

        """
        # Sanity-check the url.
        if not url:
            raise UnhandledVideo(url)

        loaders = []

        for cls in self.loader_classes:
            try:
                loader = cls(url, api_keys=api_keys)
            except UnhandledVideo:
                continue

            loaders.append(loader)
        if not loaders:
            raise UnhandledVideo(url)
        return Video(url, loaders=loaders, fields=fields)
Exemple #6
0
 def get_url_data(self, url):
     parsed = urlparse.urlsplit(url)
     if parsed.scheme in ('http', 'https'):
         if (parsed.netloc in ('www.youtube.com', 'youtube.com')
                 and parsed.path in ('/watch', '/watch/')):
             qsd = urlparse.parse_qs(parsed.query)
             try:
                 return {'video_id': qsd['v'][0]}
             except (KeyError, IndexError):
                 pass
         elif parsed.netloc == 'youtu.be':
             match = self.short_path_re.match(parsed.path)
             if match:
                 return match.groupdict()
     raise UnhandledVideo(url)
 def get_url_data(self, url):
     match = self.path_re.match(url)
     if match:
         return match.groupdict()
     raise UnhandledVideo(url)
Exemple #8
0
 def get_url_data(self, url):
     if 'ustream_key' not in self.api_keys:
         raise UnhandledVideo(url)
     data = super(ApiLoader, self).get_url_data(url)
     data.update(self.api_keys)
     return data
Exemple #9
0
 def get_url_data(self, url):
     if not self.is_available():
         raise UnhandledVideo(url)
     return super(AdvancedLoader, self).get_url_data(url)
Exemple #10
0
 def get_url_data(self, url):
     if not self.video_re.match(url):
         raise UnhandledVideo(url)
     return {'url': url}